
META-INF.resources.js.components.ObjectField.Fields.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 {Text} from '@clayui/core';
import {FrontendDataSet} from '@liferay/frontend-data-set-web';
import {stringUtils} from '@liferay/object-js-components-web';
import {sub} from 'frontend-js-web';
import React, {useEffect, useState} from 'react';
import {defaultFDSDataSetProps, formatActionURL} from '../../utils/fds';
import {getObjectFieldBusinessTypeLabel} from '../../utils/getObjectFieldBusinessTypeLabel';
import FDSSourceDataRenderer from '../FDSPropsTransformer/FDSSourceDataRenderer';
import LabelRenderer from '../LabelRenderer';
import ModalDeletionNotAllowed from '../ModalDeletionNotAllowed';
import {ModalAddObjectField} from './ModalAddObjectField';
import {ModalDeleteObjectField} from './ModalDeleteObjectField';
import {handleTriggerDeleteObjectField} from './deleteObjectFieldUtil';
import type {FDSItem, IFDSTableProps} from '../../utils/fds';
interface ObjectFieldItemData {
itemData: ObjectField;
}
interface FieldsProps extends IFDSTableProps {
baseResourceURL: string;
creationLanguageId: Liferay.Language.Locale;
}
export default function Fields({
apiURL,
baseResourceURL,
creationLanguageId,
creationMenu,
formName,
id,
items,
objectDefinitionExternalReferenceCode,
style,
url,
}: FieldsProps) {
const [deletedObjectField, setDeletedObjectField] =
useState(null);
const [objectFieldDeleteInfo, setObjectFieldDeleteInfo] =
useState({
deleteLastPublishedObjectDefinitionObjectField: false,
deleteObjectFieldObjectValidationRuleSetting: false,
showObjectFieldDeletionConfirmationModal: false,
showObjectFieldDeletionNotAllowedModal: false,
});
const [showAddFieldModal, setShowAddFieldModal] = useState(false);
useEffect(() => {
Liferay.on('addObjectField', () => setShowAddFieldModal(true));
return () => Liferay.detach('addObjectField');
}, []);
function objectFieldBusinessTypeDataRenderer({
itemData,
}: ObjectFieldItemData) {
return getObjectFieldBusinessTypeLabel(itemData.businessType);
}
function objectFieldLabelDataRenderer({
itemData,
openSidePanel,
value,
}: FDSItem) {
return (
{
openSidePanel({
url: formatActionURL(url, itemData.id),
});
}}
value={value}
/>
);
}
function objectFieldLocalizedDataRenderer({itemData}: ObjectFieldItemData) {
return itemData.localized
? Liferay.Language.get('yes')
: Liferay.Language.get('no');
}
function objectFieldMandatoryDataRenderer({itemData}: ObjectFieldItemData) {
return itemData.required
? Liferay.Language.get('yes')
: Liferay.Language.get('no');
}
const frontendDataSetProps = {
...defaultFDSDataSetProps,
apiURL,
creationMenu,
customDataRenderers: {
FDSSourceDataRenderer,
objectFieldBusinessTypeDataRenderer,
objectFieldLabelDataRenderer,
objectFieldLocalizedDataRenderer,
objectFieldMandatoryDataRenderer,
},
formName,
id,
itemsActions: items,
namespace:
'_com_liferay_object_web_internal_object_definitions_portlet_ObjectDefinitionsPortlet_',
onActionDropdownItemClick({
action,
itemData,
}: {
action: {data: {id: string}};
itemData: ObjectField;
}) {
if (action.data.id === 'deleteObjectField') {
const makeFetch = async () => {
handleTriggerDeleteObjectField({
baseResourceURL,
objectFieldId: itemData?.id,
objectFieldLabel: stringUtils.getLocalizableLabel({
fallbackLabel: itemData.name,
fallbackLanguageId: creationLanguageId!,
labels: itemData.label,
}),
onAfterDelete: () => {
setTimeout(() => window.location.reload(), 1500);
},
setObjectFieldDeleteInfo,
});
setDeletedObjectField(itemData);
};
makeFetch();
}
},
portletId:
'com_liferay_object_web_internal_object_definitions_portlet_ObjectDefinitionsPortlet',
style,
views: [
{
contentRenderer: 'table',
label: 'Table',
name: 'table',
schema: {
fields: [
{
contentRenderer: 'objectFieldLabelDataRenderer',
expand: false,
fieldName: 'label',
label: Liferay.Language.get('label'),
localizeLabel: true,
sortable: true,
},
{
contentRenderer:
'objectFieldBusinessTypeDataRenderer',
expand: false,
fieldName: 'businessType',
label: Liferay.Language.get('type'),
localizeLabel: true,
sortable: false,
},
{
contentRenderer: 'objectFieldMandatoryDataRenderer',
expand: false,
fieldName: 'mandatory',
label: Liferay.Language.get('mandatory'),
localizeLabel: true,
sortable: false,
},
{
contentRenderer: 'FDSSourceDataRenderer',
expand: false,
fieldName: 'source',
label: Liferay.Language.get('source'),
localizeLabel: true,
sortable: false,
},
{
contentRenderer: 'objectFieldLocalizedDataRenderer',
expand: false,
fieldName: 'localized',
label: Liferay.Language.get('translatable'),
localizeLabel: true,
sortable: false,
},
],
},
thumbnail: 'table',
},
],
};
return (
<>
{showAddFieldModal && (
{
setShowAddFieldModal(false);
window.location.reload();
}}
setVisible={setShowAddFieldModal}
/>
)}
{objectFieldDeleteInfo.showObjectFieldDeletionConfirmationModal && (
setObjectFieldDeleteInfo(
(prevState: ObjectFieldDeleteInfoProps) => ({
...prevState,
showObjectFieldDeletionConfirmationModal: false,
})
)
}
objectField={deletedObjectField as ObjectField}
onAfterSubmit={() => {
setTimeout(() => window.location.reload(), 1500);
}}
setObjectField={setDeletedObjectField}
/>
)}
{!!deletedObjectField &&
objectFieldDeleteInfo.showObjectFieldDeletionNotAllowedModal && (
{sub(
Liferay.Language.get(
'the-object-field-x-cannot-be-deleted-because-it-is-the-only-custom-object-field-of-the-published-object-definition'
),
`${stringUtils.getLocalizableLabel({
fallbackLabel:
deletedObjectField.name,
fallbackLanguageId:
creationLanguageId as Liferay.Language.Locale,
labels: deletedObjectField.label,
})}`
)}
) : (
{sub(
Liferay.Language.get(
'the-object-field-x-cannot-be-deleted-because-it-is-used-in-a-unique-composite-key-validation'
),
`${stringUtils.getLocalizableLabel({
fallbackLabel:
deletedObjectField.name,
fallbackLanguageId:
creationLanguageId as Liferay.Language.Locale,
labels: deletedObjectField.label,
})}`
)}
)
}
onModalClose={() =>
setObjectFieldDeleteInfo({
...objectFieldDeleteInfo,
showObjectFieldDeletionNotAllowedModal: false,
})
}
/>
)}
>
);
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy