PromucFlow_constructor/app/client/src/sagas/AutoLayoutUpdateSagas.tsx

55 lines
1.6 KiB
TypeScript
Raw Normal View History

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,
),
]);
}