import { useEffect } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; import styled from '@emotion/styled'; import { IconPlus, IconSettings } from 'twenty-ui'; import { LABEL_IDENTIFIER_FIELD_METADATA_TYPES } from '@/object-metadata/constants/LabelIdentifierFieldMetadataTypes'; import { useFieldMetadataItem } from '@/object-metadata/hooks/useFieldMetadataItem'; import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems'; import { useUpdateOneObjectMetadataItem } from '@/object-metadata/hooks/useUpdateOneObjectMetadataItem'; import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { getActiveFieldMetadataItems } from '@/object-metadata/utils/getActiveFieldMetadataItems'; import { getDisabledFieldMetadataItems } from '@/object-metadata/utils/getDisabledFieldMetadataItems'; import { getFieldSlug } from '@/object-metadata/utils/getFieldSlug'; import { isLabelIdentifierField } from '@/object-metadata/utils/isLabelIdentifierField'; import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer'; import { SettingsObjectFieldActiveActionDropdown } from '@/settings/data-model/object-details/components/SettingsObjectFieldActiveActionDropdown'; import { SettingsObjectFieldInactiveActionDropdown } from '@/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown'; import { SettingsObjectFieldItemTableRow, StyledObjectFieldTableRow, } from '@/settings/data-model/object-details/components/SettingsObjectFieldItemTableRow'; import { SettingsObjectSummaryCard } from '@/settings/data-model/object-details/components/SettingsObjectSummaryCard'; import { getFieldIdentifierType } from '@/settings/data-model/utils/getFieldIdentifierType'; import { getSettingsPagePath } from '@/settings/utils/getSettingsPagePath'; import { AppPath } from '@/types/AppPath'; import { SettingsPath } from '@/types/SettingsPath'; import { H2Title } from '@/ui/display/typography/components/H2Title'; import { Button } from '@/ui/input/button/components/Button'; import { SubMenuTopBarContainer } from '@/ui/layout/page/SubMenuTopBarContainer'; import { Section } from '@/ui/layout/section/components/Section'; import { Table } from '@/ui/layout/table/components/Table'; import { TableHeader } from '@/ui/layout/table/components/TableHeader'; import { TableSection } from '@/ui/layout/table/components/TableSection'; import { Breadcrumb } from '@/ui/navigation/bread-crumb/components/Breadcrumb'; const StyledDiv = styled.div` display: flex; justify-content: flex-end; padding-top: ${({ theme }) => theme.spacing(2)}; `; export const SettingsObjectDetail = () => { const navigate = useNavigate(); const { objectSlug = '' } = useParams(); const { findActiveObjectMetadataItemBySlug } = useFilteredObjectMetadataItems(); const { updateOneObjectMetadataItem } = useUpdateOneObjectMetadataItem(); const activeObjectMetadataItem = findActiveObjectMetadataItemBySlug(objectSlug); useEffect(() => { if (!activeObjectMetadataItem) navigate(AppPath.NotFound); }, [activeObjectMetadataItem, navigate]); const { activateMetadataField, disableMetadataField, eraseMetadataField } = useFieldMetadataItem(); if (!activeObjectMetadataItem) return null; const activeMetadataFields = getActiveFieldMetadataItems( activeObjectMetadataItem, ); const disabledMetadataFields = getDisabledFieldMetadataItems( activeObjectMetadataItem, ); const handleDisableObject = async () => { await updateOneObjectMetadataItem({ idToUpdate: activeObjectMetadataItem.id, updatePayload: { isActive: false }, }); navigate(getSettingsPagePath(SettingsPath.Objects)); }; const handleDisableField = (activeFieldMetadatItem: FieldMetadataItem) => { disableMetadataField(activeFieldMetadatItem); }; const handleSetLabelIdentifierField = ( activeFieldMetadatItem: FieldMetadataItem, ) => updateOneObjectMetadataItem({ idToUpdate: activeObjectMetadataItem.id, updatePayload: { labelIdentifierFieldMetadataId: activeFieldMetadatItem.id, }, }); const shouldDisplayAddFieldButton = !activeObjectMetadataItem.isRemote; return (
navigate('./edit')} />
Name {activeObjectMetadataItem.isCustom ? 'Identifier' : 'Field type'} Data type {!!activeMetadataFields.length && ( {activeMetadataFields.map((activeMetadataField) => { const isLabelIdentifier = isLabelIdentifierField({ fieldMetadataItem: activeMetadataField, objectMetadataItem: activeObjectMetadataItem, }); const canBeSetAsLabelIdentifier = activeObjectMetadataItem.isCustom && !isLabelIdentifier && LABEL_IDENTIFIER_FIELD_METADATA_TYPES.includes( activeMetadataField.type, ); return ( navigate(`./${getFieldSlug(activeMetadataField)}`) } onSetAsLabelIdentifier={ canBeSetAsLabelIdentifier ? () => handleSetLabelIdentifierField( activeMetadataField, ) : undefined } onDeactivate={ isLabelIdentifier ? undefined : () => handleDisableField(activeMetadataField) } /> } /> ); })} )} {!!disabledMetadataFields.length && ( {disabledMetadataFields.map((disabledMetadataField) => ( activateMetadataField(disabledMetadataField) } onErase={() => eraseMetadataField(disabledMetadataField) } /> } /> ))} )}
{shouldDisplayAddFieldButton && (
); };