All Downloads are FREE. Search and download functionalities are using the official Maven repository.

META-INF.resources.js.admin.utils.normalizeItems.js Maven / Gradle / Ivy

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 KBDropdownPropsTransformer from '../KBDropdownPropsTransformer';

function addSeparators(items) {
	if (items.length < 2) {
		return items;
	}

	const separatedItems = [items[0]];

	for (let i = 1; i < items.length; i++) {
		const item = items[i];

		if (item.type === 'group' && item.separator) {
			separatedItems.push({type: 'divider'});
		}

		separatedItems.push(item);
	}

	return separatedItems.map((item) => {
		if (item.type === 'group') {
			return {
				...item,
				items: addSeparators(item.items),
			};
		}

		return item;
	});
}

function filterEmptyGroups(items) {
	return items
		.filter(
			(item) =>
				item.type !== 'group' ||
				(Array.isArray(item.items) && item.items.length)
		)
		.map((item) =>
			item.type === 'group'
				? {...item, items: filterEmptyGroups(item.items)}
				: item
		);
}

function normalizeItems(items = [], portletNamespace) {
	const transformedItems = KBDropdownPropsTransformer({
		items: items.map((item) => {
			return {
				...item,
				items: item.items?.map(({icon, ...props}) => ({
					...props,
					symbolLeft: icon,
				})),
			};
		}),
		portletNamespace,
	}).items;

	const filteredItems = filterEmptyGroups(transformedItems);

	return addSeparators(filteredItems);
}

export default function normalizeDropdownItems(items, portletNamespace) {
	if (items) {
		return items.map((item) => {
			return {
				...item,
				actions: normalizeItems(item.actions, portletNamespace),
				children: normalizeDropdownItems(
					item.children,
					portletNamespace
				),
			};
		});
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy