Closes #7352 **Summary** Moved the `defaultIconsByFieldType` mapping from the `SettingsObjectNewFieldConfigure` component to a separate constants file. This change improves code organization and maintainability without changing functionality. **Changes Made** - **Created a new constants file:** Added `FieldTypeIcons.ts`, located in `src/pages/settings/data-model/constants/`, to store the mapping of `FieldMetadataType` to default icons. ``` // FieldTypeIcons.ts import { FieldMetadataType } from '~/generated-metadata/graphql'; export const defaultIconsByFieldType: Record<FieldMetadataType, string> = { [FieldMetadataType.Address]: 'IconLocation', [FieldMetadataType.Boolean]: 'IconCheckbox', [FieldMetadataType.Currency]: 'IconCurrency', [FieldMetadataType.Date]: 'IconCalendar', [FieldMetadataType.DateTime]: 'IconClock', [FieldMetadataType.Email]: 'IconMail', [FieldMetadataType.FullName]: 'IconUser', [FieldMetadataType.Link]: 'IconLink', [FieldMetadataType.MultiSelect]: 'IconList', [FieldMetadataType.Number]: 'IconNumber', [FieldMetadataType.Phone]: 'IconPhone', [FieldMetadataType.Rating]: 'IconStar', [FieldMetadataType.RawJson]: 'IconCode', [FieldMetadataType.Relation]: 'IconRelationOneToMany', [FieldMetadataType.Select]: 'IconSelect', [FieldMetadataType.Text]: 'IconTypography', [FieldMetadataType.Uuid]: 'IconKey', [FieldMetadataType.Array]: 'IconCodeDots', [FieldMetadataType.Emails]: 'IconMail', [FieldMetadataType.Links]: 'IconLink', [FieldMetadataType.Phones]: 'IconPhone', [FieldMetadataType.Actor]: 'IconUsers', [FieldMetadataType.Numeric]: 'IconUsers', [FieldMetadataType.Position]: 'IconUsers', [FieldMetadataType.RichText]: 'IconUsers', [FieldMetadataType.TsVector]: 'IconUsers', // Add other field types as needed }; ``` - **Updated the import in the component:** In the file `SettingsObjectNewFieldConfigure.tsx`, imported the mapping from the new constants file. ```// SettingsObjectNewFieldConfigure.tsx import { defaultIconsByFieldType } from '~/pages/settings/data-model/constants/FieldTypeIcons'; - **Adjusted form configuration:** Modified `defaultValues` in `useForm` and `useEffect` to use the imported mapping. ``` `const formConfig = useForm<SettingsDataModelNewFieldFormValues>({ mode: 'onTouched', resolver: zodResolver( settingsFieldFormSchema( activeObjectMetadataItem?.fields.map((value) => value.name), ), ), defaultValues: { type: fieldType, icon: defaultIconsByFieldType[fieldType] || 'IconUsers', label: '', description: '', }, }); useEffect(() => { formConfig.setValue('icon', defaultIconsByFieldType[fieldType] || 'IconUsers'); }, [fieldType, formConfig]);` --------- Co-authored-by: Your Name <you@example.com> Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>
This commit is contained in:
@ -2,7 +2,6 @@ import { useCreateOneRelationMetadataItem } from '@/object-metadata/hooks/useCre
|
|||||||
import { useFieldMetadataItem } from '@/object-metadata/hooks/useFieldMetadataItem';
|
import { useFieldMetadataItem } from '@/object-metadata/hooks/useFieldMetadataItem';
|
||||||
import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems';
|
import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems';
|
||||||
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
||||||
import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
|
|
||||||
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
|
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
|
||||||
import { RecordFieldValueSelectorContextProvider } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext';
|
import { RecordFieldValueSelectorContextProvider } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext';
|
||||||
import { SaveAndCancelButtons } from '@/settings/components/SaveAndCancelButtons/SaveAndCancelButtons';
|
import { SaveAndCancelButtons } from '@/settings/components/SaveAndCancelButtons/SaveAndCancelButtons';
|
||||||
@ -30,6 +29,7 @@ import { useNavigate, useParams, useSearchParams } from 'react-router-dom';
|
|||||||
import { H2Title } from 'twenty-ui';
|
import { H2Title } from 'twenty-ui';
|
||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
||||||
|
import { DEFAULT_ICONS_BY_FIELD_TYPE } from '~/pages/settings/data-model/constants/DefaultIconsByFieldType';
|
||||||
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
|
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
|
||||||
|
|
||||||
type SettingsDataModelNewFieldFormValues = z.infer<
|
type SettingsDataModelNewFieldFormValues = z.infer<
|
||||||
@ -37,6 +37,8 @@ type SettingsDataModelNewFieldFormValues = z.infer<
|
|||||||
> &
|
> &
|
||||||
any;
|
any;
|
||||||
|
|
||||||
|
const DEFAULT_ICON_FOR_NEW_FIELD = 'IconUsers';
|
||||||
|
|
||||||
export const SettingsObjectNewFieldConfigure = () => {
|
export const SettingsObjectNewFieldConfigure = () => {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const { objectSlug = '' } = useParams();
|
const { objectSlug = '' } = useParams();
|
||||||
@ -48,7 +50,6 @@ export const SettingsObjectNewFieldConfigure = () => {
|
|||||||
|
|
||||||
const { findActiveObjectMetadataItemBySlug } =
|
const { findActiveObjectMetadataItemBySlug } =
|
||||||
useFilteredObjectMetadataItems();
|
useFilteredObjectMetadataItems();
|
||||||
|
|
||||||
const activeObjectMetadataItem =
|
const activeObjectMetadataItem =
|
||||||
findActiveObjectMetadataItemBySlug(objectSlug);
|
findActiveObjectMetadataItemBySlug(objectSlug);
|
||||||
const { createMetadataField } = useFieldMetadataItem();
|
const { createMetadataField } = useFieldMetadataItem();
|
||||||
@ -63,18 +64,19 @@ export const SettingsObjectNewFieldConfigure = () => {
|
|||||||
),
|
),
|
||||||
defaultValues: {
|
defaultValues: {
|
||||||
type: fieldType,
|
type: fieldType,
|
||||||
icon: 'IconUsers',
|
icon:
|
||||||
|
DEFAULT_ICONS_BY_FIELD_TYPE[fieldType] ?? DEFAULT_ICON_FOR_NEW_FIELD,
|
||||||
label: '',
|
label: '',
|
||||||
description: '',
|
description: '',
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const fieldMetadataItem: Pick<FieldMetadataItem, 'icon' | 'label' | 'type'> =
|
useEffect(() => {
|
||||||
{
|
formConfig.setValue(
|
||||||
icon: formConfig.watch('icon'),
|
'icon',
|
||||||
label: formConfig.watch('label') || 'Employees',
|
DEFAULT_ICONS_BY_FIELD_TYPE[fieldType] ?? DEFAULT_ICON_FOR_NEW_FIELD,
|
||||||
type: formConfig.watch('type'),
|
);
|
||||||
};
|
}, [fieldType, formConfig]);
|
||||||
|
|
||||||
const [, setObjectViews] = useState<View[]>([]);
|
const [, setObjectViews] = useState<View[]>([]);
|
||||||
const [, setRelationObjectViews] = useState<View[]>([]);
|
const [, setRelationObjectViews] = useState<View[]>([]);
|
||||||
@ -209,7 +211,11 @@ export const SettingsObjectNewFieldConfigure = () => {
|
|||||||
<H2Title title="Values" description="The values of this field" />
|
<H2Title title="Values" description="The values of this field" />
|
||||||
<SettingsDataModelFieldSettingsFormCard
|
<SettingsDataModelFieldSettingsFormCard
|
||||||
isCreatingField
|
isCreatingField
|
||||||
fieldMetadataItem={fieldMetadataItem}
|
fieldMetadataItem={{
|
||||||
|
icon: formConfig.watch('icon'),
|
||||||
|
label: formConfig.watch('label') || 'New Field',
|
||||||
|
type: fieldType as FieldMetadataType,
|
||||||
|
}}
|
||||||
objectMetadataItem={activeObjectMetadataItem}
|
objectMetadataItem={activeObjectMetadataItem}
|
||||||
/>
|
/>
|
||||||
</Section>
|
</Section>
|
||||||
|
|||||||
@ -0,0 +1,27 @@
|
|||||||
|
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
||||||
|
|
||||||
|
export const DEFAULT_ICONS_BY_FIELD_TYPE: Record<FieldMetadataType, string> = {
|
||||||
|
[FieldMetadataType.Address]: 'IconMap',
|
||||||
|
[FieldMetadataType.Boolean]: 'IconToggleLeft',
|
||||||
|
[FieldMetadataType.Currency]: 'IconMoneybag',
|
||||||
|
[FieldMetadataType.Date]: 'IconCalendarEvent',
|
||||||
|
[FieldMetadataType.DateTime]: 'IconCalendarClock',
|
||||||
|
[FieldMetadataType.FullName]: 'IconUserCircle',
|
||||||
|
[FieldMetadataType.MultiSelect]: 'IconTags',
|
||||||
|
[FieldMetadataType.Number]: 'IconNumber9',
|
||||||
|
[FieldMetadataType.Rating]: 'IconStar',
|
||||||
|
[FieldMetadataType.RawJson]: 'IconBraces',
|
||||||
|
[FieldMetadataType.Relation]: 'IconRelationOneToMany',
|
||||||
|
[FieldMetadataType.Select]: 'IconTag',
|
||||||
|
[FieldMetadataType.Text]: 'IconTypography',
|
||||||
|
[FieldMetadataType.Uuid]: 'IconId',
|
||||||
|
[FieldMetadataType.Array]: 'IconBracketsContain',
|
||||||
|
[FieldMetadataType.Emails]: 'IconMail',
|
||||||
|
[FieldMetadataType.Links]: 'IconWorld',
|
||||||
|
[FieldMetadataType.Phones]: 'IconPhone',
|
||||||
|
[FieldMetadataType.Actor]: 'IconUsers',
|
||||||
|
[FieldMetadataType.Numeric]: 'IconUsers',
|
||||||
|
[FieldMetadataType.Position]: 'IconUsers',
|
||||||
|
[FieldMetadataType.RichText]: 'IconUsers',
|
||||||
|
[FieldMetadataType.TsVector]: 'IconUsers',
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user