refactor: improve Settings supported field types validation (#4496)

* refactor: improve Settings supported field types validation

Related to: #4084, #4295

* fix: fix wrong import
This commit is contained in:
Thaïs
2024-03-25 12:27:00 +01:00
committed by GitHub
parent a560746fcd
commit 1639b2ad0e
11 changed files with 95 additions and 40 deletions

View File

@ -1,7 +1,8 @@
import { css, useTheme } from '@emotion/react';
import styled from '@emotion/styled';
import { SETTINGS_FIELD_METADATA_TYPES } from '@/settings/data-model/constants/SettingsFieldMetadataTypes';
import { SettingsSupportedFieldType } from '@/settings/data-model/types/SettingsSupportedFieldType';
import { getSettingsFieldTypeConfig } from '@/settings/data-model/utils/getSettingsFieldTypeConfig';
import { IconTwentyStar } from '@/ui/display/icon/components/IconTwentyStar';
import { IconComponent } from '@/ui/display/icon/types/IconComponent';
import { FieldMetadataType } from '~/generated-metadata/graphql';
@ -10,10 +11,10 @@ type SettingsObjectFieldDataTypeProps = {
onClick?: () => void;
Icon?: IconComponent;
label?: string;
value: FieldMetadataType;
value: SettingsSupportedFieldType;
};
const StyledDataType = styled.div<{ value: FieldMetadataType }>`
const StyledDataType = styled.div<{ value: SettingsSupportedFieldType }>`
align-items: center;
border: 1px solid transparent;
border-radius: ${({ theme }) => theme.border.radius.sm};
@ -49,11 +50,16 @@ const StyledLabelContainer = styled.div`
export const SettingsObjectFieldDataType = ({
onClick,
value,
Icon = SETTINGS_FIELD_METADATA_TYPES[value]?.Icon ?? IconTwentyStar,
label = SETTINGS_FIELD_METADATA_TYPES[value]?.label,
Icon: IconFromProps,
label: labelFromProps,
}: SettingsObjectFieldDataTypeProps) => {
const theme = useTheme();
const fieldTypeConfig = getSettingsFieldTypeConfig(value);
const Icon: IconComponent =
IconFromProps ?? fieldTypeConfig?.Icon ?? IconTwentyStar;
const label = labelFromProps ?? fieldTypeConfig?.label;
const StyledIcon = styled(Icon)`
flex: 1 0 auto;
`;

View File

@ -6,8 +6,8 @@ import styled from '@emotion/styled';
import { useGetRelationMetadata } from '@/object-metadata/hooks/useGetRelationMetadata';
import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
import { getObjectSlug } from '@/object-metadata/utils/getObjectSlug';
import { SETTINGS_FIELD_METADATA_TYPES } from '@/settings/data-model/constants/SettingsFieldMetadataTypes';
import { FieldIdentifierType } from '@/settings/data-model/types/FieldIdentifierType';
import { isFieldTypeSupportedInSettings } from '@/settings/data-model/utils/isFieldTypeSupportedInSettings';
import { useIcons } from '@/ui/display/icon/hooks/useIcons';
import { TableCell } from '@/ui/layout/table/components/TableCell';
import { TableRow } from '@/ui/layout/table/components/TableRow';
@ -49,10 +49,6 @@ export const SettingsObjectFieldItemTableRow = ({
const Icon = getIcon(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 SETTINGS_FIELD_METADATA_TYPES;
const getRelationMetadata = useGetRelationMetadata();
const { relationObjectMetadataItem, relationType } =
@ -61,7 +57,10 @@ export const SettingsObjectFieldItemTableRow = ({
[fieldMetadataItem, getRelationMetadata],
) ?? {};
if (!fieldDataTypeIsSupported) return null;
const fieldType = fieldMetadataItem.type;
const isFieldTypeSupported = isFieldTypeSupportedInSettings(fieldType);
if (!isFieldTypeSupported) return null;
const RelationIcon = relationType
? RELATION_TYPES[relationType].Icon
@ -97,7 +96,7 @@ export const SettingsObjectFieldItemTableRow = ({
)
: undefined
}
value={fieldMetadataItem.type}
value={fieldType}
/>
</TableCell>
<StyledIconTableCell>{ActionIcon}</StyledIconTableCell>