
META-INF.resources.js.components.EditObjectStateField.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,
SidePanelForm,
saveAndReload,
} from '@liferay/object-js-components-web';
import {openToast} from 'frontend-js-components-web';
import React, {useEffect, useState} from 'react';
import {defaultLanguageId} from '../utils/constants';
import {useObjectFieldForm} from './ObjectField/useObjectFieldForm';
import StateDefinition from './StateManager/StateDefinition';
export default function EditObjectStateField({objectField, readOnly}: IProps) {
const [listTypeEntries, setListTypeEntries] = useState([]);
useEffect(() => {
if (objectField?.listTypeDefinitionId) {
API.getListTypeDefinitionListTypeEntries(
objectField.listTypeDefinitionId
).then(setListTypeEntries);
}
}, [
objectField.listTypeDefinitionId,
objectField.listTypeDefinitionExternalReferenceCode,
setListTypeEntries,
]);
const isStateOptionChecked = ({
currentKey,
pickListItemKey,
}: {
currentKey: string;
pickListItemKey: string;
}) => {
const stateSettings = objectField.objectFieldSettings!.find(
({name}: ObjectFieldSetting) => name === 'stateFlow'
);
const stateSettingsValue = stateSettings!.value as {
id: number;
objectStates: ObjectState[];
};
const objectStates = stateSettingsValue.objectStates;
const currentState = objectStates.find(
(item: ObjectState) => item.key === currentKey
);
return (
currentState!.objectStateTransitions.find(
({key}: {key: string}) => key === pickListItemKey
) !== undefined
);
};
const onSubmit = async ({id, ...objectField}: ObjectField) => {
delete objectField.listTypeDefinitionId;
delete objectField.system;
try {
await API.save({
item: objectField,
url: `/o/object-admin/v1.0/object-fields/${id}`,
});
saveAndReload();
openToast({
message: Liferay.Language.get(
'the-object-field-was-updated-successfully'
),
});
}
catch (error) {
openToast({message: (error as Error).message, type: 'danger'});
}
};
const {handleSubmit, setValues, values} = useObjectFieldForm({
initialValues: objectField,
onSubmit,
});
const disabled = readOnly || !!objectField?.system;
return (
{listTypeEntries?.map(({key, name}, index) => (
item.name !== name)
.map((item) => {
return {
...item,
checked: isStateOptionChecked({
currentKey: key,
pickListItemKey: item.key,
}),
};
})}
key={index}
setValues={setValues}
stateName={name}
values={values}
/>
))}
);
}
interface IProps {
forbiddenChars: string[];
forbiddenLastChars: string[];
forbiddenNames: string[];
isApproved: boolean;
objectField: ObjectField;
objectName: string;
readOnly: boolean;
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy