
META-INF.resources.js.components.ObjectAction.useObjectActionForm.ts 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,
constantsUtils,
invalidateRequired,
openToast,
useForm,
} from '@liferay/object-js-components-web';
import {useEffect, useMemo, useState} from 'react';
import {defaultLanguageId} from '../../utils/constants';
import {ActionError} from './ObjectActionContainer';
interface UseObjectActionFormProps {
initialValues: Partial;
onSubmit: (field: ObjectAction) => void;
}
export function useObjectActionForm({
initialValues,
onSubmit,
}: UseObjectActionFormProps) {
const [fields, setFields] = useState([]);
const objectFieldsMap = useMemo(() => {
const fieldMap = new Map();
fields.forEach((field) => {
fieldMap.set(field.name, field);
});
return fieldMap;
}, [fields]);
const validate = (values: Partial) => {
const errors: ActionError = {};
if (invalidateRequired(values.label?.[defaultLanguageId])) {
errors.label = constantsUtils.REQUIRED_MSG;
}
if (invalidateRequired(values.name)) {
errors.name = constantsUtils.REQUIRED_MSG;
}
if (invalidateRequired(values.objectActionTriggerKey)) {
errors.objectActionTriggerKey = constantsUtils.REQUIRED_MSG;
}
if (invalidateRequired(values.objectActionExecutorKey)) {
errors.objectActionExecutorKey = constantsUtils.REQUIRED_MSG;
}
else if (
values.objectActionExecutorKey === 'webhook' &&
invalidateRequired(values.parameters?.url)
) {
errors.url = constantsUtils.REQUIRED_MSG;
}
else if (
values.objectActionExecutorKey === 'groovy' &&
!!values.parameters?.lineCount &&
values.parameters.lineCount > 2987
) {
errors.script = Liferay.Language.get(
'the-maximum-number-of-lines-available-is-2987'
);
}
else if (values.objectActionExecutorKey === 'add-object-entry') {
if (!values.parameters?.objectDefinitionExternalReferenceCode) {
errors.objectDefinitionExternalReferenceCode =
constantsUtils.REQUIRED_MSG;
}
}
if (
values.objectActionExecutorKey === 'add-object-entry' ||
values.objectActionExecutorKey === 'update-object-entry'
) {
if (values.parameters?.predefinedValues) {
const predefinedValues = values.parameters?.predefinedValues;
predefinedValues.forEach(({name, value}) => {
if (
objectFieldsMap.get(name)?.required &&
invalidateRequired(value)
) {
if (!errors.predefinedValues) {
errors.predefinedValues = {} as any;
}
errors.predefinedValues![name] =
constantsUtils.REQUIRED_MSG;
}
});
}
}
if (
values.objectActionTriggerKey === 'standalone' &&
invalidateRequired(values.errorMessage?.[defaultLanguageId])
) {
errors.errorMessage = constantsUtils.REQUIRED_MSG;
}
if (
typeof values.conditionExpression === 'string' &&
invalidateRequired(values.conditionExpression)
) {
errors.conditionExpression = constantsUtils.REQUIRED_MSG;
}
if (Object.keys(errors).length) {
openToast({
message: constantsUtils.REQUIRED_MSG,
type: 'danger',
});
}
return errors;
};
const {errors, values, ...otherProps} = useForm<
ObjectAction,
ObjectActionParameters
>({
initialValues,
onSubmit,
validate,
});
useEffect(() => {
if (values.parameters?.objectDefinitionExternalReferenceCode) {
const makeFetch = async () => {
const response =
await API.getObjectDefinitionByExternalReferenceCodeObjectFields(
values.parameters
?.objectDefinitionExternalReferenceCode as string
);
const filteredFields = response.filter(
({businessType, system}) =>
businessType !== 'Aggregation' &&
businessType !== 'Relationship' &&
!system
);
setFields(filteredFields);
};
makeFetch();
}
else {
setFields([]);
}
}, [values.parameters?.objectDefinitionExternalReferenceCode]);
return {errors: errors as ActionError, values, ...otherProps};
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy