import { updateAndSaveLayout } from "actions/pageActions"; import { ReduxAction, ReduxActionErrorTypes, ReduxActionTypes, } from "ce/constants/ReduxActionConstants"; import log from "loglevel"; import { CanvasWidgetsReduxState } from "reducers/entityReducers/canvasWidgetsReducer"; import { all, put, select, takeLatest } from "redux-saga/effects"; import { alterLayoutForDesktop, alterLayoutForMobile, } from "utils/autoLayout/AutoLayoutUtils"; import { getWidgets } from "./selectors"; export function* updateLayoutForMobileCheckpoint( actionPayload: ReduxAction<{ parentId: string; isMobile: boolean; canvasWidth: number; }>, ) { try { const start = performance.now(); const { canvasWidth, isMobile, parentId } = actionPayload.payload; const allWidgets: CanvasWidgetsReduxState = yield select(getWidgets); const updatedWidgets: CanvasWidgetsReduxState = isMobile ? alterLayoutForMobile(allWidgets, parentId, canvasWidth) : alterLayoutForDesktop(allWidgets, parentId); yield put(updateAndSaveLayout(updatedWidgets)); log.debug( "Auto Layout : updating layout for mobile viewport took", performance.now() - start, "ms", ); } catch (error) { yield put({ type: ReduxActionErrorTypes.WIDGET_OPERATION_ERROR, payload: { action: ReduxActionTypes.RECALCULATE_COLUMNS, error, }, }); } } export default function* layoutUpdateSagas() { yield all([ takeLatest( ReduxActionTypes.RECALCULATE_COLUMNS, updateLayoutForMobileCheckpoint, ), ]); }