
META-INF.resources.page_editor.app.reducers.layoutDataReducer.ts Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of com.liferay.layout.content.page.editor.web
Show all versions of com.liferay.layout.content.page.editor.web
Liferay Layout Content Page Editor Web
The newest version!
/**
* SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
import {LayoutData} from '../../types/layout_data/LayoutData';
import addFragmentEntryLinks from '../actions/addFragmentEntryLinks';
import addItem from '../actions/addItem';
import addRule from '../actions/addRule';
import addStepper from '../actions/addStepper';
import deleteItem from '../actions/deleteItem';
import deleteRule from '../actions/deleteRule';
import duplicateItem from '../actions/duplicateItem';
import moveItems from '../actions/moveItems';
import moveStepper from '../actions/moveStepper';
import pasteItems from '../actions/pasteItems';
import removeFormStep from '../actions/removeFormStep';
import {
ADD_FRAGMENT_ENTRY_LINKS,
ADD_ITEM,
ADD_RULE,
ADD_STEPPER,
DELETE_ITEM,
DELETE_RULE,
DUPLICATE_ITEM,
MOVE_ITEM,
MOVE_STEPPER,
PASTE_ITEM,
REMOVE_FORM_STEP,
UPDATE_COLLECTION_DISPLAY_COLLECTION,
UPDATE_COL_SIZE,
UPDATE_FORM_ITEM_CONFIG,
UPDATE_FRAGMENT_ENTRY_LINK_CONFIGURATION,
UPDATE_ITEM_CONFIG,
UPDATE_PREVIEW_IMAGE,
UPDATE_ROW_COLUMNS,
UPDATE_RULE,
} from '../actions/types';
import updateColSize from '../actions/updateColSize';
import updateCollectionDisplayCollection from '../actions/updateCollectionDisplayCollection';
import updateFormItemConfig from '../actions/updateFormItemConfig';
import updateFragmentEntryLinkConfiguration from '../actions/updateFragmentEntryLinkConfiguration';
import updateItemConfig from '../actions/updateItemConfig';
import updatePreviewImage from '../actions/updatePreviewImage';
import updateRowColumns from '../actions/updateRowColumns';
import updateRule from '../actions/updateRule';
import {setIn} from '../utils/setIn';
export const INITIAL_STATE: LayoutData = {
deletedItems: [],
items: {},
pageRules: [],
rootItems: {dropZone: '', main: ''},
version: '0',
};
export default function layoutDataReducer(
layoutData = INITIAL_STATE,
action:
| ReturnType
| ReturnType
| ReturnType
| ReturnType
| ReturnType
| ReturnType
| ReturnType
| ReturnType
| ReturnType
| ReturnType
| ReturnType
| ReturnType
| ReturnType
| ReturnType
| ReturnType
| ReturnType
| ReturnType
| ReturnType
| ReturnType
): LayoutData {
switch (action.type) {
case ADD_FRAGMENT_ENTRY_LINKS:
case ADD_ITEM:
case ADD_RULE:
case ADD_STEPPER:
case DELETE_ITEM:
case DELETE_RULE:
case DUPLICATE_ITEM:
case MOVE_ITEM:
case MOVE_STEPPER:
case PASTE_ITEM:
case REMOVE_FORM_STEP:
case UPDATE_COL_SIZE:
case UPDATE_COLLECTION_DISPLAY_COLLECTION:
case UPDATE_FRAGMENT_ENTRY_LINK_CONFIGURATION:
case UPDATE_ROW_COLUMNS:
case UPDATE_RULE:
return action.layoutData;
case UPDATE_FORM_ITEM_CONFIG: {
const {itemIds, layoutData: nextLayoutData} = action;
const [itemId] = itemIds;
const nextItem = nextLayoutData.items[itemId] || {};
return setIn(
nextLayoutData,
['items', itemId, 'config'],
nextItem.config
);
}
case UPDATE_ITEM_CONFIG: {
const {itemIds, layoutData} = action;
let nextLayoutData = layoutData;
for (const itemId of itemIds) {
const nextItem = nextLayoutData.items[itemId] || {};
nextLayoutData = setIn(
nextLayoutData,
['items', itemId, 'config'],
nextItem.config
);
}
return nextLayoutData;
}
case UPDATE_PREVIEW_IMAGE: {
const newItems = Object.fromEntries(
Object.entries(layoutData.items).map(([itemId, item]) => {
if (!('styles' in item.config) || !item.config.styles) {
return [itemId, item];
}
if (
item.config.styles.backgroundImage?.classPK !==
action.fileEntryId
) {
return [itemId, item];
}
const nextItem = setIn(
item,
['config', 'styles', 'backgroundImage', 'url'],
action.previewURL
);
return [itemId, nextItem];
})
);
return {
...layoutData,
items: newItems,
};
}
default:
return layoutData;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy