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

META-INF.resources.js.components.ObjectAction.PredefinedValuesTable.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 {ClayCheckbox} from '@clayui/form';
import ClayIcon from '@clayui/icon';
import ClayLoadingIndicator from '@clayui/loading-indicator';
import {ClayTooltipProvider} from '@clayui/tooltip';
import {FrontendDataSet} from '@liferay/frontend-data-set-web';
import {
	Card,
	DatePicker,
	ExpressionBuilder,
	onActionDropdownItemClick,
	openToast,
	stringUtils,
} from '@liferay/object-js-components-web';
import React, {useEffect, useMemo, useState} from 'react';

import './PredefinedValuesTable.scss';

interface PredefinedValueTableProps {
	creationLanguageId: Liferay.Language.Locale;
	currentObjectDefinitionFields: ObjectField[];
	disableRequiredChecked?: boolean;
	errors: {[key: string]: string};
	objectFieldsMap: Map;
	predefinedValues?: PredefinedValue[];
	setValues: (params: Partial) => void;
	title?: string;
	validateExpressionURL: string;
	values: Partial;
}

interface PredefinedValueTableItem {
	inputAsValue: JSX.Element;
	label: JSX.Element;
	name: string;
	newValue: JSX.Element;
}

export default function PredefinedValuesTable({
	creationLanguageId,
	currentObjectDefinitionFields,
	disableRequiredChecked,
	errors,
	objectFieldsMap,
	setValues,
	title,
	validateExpressionURL,
	values,
}: PredefinedValueTableProps) {
	const [reloadFDS, setReloadFDS] = useState(false);
	const {predefinedValues = []} = values.parameters as ObjectActionParameters;

	const items = useMemo(() => {
		const updatePredefinedValues = (name: string, value: string) => {
			const updatedPredefinedValues = predefinedValues.map(
				(objectField) => {
					return objectField.name === name
						? {...objectField, value}
						: objectField;
				}
			);

			return updatedPredefinedValues;
		};

		const predefinedErrors = new Map();

		if (errors) {
			Object.entries(errors).forEach(([key, value]) => {
				predefinedErrors.set(key, value);
			});
		}

		return predefinedValues.map(
			({businessType, inputAsValue, label, name, value}) => {
				const isDateTime = businessType === 'DateTime';
				const renderDatePicker =
					(businessType === 'Date' && inputAsValue) || isDateTime;

				return {
					inputAsValue: (
						
{ const newPredefinedValues = predefinedValues.map((objectField) => { return objectField.name === name ? { ...objectField, inputAsValue: checked, } : objectField; }); setValues({ parameters: { ...values.parameters, predefinedValues: newPredefinedValues, }, }); }} />
), label: (
{stringUtils.getLocalizableLabel({ fallbackLabel: name, fallbackLanguageId: creationLanguageId, labels: label, })} {objectFieldsMap.get(name)?.required === true && ( )}
), name, newValue: (
{renderDatePicker ? ( { setValues({ parameters: { ...values.parameters, predefinedValues: updatePredefinedValues( name, value ), }, }); }} type={businessType} value={value} /> ) : ( { setValues({ parameters: { ...values.parameters, predefinedValues: updatePredefinedValues( name, value ), }, }); }} onOpenModal={() => { const parentWindow = Liferay.Util.getOpener(); parentWindow.Liferay.fire( 'openExpressionBuilderModal', { onSave: (value: string) => { setValues({ parameters: { ...values.parameters, predefinedValues: updatePredefinedValues( name, value ), }, }); }, required: objectFieldsMap.get(name) ?.required, source: value, validateExpressionURL, } ); }} placeholder={ inputAsValue ? Liferay.Language.get( 'input-a-value' ) : Liferay.Language.get( 'input-a-value-or-create-an-expression' ) } value={value} /> )}
), }; } ); }, [ creationLanguageId, errors, objectFieldsMap, predefinedValues, setValues, validateExpressionURL, values.parameters, values.system, ]); const handleReloadFDS = () => { setReloadFDS(true); setTimeout(() => setReloadFDS(false), 200); }; useEffect(() => { const getSelectedObjectFields = () => { const objectFields: ObjectField[] = []; predefinedValues?.forEach(({name}) => { if ( objectFieldsMap.has(name) || objectFieldsMap.get(name)?.required ) { const objectField = objectFieldsMap.get(name); objectFields.push(objectField as ObjectField); } }); return objectFields; }; const deletePredefinedValueObjectField = ({ itemData, }: { itemData: PredefinedValueTableItem; }) => { const {name} = itemData; if (objectFieldsMap.get(name)?.required) { openToast({ message: Liferay.Language.get( 'required-fields-cannot-be-deleted' ), type: 'danger', }); return; } const newPredefinedValues = predefinedValues?.filter( (objectField) => objectField.name !== name ); setValues({ parameters: { ...values.parameters, predefinedValues: newPredefinedValues, }, }); }; const handleAddObjectFields = () => { const parentWindow = Liferay.Util.getOpener(); parentWindow.Liferay.fire('openModalSelectObjectFields', { getLabel: ({label, name}: ObjectField) => stringUtils.getLocalizableLabel({ fallbackLabel: name, fallbackLanguageId: creationLanguageId, labels: label, }), getName: ({name}: ObjectField) => name, header: Liferay.Language.get('add-fields'), items: currentObjectDefinitionFields .filter( (currentObjectDefinitionField) => !currentObjectDefinitionField.localized ) .map((currentObjectDefinitionField) => ({ ...currentObjectDefinitionField, disableCheckbox: currentObjectDefinitionField.required && !disableRequiredChecked, })), onSave: (items: ObjectField[]) => { const predefinedValuesMap = new Map< string, PredefinedValue >(); predefinedValues.forEach((objectField) => { predefinedValuesMap.set(objectField.name, objectField); }); const newPredefinedValues = items.map( ({businessType, label, name}) => { const value = predefinedValuesMap.get(name); const inputAsValue = businessType === 'DateTime' ? true : false; return value ? value : { businessType, inputAsValue, label, name, value: '', }; } ); setValues({ parameters: { ...values.parameters, predefinedValues: newPredefinedValues, }, }); }, selected: getSelectedObjectFields(), showModal: true, title: Liferay.Language.get('select-the-fields'), }); }; Liferay.on( 'deletePredefinedValueObjectField', deletePredefinedValueObjectField ); Liferay.on('handleAddObjectFields', handleAddObjectFields); return () => { Liferay.detach('deletePredefinedValueObjectField'); Liferay.detach('handleAddObjectFields'); }; }, [ creationLanguageId, currentObjectDefinitionFields, disableRequiredChecked, objectFieldsMap, predefinedValues, setValues, values.parameters, ]); useEffect(() => { Liferay.on('reloadFDS', handleReloadFDS); return () => { Liferay.detach('reloadFDS', handleReloadFDS); }; }, []); return ( <>
{reloadFDS ? ( ) : ( )}
); }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy