
META-INF.resources.js.components.ObjectAction.ObjectActionContainer.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 ClayTabs from '@clayui/tabs';
import {
API,
FormError,
SidePanelForm,
SidebarCategory,
openToast,
saveAndReload,
} from '@liferay/object-js-components-web';
import React, {useState} from 'react';
import {Error, getErrorMessage, parseError} from '../../utils/errors';
import ActionBuilder from './tabs/ActionBuilder';
import BasicInfo from './tabs/BasicInfo';
import {useObjectActionForm} from './useObjectActionForm';
const TABS = [
{
key: 'basic-info',
label: Liferay.Language.get('basic-info'),
},
{
key: 'action-builder',
label: Liferay.Language.get('action-builder'),
},
];
interface ObjectActionContainerProps {
allowScriptContentToBeExecutedOrIncluded: boolean;
editingObjectAction?: boolean;
isApproved?: boolean;
objectAction: Partial;
objectActionCodeEditorElements: SidebarCategory[];
objectActionExecutors: ObjectActionTriggerExecutorItem[];
objectActionTriggers: ObjectActionTriggerExecutorItem[];
objectDefinitionExternalReferenceCode: string;
objectDefinitionId: number;
objectDefinitionsRelationshipsURL: string;
objectFields: ObjectField[];
readOnly?: boolean;
requestParams: {
method: 'POST' | 'PUT';
url: string;
};
scriptManagementConfigurationPortletURL: string;
successMessage: string;
systemObject: boolean;
title: string;
validateExpressionURL: string;
}
export type ActionError = FormError & {
predefinedValues?: {[key: string]: string};
};
export function ObjectActionContainer({
allowScriptContentToBeExecutedOrIncluded,
editingObjectAction = false,
isApproved,
objectAction: initialValues,
objectActionCodeEditorElements,
objectActionExecutors,
objectActionTriggers,
objectDefinitionExternalReferenceCode,
objectDefinitionId,
objectDefinitionsRelationshipsURL,
objectFields,
readOnly,
requestParams: {method, url},
scriptManagementConfigurationPortletURL,
successMessage,
systemObject,
validateExpressionURL,
}: ObjectActionContainerProps) {
const [activeIndex, setActiveIndex] = useState(0);
const [backEndErrors, setBackEndErrors] = useState({});
const onSubmit = async (objectAction: ObjectAction) => {
if (objectAction.parameters) {
delete objectAction?.parameters['lineCount'];
}
delete objectAction.objectDefinitionId;
try {
await API.save({item: objectAction, method, url});
saveAndReload();
openToast({message: successMessage});
}
catch (error) {
const {detail} = error as {detail?: string};
const details = JSON.parse(detail as string);
const newErrors: Error = {};
parseError(details, newErrors);
setBackEndErrors(newErrors);
const errorMessages = new Set();
if (newErrors) {
getErrorMessage(newErrors, errorMessages);
errorMessages.forEach((message) => {
openToast({
message,
type: 'danger',
});
});
}
}
};
const {errors, handleChange, handleSubmit, setValues, values} =
useObjectActionForm({initialValues, onSubmit});
const disableGroovyAction =
!allowScriptContentToBeExecutedOrIncluded &&
values.objectActionExecutorKey === 'groovy';
let newObjectActionExecutors = [...objectActionExecutors];
if (!allowScriptContentToBeExecutedOrIncluded) {
const shouldFilterGroovyExecutor =
!editingObjectAction ||
(editingObjectAction &&
values.objectActionExecutorKey !== 'groovy');
if (shouldFilterGroovyExecutor) {
newObjectActionExecutors = objectActionExecutors.filter(
(objectActionExecutor) =>
objectActionExecutor.value !== 'groovy'
);
}
}
return (
{TABS.map(({key, label}, index) => (
{
setActiveIndex(index);
if (key === 'action-builder') {
Liferay.fire('reloadFDS');
}
}}
>
{label}
))}
);
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy