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

META-INF.resources.js.components.ModelBuilder.RightSidebar.RightSidebarObjectFieldDetails.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 {ClayButtonWithIcon} from '@clayui/button';
import {Text} from '@clayui/core';
import ClayPanel from '@clayui/panel';
import {API, stringUtils} from '@liferay/object-js-components-web';
import {openToast} from 'frontend-js-components-web';
import {sub} from 'frontend-js-web';
import React, {useEffect, useState} from 'react';
import {useStore} from 'react-flow-renderer';

import ModalDeletionNotAllowed from '../../ModalDeletionNotAllowed';
import {objectFieldInitialValues} from '../../ObjectField/EditObjectField';
import {EditObjectFieldContent} from '../../ObjectField/EditObjectFieldContent';
import {ModalDeleteObjectField} from '../../ObjectField/ModalDeleteObjectField';
import {useObjectFieldForm} from '../../ObjectField/useObjectFieldForm';
import {useObjectFolderContext} from '../ModelBuilderContext/objectFolderContext';
import {TYPES} from '../ModelBuilderContext/typesEnum';

import './RightSidebarObjectFieldDetails.scss';
import {handleTriggerDeleteObjectField} from '../../ObjectField/deleteObjectFieldUtil';

export function RightSidebarObjectFieldDetails() {
	const [objectFieldDeleteInfo, setObjectFieldDeleteInfo] =
		useState({
			deleteLastPublishedObjectDefinitionObjectField: false,
			deleteObjectFieldObjectValidationRuleSetting: false,
			showObjectFieldDeletionConfirmationModal: false,
			showObjectFieldDeletionNotAllowedModal: false,
		});

	const [
		{
			baseResourceURL,
			filterOperators,
			forbiddenChars,
			forbiddenLastChars,
			forbiddenNames,
			isRootDescendantNode,
			learnResourceContext,
			selectedObjectDefinitionNode,
			selectedObjectField,
			workflowStatuses,
		},
		dispatch,
	] = useObjectFolderContext();
	const store = useStore();

	const {edges, nodes} = store.getState();

	const objectDefinitionNodeData =
		selectedObjectDefinitionNode?.data as ObjectDefinitionNodeData;

	const {errors, handleChange, handleValidate, setValues, values} =
		useObjectFieldForm({
			forbiddenChars,
			forbiddenLastChars,
			forbiddenNames,
			initialValues: objectFieldInitialValues,
			onSubmit: () => {},
		});

	const onSubmit = async (editedObjectField?: Partial) => {
		const validationErrors = handleValidate(editedObjectField ?? values);

		if (validationErrors.defaultValue) {
			if (errors.defaultValue) {
				openToast({
					message: Liferay.Language.get(
						'please-fill-out-all-required-fields'
					),
					type: 'danger',
				});
			}
		}

		if (!Object.keys(validationErrors).length) {
			let objectField: Partial;

			if (!editedObjectField) {
				objectField = {...values};
			}
			else {
				objectField = {...editedObjectField};
			}

			delete objectField.defaultValue;
			delete objectField.listTypeDefinitionId;

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

				if (
					selectedObjectDefinitionNode &&
					updatedObjectFieldResponse
				) {
					dispatch({
						payload: {
							objectDefinitionNodes: nodes,
							objectRelationshipEdges: edges,
							selectedObjectDefinitionNode,
							updatedObjectField:
								updatedObjectFieldResponse as ObjectField,
						},
						type: TYPES.UPDATE_OBJECT_FIELD_NODE_ROW,
					});

					dispatch({
						payload: {
							updatedShowChangesSaved: true,
						},
						type: TYPES.SET_SHOW_CHANGES_SAVED,
					});
				}
			}
			catch (error) {
				openToast({
					autoClose: 15000,
					message: (error as Error).message,
					type: 'danger',
				});
			}
		}
	};

	useEffect(() => {
		if (errors.defaultValue) {
			openToast({
				message: Liferay.Language.get(
					'please-fill-out-all-required-fields'
				),
				type: 'danger',
			});
		}
	}, [errors]);

	return (
		<>
			
{Liferay.Language.get('field-details')}
{!values.system && values.businessType !== 'Relationship' && ( handleTriggerDeleteObjectField({ baseResourceURL, objectFieldId: selectedObjectField?.id!, objectFieldLabel: stringUtils.getLocalizableLabel({ fallbackLabel: objectDefinitionNodeData.name, fallbackLanguageId: objectDefinitionNodeData.defaultLanguageId, labels: objectDefinitionNodeData.label, }), onAfterDelete: () => { if ( selectedObjectField && selectedObjectDefinitionNode ) { dispatch({ payload: { objectDefinitionNodes: nodes, objectRelationshipEdges: edges, selectedObjectDefinitionNode, selectedObjectField, }, type: TYPES.DELETE_OBJECT_FIELD, }); } }, setObjectFieldDeleteInfo, }) } symbol="trash" title={Liferay.Language.get('delete')} /> )}
{selectedObjectField?.id && ( )}
{objectFieldDeleteInfo.showObjectFieldDeletionConfirmationModal && ( setObjectFieldDeleteInfo( (prevState: ObjectFieldDeleteInfoProps) => ({ ...prevState, showObjectFieldDeletionConfirmationModal: false, }) ) } objectField={values as ObjectField} onAfterSubmit={() => { if ( selectedObjectField && selectedObjectDefinitionNode ) { dispatch({ payload: { objectDefinitionNodes: nodes, objectRelationshipEdges: edges, selectedObjectDefinitionNode, selectedObjectField, }, type: TYPES.DELETE_OBJECT_FIELD, }); } }} /> )} {objectFieldDeleteInfo?.showObjectFieldDeletionNotAllowedModal && ( {sub( Liferay.Language.get( 'the-object-field-x-cannot-be-deleted-because-it-is-the-only-custom-object-field-of-the-published-object-definition' ), `${stringUtils.getLocalizableLabel({ fallbackLabel: values.name, fallbackLanguageId: objectDefinitionNodeData.defaultLanguageId as Liferay.Language.Locale, labels: values.label, })}` )} ) : ( {sub( Liferay.Language.get( 'the-object-field-x-cannot-be-deleted-because-it-is-used-in-a-unique-composite-key-validation' ), `${stringUtils.getLocalizableLabel({ fallbackLabel: values.name, fallbackLanguageId: objectDefinitionNodeData.defaultLanguageId as Liferay.Language.Locale, labels: values.label, })}` )} ) } onModalClose={() => setObjectFieldDeleteInfo({ ...objectFieldDeleteInfo, showObjectFieldDeletionNotAllowedModal: false, }) } /> )} ); }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy