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

META-INF.resources.js.components.ViewObjectDefinitions.ModalMoveObjectDefinition.tsx Maven / Gradle / Ivy

The newest version!
/**
 * SPDX-FileCopyrightText: (c) 2023 Liferay, Inc. https://liferay.com
 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
 */

import ClayAlert from '@clayui/alert';
import ClayButton from '@clayui/button';
import ClayEmptyState from '@clayui/empty-state';
import ClayIcon from '@clayui/icon';
import ClayList from '@clayui/list';
import ClayModal, {ClayModalProvider, useModal} from '@clayui/modal';
import {
	API,
	ManagementToolbarSearch,
	arrayUtils,
	stringUtils,
} from '@liferay/object-js-components-web';
import {ManagementToolbar, openToast} from 'frontend-js-components-web';
import {sub} from 'frontend-js-web';
import React, {useEffect, useMemo, useState} from 'react';

import './ModalMoveObjectDefinition.scss';

interface ModalMoveObjectDefinitionProps {
	handleOnClose: () => void;
	objectDefinitionId: number;
	objectFolders: ObjectFolder[];
	onAfterMoveObjectDefinition: () => void;
	setMoveObjectDefinition: (value: ObjectDefinition | null) => void;
}

export function ModalMoveObjectDefinition({
	handleOnClose,
	objectDefinitionId,
	objectFolders,
	onAfterMoveObjectDefinition,
	setMoveObjectDefinition,
}: ModalMoveObjectDefinitionProps) {
	const [objectDefinition, setObjectDefinition] =
		useState();
	const [query, setQuery] = useState('');
	const [
		selectedObjectFolderExternalReferenceCode,
		setSelectedObjectFolderExternalReferenceCode,
	] = useState('');
	const [selectedObjectFolder, setSelectedObjectFolder] =
		useState();
	const [error, setError] = useState('');

	const {observer, onClose} = useModal({
		onClose: () => {
			setMoveObjectDefinition(null);
			handleOnClose();
		},
	});

	const filteredObjectFolders = objectFolders.filter(
		(item) =>
			item.externalReferenceCode !==
			selectedObjectFolder?.externalReferenceCode
	);

	const modalObjectFolderItems = useMemo(() => {
		const filteredItems = arrayUtils.filterArrayByQuery({
			array: filteredObjectFolders,
			query,
			str: 'label',
		});

		return query ? filteredItems : filteredObjectFolders;
	}, [query, filteredObjectFolders]);

	const handleMoveObject = async () => {
		const movedObjectDefinition: ObjectDefinition = {
			...(objectDefinition as ObjectDefinition),
			objectFolderExternalReferenceCode:
				selectedObjectFolderExternalReferenceCode,
		};

		try {
			await API.save({
				item: movedObjectDefinition,
				method: 'PATCH',
				url: `/o/object-admin/v1.0/object-definitions/${objectDefinitionId}`,
			});

			onClose();

			openToast({
				message: sub(
					Liferay.Language.get('x-was-moved-successfully'),
					`${Liferay.Util.escapeHTML(
						stringUtils.getLocalizableLabel({
							fallbackLabel: movedObjectDefinition?.name,
							labels: movedObjectDefinition?.label,
						})
					)}`
				),
				type: 'success',
			});

			onAfterMoveObjectDefinition();
		}
		catch (error) {
			setError((error as Error).message);
		}
	};

	useEffect(() => {
		const makeFetch = async () => {
			if (objectDefinitionId) {
				const objectDefinitionResponse =
					await API.getObjectDefinitionById(objectDefinitionId);

				const objectFolderResponse =
					await API.getObjectFolderByExternalReferenceCode(
						objectDefinitionResponse.objectFolderExternalReferenceCode
					);

				setSelectedObjectFolder(objectFolderResponse);
				setObjectDefinition(objectDefinitionResponse);
			}
		};

		makeFetch();
	}, [objectDefinitionId]);

	return (
		
			
				
					{`${Liferay.Language.get(
						'move'
					)} "${stringUtils.getLocalizableLabel({
						labels: objectDefinition?.label,
					})}"`}
				

				
					{error && (
						{error}
					)}

					{!filteredObjectFolders.length ? (
						

{Liferay.Language.get( 'it-is-not-possible-to-move-this-object-definition-because-there-are-no-object-folders-available' )}

) : ( <> {!modalObjectFolderItems.length && query ? (
) : ( {modalObjectFolderItems.map( ({ externalReferenceCode, label, name, }) => ( { setSelectedObjectFolderExternalReferenceCode( externalReferenceCode ); }} >
{stringUtils.getLocalizableLabel( { fallbackLabel: name, labels: label, } )}
) )}
)} )}
onClose()} > {Liferay.Language.get('close')} ) : ( onClose()} > {Liferay.Language.get('cancel')} handleMoveObject()} type="submit" > {Liferay.Language.get('move')} ) } />
); }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy