
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