UNPKG

devextreme

Version:

JavaScript/TypeScript Component Suite for Responsive Web Development

65 lines (64 loc) 2.65 kB
/** * DevExtreme (esm/__internal/scheduler/appointment_popup/m_customize_form_items.js) * Version: 25.2.7 * Build date: Tue May 05 2026 * * Copyright (c) 2012 - 2026 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ import { extend } from "../../../core/utils/extend"; const isGroupItem = item => "items" in item; const createFormItemFromConfig = configItem => "string" === typeof configItem ? { itemType: "simple", editorType: "dxTextBox", name: configItem, dataField: configItem } : configItem; const buildFormItemsMap = function(items) { let map = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : new Map; return items.reduce((accumulator, item) => { if (item.name) { accumulator.set(item.name, Object.assign({}, item)) } return buildFormItemsMap(isGroupItem(item) ? item.items ?? [] : [], accumulator) }, map) }; const removeItemFromGroups = (itemName, itemsMap) => { Array.from(itemsMap.values()).forEach(group => { if (isGroupItem(group) && group.items) { group.items = group.items.filter(item => item.name !== itemName) } }) }; const getItemName = customItem => "string" === typeof customItem ? customItem : customItem.name; const shouldMergeWithExisting = customItems => "object" === typeof customItems; const hasChildItems = customItems => "object" === typeof customItems && isGroupItem(customItems) && Boolean(customItems.items); const customizeFormItems = (items, userConfig) => { if (!userConfig) { return items } const defaultItemsMap = buildFormItemsMap(items); const customize = userItems => userItems.map(customItems => { const formItem = (customItems => { const itemName = getItemName(customItems); const defaultItem = itemName ? defaultItemsMap.get(itemName) : void 0; if (defaultItem && itemName) { removeItemFromGroups(itemName, defaultItemsMap); return shouldMergeWithExisting(customItems) ? extend(true, {}, defaultItem, customItems) : defaultItem } return createFormItemFromConfig(customItems) })(customItems); if (isGroupItem(formItem) && hasChildItems(customItems) && customItems.items) { return Object.assign({}, formItem, { items: customize(customItems.items) }) } return formItem }); return customize(userConfig) }; export { customizeFormItems };