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

META-INF.resources.js.components.ViewObjectDefinitions.ModalEditObjectFolder.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 ClayForm from '@clayui/form';
import ClayModal, {ClayModalProvider, useModal} from '@clayui/modal';
import {
	API,
	FormError,
	Input,
	constantsUtils,
	invalidateLocalizableLabelRequired,
	openToast,
	stringUtils,
	useForm,
} from '@liferay/object-js-components-web';
import {InputLocalized} from 'frontend-js-components-web';
import {sub} from 'frontend-js-web';
import React, {useState} from 'react';

import {defaultLanguageId} from '../../utils/constants';

interface ModalEditObjectFolderProps {
	externalReferenceCode: string;
	handleOnClose: () => void;
	id: number;
	initialLabel?: LocalizedValue;
	name?: string;
	onAfterSubmit: (value: ObjectFolder) => void;
}

type TInitialValues = {
	externalReferenceCode: string;
	label?: LocalizedValue;
	name?: string;
};

export function ModalEditObjectFolder({
	externalReferenceCode,
	handleOnClose,
	id,
	initialLabel,
	name,
	onAfterSubmit,
}: ModalEditObjectFolderProps) {
	const [error, setError] = useState('');

	const [selectedLocale, setSelectedLocale] =
		useState(defaultLanguageId);

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

	const initialValues: TInitialValues = {
		externalReferenceCode,
		label: initialLabel,
		name,
	};

	const onSubmit = async (values: TInitialValues) => {
		const objectFolder: Partial = values;

		try {
			const editedObjectFolder = await API.save({
				item: objectFolder,
				method: 'PATCH',
				returnValue: true,
				url: `/o/object-admin/v1.0/object-folders/${id}`,
			});

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

			onClose();

			onAfterSubmit(editedObjectFolder as ObjectFolder);
		}
		catch (error) {
			setError((error as Error).message);
		}
	};

	const validate = (values: TInitialValues) => {
		const errors: FormError = {};

		if (invalidateLocalizableLabelRequired(values.label)) {
			errors.label = constantsUtils.REQUIRED_MSG;
		}

		if (!values.externalReferenceCode) {
			errors.externalReferenceCode = constantsUtils.REQUIRED_MSG;
		}

		return errors;
	};

	const {errors, handleChange, handleSubmit, setValues, values} = useForm({
		initialValues,
		onSubmit,
		validate,
	});

	return (
		
			
				
					
						{Liferay.Language.get('edit-label-and-erc')}
					

					
						{error && (
							{error}
						)}

						 setValues({label})}
							onSelectedLocaleChange={setSelectedLocale}
							required
							selectedLocale={selectedLocale}
							translations={
								values.label as LocalizedValue
							}
						/>

						

						
					

					
								 onClose()}
								>
									{Liferay.Language.get('cancel')}
								

								
									{Liferay.Language.get('save')}
								
							
						}
					/>
				
			
		
	);
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy