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

META-INF.resources.js.components.EditObjectStateField.tsx 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 {
	API,
	Card,
	SidePanelForm,
	saveAndReload,
} from '@liferay/object-js-components-web';
import {openToast} from 'frontend-js-components-web';
import React, {useEffect, useState} from 'react';

import {defaultLanguageId} from '../utils/constants';
import {useObjectFieldForm} from './ObjectField/useObjectFieldForm';
import StateDefinition from './StateManager/StateDefinition';

export default function EditObjectStateField({objectField, readOnly}: IProps) {
	const [listTypeEntries, setListTypeEntries] = useState([]);

	useEffect(() => {
		if (objectField?.listTypeDefinitionId) {
			API.getListTypeDefinitionListTypeEntries(
				objectField.listTypeDefinitionId
			).then(setListTypeEntries);
		}
	}, [
		objectField.listTypeDefinitionId,
		objectField.listTypeDefinitionExternalReferenceCode,
		setListTypeEntries,
	]);

	const isStateOptionChecked = ({
		currentKey,
		pickListItemKey,
	}: {
		currentKey: string;
		pickListItemKey: string;
	}) => {
		const stateSettings = objectField.objectFieldSettings!.find(
			({name}: ObjectFieldSetting) => name === 'stateFlow'
		);

		const stateSettingsValue = stateSettings!.value as {
			id: number;
			objectStates: ObjectState[];
		};

		const objectStates = stateSettingsValue.objectStates;

		const currentState = objectStates.find(
			(item: ObjectState) => item.key === currentKey
		);

		return (
			currentState!.objectStateTransitions.find(
				({key}: {key: string}) => key === pickListItemKey
			) !== undefined
		);
	};

	const onSubmit = async ({id, ...objectField}: ObjectField) => {
		delete objectField.listTypeDefinitionId;
		delete objectField.system;

		try {
			await API.save({
				item: objectField,
				url: `/o/object-admin/v1.0/object-fields/${id}`,
			});

			saveAndReload();
			openToast({
				message: Liferay.Language.get(
					'the-object-field-was-updated-successfully'
				),
			});
		}
		catch (error) {
			openToast({message: (error as Error).message, type: 'danger'});
		}
	};

	const {handleSubmit, setValues, values} = useObjectFieldForm({
		initialValues: objectField,
		onSubmit,
	});

	const disabled = readOnly || !!objectField?.system;

	return (
		
			
				{listTypeEntries?.map(({key, name}, index) => (
					 item.name !== name)
							.map((item) => {
								return {
									...item,
									checked: isStateOptionChecked({
										currentKey: key,
										pickListItemKey: item.key,
									}),
								};
							})}
						key={index}
						setValues={setValues}
						stateName={name}
						values={values}
					/>
				))}
			
		
	);
}

interface IProps {
	forbiddenChars: string[];
	forbiddenLastChars: string[];
	forbiddenNames: string[];
	isApproved: boolean;
	objectField: ObjectField;
	objectName: string;
	readOnly: boolean;
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy