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

META-INF.resources.js.components.ObjectAction.tabs.ActionContainer.ThenContainer.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 {Option, Text} from '@clayui/core';
import {API, Card, SingleSelect} from '@liferay/object-js-components-web';
import React, {useEffect, useState} from 'react';

import {ActionError} from '../../ObjectActionContainer';
import {
	ObjectOptionsListItem,
	ObjectsOptionsList,
	fetchObjectDefinitionFields,
	fetchObjectDefinitions,
} from '../../fetchUtil';
import {CheckboxParameter} from './CheckboxParameter';
import {SingleSelectAddObjectEntry} from './SingleSelectAddObjectEntry';
import {SingleSelectNotification} from './SingleSelectNotification';
import {updateUsePreferredLanguageForGuestsParameter} from './updateUsePreferredLanguageForGuestsParameter';

import './ThenContainer.scss';

interface ThenContainerProps {
	disabled: boolean;
	errors: ActionError;
	isValidField: (
		{businessType, name, objectFieldSettings, system}: ObjectField,
		isObjectActionSystem?: boolean
	) => boolean;
	newObjectActionExecutors: ObjectActionTriggerExecutorItem[];
	objectActionExecutors: ObjectActionTriggerExecutorItem[];
	objectDefinitionExternalReferenceCode: string;
	objectDefinitionId: number;
	objectDefinitionsRelationshipsURL: string;
	setAddObjectEntryDefinitions: (values: AddObjectEntryDefinitions[]) => void;
	setCurrentObjectDefinitionFields: (values: ObjectField[]) => void;
	setValues: (values: Partial) => void;
	systemObject: boolean;
	updateObjectDefinitionParameters: (
		value: ObjectOptionsListItem
	) => Promise;
	values: Partial;
}

export type NotificationTemplateAction = {
	label: string;
	type: string;
	value: string;
};

export function ThenContainer({
	disabled,
	errors,
	isValidField,
	newObjectActionExecutors,
	objectActionExecutors,
	objectDefinitionExternalReferenceCode,
	objectDefinitionId,
	objectDefinitionsRelationshipsURL,
	setAddObjectEntryDefinitions,
	setCurrentObjectDefinitionFields,
	setValues,
	systemObject,
	updateObjectDefinitionParameters,
	values,
}: ThenContainerProps) {
	const [notificationTemplates, setNotificationTemplates] = useState<
		NotificationTemplateAction[]
	>([]);

	const [selectedNotificationTemplate, setSelectedNotificationTemplate] =
		useState>();

	const [objectsOptions, setObjectOptions] = useState([]);

	useEffect(() => {
		if (selectedNotificationTemplate) {
			const parameters = updateUsePreferredLanguageForGuestsParameter(
				values,
				selectedNotificationTemplate.type
			);

			setValues({
				parameters,
			});
		}

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

	useEffect(() => {
		if (values.objectActionExecutorKey === 'notification') {
			const makeFetch = async () => {
				const NotificationTemplatesResponse =
					await API.getNotificationTemplates();

				let notificationArray: NotificationTemplate[] =
					NotificationTemplatesResponse;

				if (systemObject) {
					notificationArray = NotificationTemplatesResponse.filter(
						(notificationTemplate) =>
							notificationTemplate.type !== 'userNotification'
					);
				}

				setNotificationTemplates(
					notificationArray.map(
						({externalReferenceCode, name, type}) => ({
							label: name,
							type,
							value: externalReferenceCode,
						})
					)
				);
			};

			makeFetch();
		}

		if (values.objectActionExecutorKey === 'add-object-entry') {
			fetchObjectDefinitions({
				objectDefinitionsRelationshipsURL,
				setAddObjectEntryDefinitions,
				setObjectOptions,
			});

			fetchObjectDefinitionFields(
				objectDefinitionId,
				objectDefinitionExternalReferenceCode,
				systemObject,
				values,
				isValidField,
				setCurrentObjectDefinitionFields,
				setValues
			);
		}

		// eslint-disable-next-line react-hooks/exhaustive-deps
	}, [
		objectDefinitionId,
		objectDefinitionExternalReferenceCode,
		objectDefinitionsRelationshipsURL,
		systemObject,
		values.objectActionExecutorKey,
	]);

	const parameterDetails =
		values.parameters?.usePreferredLanguageForGuests !== undefined
			? {
					checked: values.parameters?.usePreferredLanguageForGuests,
					disabled: false,
					key: 'usePreferredLanguageForGuests',
					label: Liferay.Language.get(
						'send-email-notifications-in-the-guest-users-preferred-language'
					),
					title: Liferay.Language.get(
						"send-email-notifications-to-guest-users-in-the-form's-language"
					),
				}
			: values.parameters?.relatedObjectEntries !== undefined
				? {
						checked: values.parameters?.relatedObjectEntries,
						disabled: values.system ?? false,
						key: 'relatedObjectEntries',
						label: Liferay.Language.get('also-relate-entries'),
						title: Liferay.Language.get(
							'automatically-relate-object-entries-involved-in-the-action'
						),
					}
				: undefined;

	return (
		
			
{ if (values.objectActionExecutorKey !== value) { return setValues({ objectActionExecutorKey: value as string, parameters: {}, }); } }} placeholder={Liferay.Language.get('choose-an-action')} selectedKey={values.objectActionExecutorKey} > {(item) => ( )} {values.objectActionExecutorKey === 'add-object-entry' && ( )} {values.objectActionExecutorKey === 'notification' && ( )}
{parameterDetails && ( { setValues({ parameters: { ...values.parameters, [parameterDetails.key]: checked, }, }); }} title={parameterDetails.title} /> )}
); }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy