feat: display identifier field in Object Detail page for custom objects (#3329)

* feat: display identifier field in Object Detail page for custom objects

Closes #3301

* fix: show Name as object label identifier by default

* Minor improvements

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>
This commit is contained in:
Thaïs
2024-01-12 08:11:09 -03:00
committed by GitHub
parent 0dc39db314
commit 09a2a656e2
5 changed files with 75 additions and 20 deletions

View File

@ -6,9 +6,11 @@ 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 { FieldIdentifierType } from '@/settings/data-model/types/FieldIdentifierType';
import { useIcons } from '@/ui/display/icon/hooks/useIcons';
import { TableCell } from '@/ui/layout/table/components/TableCell';
import { TableRow } from '@/ui/layout/table/components/TableRow';
import { Nullable } from '~/types/Nullable';
import { relationTypes } from '../../constants/relationTypes';
import { settingsFieldMetadataTypes } from '../../constants/settingsFieldMetadataTypes';
@ -18,6 +20,8 @@ import { SettingsObjectFieldDataType } from './SettingsObjectFieldDataType';
type SettingsObjectFieldItemTableRowProps = {
ActionIcon: ReactNode;
fieldMetadataItem: FieldMetadataItem;
identifierType?: Nullable<FieldIdentifierType>;
variant?: 'field-type' | 'identifier';
};
export const StyledObjectFieldTableRow = styled(TableRow)`
@ -37,6 +41,8 @@ const StyledIconTableCell = styled(TableCell)`
export const SettingsObjectFieldItemTableRow = ({
ActionIcon,
fieldMetadataItem,
identifierType,
variant = 'field-type',
}: SettingsObjectFieldItemTableRowProps) => {
const theme = useTheme();
const { getIcon } = useIcons();
@ -66,7 +72,11 @@ export const SettingsObjectFieldItemTableRow = ({
{fieldMetadataItem.label}
</StyledNameTableCell>
<TableCell>
{fieldMetadataItem.isCustom ? 'Custom' : 'Standard'}
{variant === 'field-type' &&
(fieldMetadataItem.isCustom ? 'Custom' : 'Standard')}
{variant === 'identifier' &&
!!identifierType &&
(identifierType === 'label' ? 'Record text' : 'Record image')}
</TableCell>
<TableCell>
<SettingsObjectFieldDataType

View File

@ -0,0 +1 @@
export type FieldIdentifierType = 'label' | 'image';

View File

@ -0,0 +1,28 @@
import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { isLabelIdentifierField } from '@/object-metadata/utils/isLabelIdentifierField';
import { FieldIdentifierType } from '@/settings/data-model/types/FieldIdentifierType';
export const getFieldIdentifierType = (
activeFieldMetadatItem: FieldMetadataItem,
activeObjectMetadataItem: ObjectMetadataItem,
): FieldIdentifierType | undefined => {
const fieldIsLabelIdentifier = isLabelIdentifierField({
fieldMetadataItem: activeFieldMetadatItem,
objectMetadataItem: activeObjectMetadataItem,
});
if (fieldIsLabelIdentifier) {
return 'label';
}
const fieldIsImageIdentifier =
activeObjectMetadataItem.imageIdentifierFieldMetadataId ===
activeFieldMetadatItem.id;
if (fieldIsImageIdentifier) {
return 'image';
}
return undefined;
};