
META-INF.resources.js.components.ObjectAction.tabs.ActionContainer.ActionContainer.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 {
API,
Card,
CodeEditor,
Input,
SidebarCategory,
} from '@liferay/object-js-components-web';
import React, {useCallback, useEffect, useState} from 'react';
import {ActionError} from '../../ObjectActionContainer';
import PredefinedValuesTable from '../../PredefinedValuesTable';
import {
ObjectOptionsListItem,
fetchObjectDefinitionFields,
} from '../../fetchUtil';
import {WarningStates} from '../ActionBuilder';
import {ThenContainer} from './ThenContainer';
interface ActionContainerProps {
currentObjectDefinitionFields: ObjectField[];
disableGroovyAction: boolean;
errors: ActionError;
newObjectActionExecutors: ObjectActionTriggerExecutorItem[];
objectActionCodeEditorElements: SidebarCategory[];
objectActionExecutors: ObjectActionTriggerExecutorItem[];
objectDefinitionExternalReferenceCode: string;
objectDefinitionId: number;
objectDefinitionsRelationshipsURL: string;
objectFieldsMap: Map;
setCurrentObjectDefinitionFields: (values: ObjectField[]) => void;
setValues: (values: Partial) => void;
setWarningAlerts: (value: React.SetStateAction) => void;
systemObject: boolean;
validateExpressionURL: string;
values: Partial;
}
export function ActionContainer({
currentObjectDefinitionFields,
disableGroovyAction,
errors,
newObjectActionExecutors,
objectActionCodeEditorElements,
objectActionExecutors,
objectDefinitionExternalReferenceCode,
objectDefinitionId,
objectDefinitionsRelationshipsURL,
objectFieldsMap,
setCurrentObjectDefinitionFields,
setValues,
setWarningAlerts,
systemObject,
validateExpressionURL,
values,
}: ActionContainerProps) {
const [addObjectEntryDefinitions, setAddObjectEntryDefinitions] = useState<
AddObjectEntryDefinitions[]
>([]);
const [creationLanguageId, setCreationLanguageId] =
useState();
const isValidField = (
{businessType, name, objectFieldSettings, system}: ObjectField,
isObjectActionSystem?: boolean
) => {
const userRelationship = !!objectFieldSettings?.find(
({name, value}) =>
name === 'objectDefinition1ShortName' && value === 'User'
);
if (businessType === 'Relationship' && userRelationship) {
return true;
}
return isObjectActionSystem
? businessType !== 'Aggregation' &&
businessType !== 'AutoIncrement' &&
businessType !== 'Formula' &&
businessType !== 'Relationship' &&
name !== 'creator' &&
name !== 'createDate' &&
name !== 'id' &&
name !== 'modifiedDate' &&
name !== 'status'
: businessType !== 'Aggregation' &&
businessType !== 'AutoIncrement' &&
businessType !== 'Formula' &&
businessType !== 'Relationship' &&
!system;
};
const updateObjectDefinitionParameters = useCallback(
async (value: ObjectOptionsListItem) => {
const {
isSystemObjectDefinition,
objectDefinitionExternalReferenceCode,
objectDefinitionId,
} = value;
const definitionId = Number(objectDefinitionId);
const isSystem = isSystemObjectDefinition === true;
const object = addObjectEntryDefinitions.find(
(definition) =>
definition.externalReferenceCode ===
objectDefinitionExternalReferenceCode
);
const parameters: ObjectActionParameters = {
objectDefinitionExternalReferenceCode,
objectDefinitionId: definitionId,
predefinedValues: [],
system: isSystem,
};
if (object?.related) {
parameters.relatedObjectEntries = false;
}
const items =
await API.getObjectDefinitionByExternalReferenceCodeObjectFields(
objectDefinitionExternalReferenceCode
);
const validFields: ObjectField[] = [];
items.forEach((field) => {
if (isValidField(field, isSystem)) {
validFields.push(field);
if (
field.required &&
values.objectActionExecutorKey === 'add-object-entry'
) {
const inputAsValue =
field.businessType === 'DateTime' ? true : false;
(parameters.predefinedValues as PredefinedValue[]).push(
{
businessType: field.businessType,
inputAsValue,
label: field.label,
name: field.name,
value: '',
}
);
}
}
});
setCurrentObjectDefinitionFields(validFields);
const normalizedParameters = {...values.parameters};
delete normalizedParameters.relatedObjectEntries;
setValues({
parameters: {
...normalizedParameters,
...(values.objectActionExecutorKey ===
'add-object-entry' && {
...parameters,
}),
},
});
setWarningAlerts((previousWarnings) => ({
...previousWarnings,
mandatoryRelationships: items.some(
(field) =>
field.businessType === 'Relationship' &&
field.required === true
),
}));
},
// eslint-disable-next-line react-hooks/exhaustive-deps
[
addObjectEntryDefinitions,
values.objectActionExecutorKey,
values.parameters,
]
);
useEffect(() => {
if (values.objectActionExecutorKey === 'update-object-entry') {
updateObjectDefinitionParameters({
isSystemObjectDefinition: systemObject,
objectDefinitionExternalReferenceCode,
objectDefinitionId,
});
fetchObjectDefinitionFields(
objectDefinitionId,
objectDefinitionExternalReferenceCode,
systemObject,
values,
isValidField,
setCurrentObjectDefinitionFields,
setValues
);
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [
objectDefinitionId,
objectDefinitionExternalReferenceCode,
objectDefinitionsRelationshipsURL,
systemObject,
values.objectActionExecutorKey,
]);
useEffect(() => {
const makeFetch = async () => {
const objectDefinition =
await API.getObjectDefinitionByExternalReferenceCode(
objectDefinitionExternalReferenceCode
);
setCreationLanguageId(objectDefinition.defaultLanguageId);
};
makeFetch();
}, [objectDefinitionExternalReferenceCode]);
return (
{(values.objectActionExecutorKey === 'add-object-entry' ||
values.objectActionExecutorKey === 'update-object-entry') &&
values.parameters?.objectDefinitionExternalReferenceCode && (
)}
{values.objectActionExecutorKey === 'webhook' && (
<>
{
setValues({
parameters: {
...values.parameters,
url: value,
},
});
}}
required
value={values.parameters?.url}
/>
{
setValues({
parameters: {
...values.parameters,
secret: value,
},
});
}}
value={values.parameters?.secret}
/>
>
)}
{values.objectActionExecutorKey === 'groovy' && (
setValues({
parameters: {
...values.parameters,
lineCount,
script,
},
})
}
readOnly={values.system || disableGroovyAction}
sidebarElements={objectActionCodeEditorElements.filter(
(element) => element.label === 'Fields'
)}
sidebarElementsDisabled={values.system}
value={values.parameters?.script ?? ''}
/>
)}
);
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy