diff --git a/app/client/src/ce/actions/evaluationActionsList.ts b/app/client/src/ce/actions/evaluationActionsList.ts index 639c18571f31..f95f31532265 100644 --- a/app/client/src/ce/actions/evaluationActionsList.ts +++ b/app/client/src/ce/actions/evaluationActionsList.ts @@ -36,7 +36,7 @@ export const LINT_REDUX_ACTIONS = { [ReduxActionTypes.INSTALL_LIBRARY_SUCCESS]: true, [ReduxActionTypes.UNINSTALL_LIBRARY_SUCCESS]: true, [ReduxActionTypes.BUFFERED_ACTION]: true, - [ReduxActionTypes.BATCH_UPDATES_SUCCESS]: true, + [ReduxActionTypes.BATCH_UPDATES_SUCCESS_CONSOLIDATED]: true, }; export const LOG_REDUX_ACTIONS = { @@ -96,7 +96,8 @@ export const EVALUATE_REDUX_ACTIONS = [ ReduxActionTypes.RESET_WIDGET_META, ReduxActionTypes.RESET_WIDGET_META_UPDATES, // Batches - ReduxActionTypes.BATCH_UPDATES_SUCCESS, + // ReduxActionTypes.BATCH_UPDATES_SUCCESS, + ReduxActionTypes.BATCH_UPDATES_SUCCESS_CONSOLIDATED, // App Theme ReduxActionTypes.UPDATE_SELECTED_APP_THEME_SUCCESS, ReduxActionTypes.CHANGE_SELECTED_APP_THEME_SUCCESS, diff --git a/app/client/src/ce/constants/ReduxActionConstants.tsx b/app/client/src/ce/constants/ReduxActionConstants.tsx index 0ecaa63d846e..2f672dc2ca08 100644 --- a/app/client/src/ce/constants/ReduxActionConstants.tsx +++ b/app/client/src/ce/constants/ReduxActionConstants.tsx @@ -1085,6 +1085,7 @@ const BatchUpdateActionTypes = { BATCHED_UPDATE: "BATCHED_UPDATE", EXECUTE_BATCH: "EXECUTE_BATCH", BATCH_UPDATES_SUCCESS: "BATCH_UPDATES_SUCCESS", + BATCH_UPDATES_SUCCESS_CONSOLIDATED: "BATCH_UPDATES_SUCCESS_CONSOLIDATED", }; const HelpActionTypes = { diff --git a/app/client/src/sagas/ActionExecution/PluginActionSaga.ts b/app/client/src/sagas/ActionExecution/PluginActionSaga.ts index 59c312ba893d..6619177eb722 100644 --- a/app/client/src/sagas/ActionExecution/PluginActionSaga.ts +++ b/app/client/src/sagas/ActionExecution/PluginActionSaga.ts @@ -3,6 +3,7 @@ import { call, delay, put, + race, select, take, takeEvery, @@ -1690,6 +1691,39 @@ function* handleUpdateActionData( } } +function* captureActionsWithinPeriodTriggers() { + while (true) { + const buffer = []; // Initialize a new buffer for each batch + const endTime = Date.now() + 10000; + // eslint-disable-next-line prefer-const + + while (Date.now() < endTime) { + try { + // Use a non-blocking `take` to capture actions within the period + + const { action } = yield race({ + action: take(ReduxActionTypes.BATCH_UPDATES_SUCCESS), + del: delay(1000), + }); + + if (!action) continue; + + buffer.push(...action.payload); + } catch (e) { + // Handle errors if needed + } + } + + // After the time period, dispatch the collected actions + if (buffer.length > 0) { + yield put({ + type: ReduxActionTypes.BATCH_UPDATES_SUCCESS_CONSOLIDATED, + payload: buffer, + }); + } + } +} + export function* watchPluginActionExecutionSagas() { yield all([ takeLatest(ReduxActionTypes.RUN_ACTION_REQUEST, runActionSaga), @@ -1704,5 +1738,9 @@ export function* watchPluginActionExecutionSagas() { takeLatest(ReduxActionTypes.PLUGIN_SOFT_REFRESH, softRefreshActionsSaga), takeEvery(ReduxActionTypes.EXECUTE_JS_UPDATES, makeUpdateJSCollection), takeEvery(ReduxActionTypes.UPDATE_ACTION_DATA, handleUpdateActionData), + takeLatest( + ReduxActionTypes.START_EVALUATION, + captureActionsWithinPeriodTriggers, + ), ]); }