# disco/1.4.10/backend/views/components/Main/features/discount/designAutoSaveMiddleware.js

Discount Rules for WooCommerce – Disco | Dynamic Pricing, Conditions, Bulk, Bundle, BOGO, version 1.4.10. 73 lines.

- Page: https://pluginprobe.com/plugins/disco/1.4.10/code/backend/views/components/Main/features/discount/designAutoSaveMiddleware.js
- Raw: https://pluginprobe.com/plugins/disco/1.4.10/raw/backend/views/components/Main/features/discount/designAutoSaveMiddleware.js
- Modified: 2026-05-23T04:17:58+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/disco/1.4.10/code/backend/views/components/Main/features/discount/designAutoSaveMiddleware.js#L10-L20`.

```javascript
import { campaignsApi } from '../campaigns/campaignsApi';
import {
	applyCountdownDesign,
	updateBadge,
	updateCartPage,
	updateCountdown,
	updateTable,
	updateTextHighlight,
} from '../discount/discountSlice';

import { setSaveStatus } from '../interaction/interactionSlice';

let abortController = null;
let debounceTimer = null;

const designAutoSaveMiddleware = (store) => (next) => async (action) => {
	const designActions = [
		applyCountdownDesign.type,
		updateBadge.type,
		updateTextHighlight.type,
		updateCountdown.type,
		updateTable.type,
		updateCartPage.type,
	];

	const result = next(action);
	const state = store.getState().discount;

	// 🔹 WHEN SAVE REQUEST SUCCESSFULLY COMPLETED
	if (campaignsApi.endpoints.patchCampaign.matchFulfilled(action)) {
		store.dispatch(setSaveStatus('success'));
	}

	// Auto-save only on design tab
	if (!designActions.includes(action.type) || state.ui[0] !== 1) {
		return result;
	}

	// Debounce
	if (debounceTimer) clearTimeout(debounceTimer);

	debounceTimer = setTimeout(() => {
		// Abort previous pending request
		if (abortController) {
			abortController.abort();
		}

		abortController = new AbortController();
		const signal = abortController.signal;

		// Read fresh state at fire time, not at dispatch time
		const freshState = store.getState().discount;

		//Before saving, set status = "saving"
		store.dispatch(setSaveStatus('saving'));

		// Send mutation request
		store.dispatch(
			campaignsApi.endpoints.patchCampaign.initiate(
				{
					id: freshState.id,
					data: { design_blocks: freshState.design_blocks },
				},
				{ signal }
			)
		);
	}, 3000);

	return result;
};

export default designAutoSaveMiddleware;

```
