import { ReactNode } from 'react'; import { useNavigate } from 'react-router-dom'; import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; import { useRelationMetadata } from '@/object-metadata/hooks/useRelationMetadata'; import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { getObjectSlug } from '@/object-metadata/utils/getObjectSlug'; import { useLazyLoadIcon } from '@/ui/input/hooks/useLazyLoadIcon'; import { TableCell } from '@/ui/layout/table/components/TableCell'; import { TableRow } from '@/ui/layout/table/components/TableRow'; import { relationTypes } from '../../constants/relationTypes'; import { settingsFieldMetadataTypes } from '../../constants/settingsFieldMetadataTypes'; import { SettingsObjectFieldDataType } from './SettingsObjectFieldDataType'; type SettingsObjectFieldItemTableRowProps = { ActionIcon: ReactNode; fieldMetadataItem: FieldMetadataItem; }; export const StyledObjectFieldTableRow = styled(TableRow)` grid-template-columns: 180px 148px 148px 36px; `; const StyledNameTableCell = styled(TableCell)` color: ${({ theme }) => theme.font.color.primary}; gap: ${({ theme }) => theme.spacing(2)}; `; const StyledIconTableCell = styled(TableCell)` justify-content: center; padding-right: ${({ theme }) => theme.spacing(1)}; `; export const SettingsObjectFieldItemTableRow = ({ ActionIcon, fieldMetadataItem: fieldMetadataItem, }: SettingsObjectFieldItemTableRowProps) => { const theme = useTheme(); const { Icon } = useLazyLoadIcon(fieldMetadataItem.icon ?? ''); const navigate = useNavigate(); // TODO: parse with zod and merge types with FieldType (create a subset of FieldType for example) const fieldDataTypeIsSupported = fieldMetadataItem.type in settingsFieldMetadataTypes; const { relationObjectMetadataItem, relationType } = useRelationMetadata({ fieldMetadataItem, }); if (!fieldDataTypeIsSupported) return null; const RelationIcon = relationType ? relationTypes[relationType].Icon : undefined; return ( {!!Icon && } {fieldMetadataItem.label} {fieldMetadataItem.isCustom ? 'Custom' : 'Standard'} navigate( `/settings/objects/${getObjectSlug( relationObjectMetadataItem, )}`, ) : undefined } value={fieldMetadataItem.type} /> {ActionIcon} ); };