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

META-INF.resources.js.components.ObjectDetails.EntryDisplayContainer.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 {
	FormError,
	SingleSelect,
	stringUtils,
} from '@liferay/object-js-components-web';
import React, {useEffect, useMemo} from 'react';

interface EntryDisplayContainerProps {
	className?: string;
	errors: FormError;
	isLinkedObjectDefinition?: boolean;
	nonRelationshipObjectFieldsInfo: {
		label: LocalizedValue;
		name: string;
	}[];
	objectFields: ObjectField[];
	onSubmit?: (editedObjectDefinition?: Partial) => void;
	setValues: (values: Partial) => void;
	values: Partial;
}

export function EntryDisplayContainer({
	className,
	errors,
	isLinkedObjectDefinition,
	nonRelationshipObjectFieldsInfo,
	objectFields,
	onSubmit,
	setValues,
	values,
}: EntryDisplayContainerProps) {
	const titleFieldOptions = useMemo(() => {
		return nonRelationshipObjectFieldsInfo?.map(({label, name}) => {
			return {
				label: stringUtils.getLocalizableLabel({
					fallbackLabel: name,
					fallbackLanguageId:
						values.defaultLanguageId as Liferay.Language.Locale,
					labels: label,
				}),
				value: name,
			};
		});
	}, [nonRelationshipObjectFieldsInfo, values.defaultLanguageId]);

	useEffect(() => {
		const titleObjectField = objectFields.find(
			(objectField) => objectField.name === values.titleObjectFieldName
		);

		if (!titleObjectField) {
			const idField = objectFields.find((field) => field.name === 'id');

			setValues({titleObjectFieldName: idField?.name});
		}

		// eslint-disable-next-line react-hooks/exhaustive-deps
	}, []);

	return (
		
			className={className}
			disabled={isLinkedObjectDefinition}
			error={errors.titleObjectFieldId}
			id="lfr-objects__object-display-container-entry-title-field"
			items={titleFieldOptions}
			label={Liferay.Language.get('entry-title-field')}
			onSelectionChange={(itemKey) => {
				const field = objectFields.find(({name}) => name === itemKey);

				setValues({
					titleObjectFieldName: field?.name,
				});

				if (onSubmit) {
					onSubmit({
						...values,
						titleObjectFieldName: field?.name,
					});
				}
			}}
			selectedKey={values.titleObjectFieldName}
		/>
	);
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy