RICH_TEXT_V2 frontend (#10083)

Adds task and note support for the new `bodyV2` field. (Field metadata
type of `bodyV2` is `RICH_TEXT_V2`.)

Related to issue https://github.com/twentyhq/twenty/issues/7613

Upgrade commands will be in separate PRs.

Fixes https://github.com/twentyhq/twenty/issues/10084

---------

Co-authored-by: ad-elias <elias@autodiligence.com>
Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>
This commit is contained in:
eliasylonen
2025-02-11 11:21:03 +01:00
committed by GitHub
parent de91a5e39e
commit 4f06b83d7f
55 changed files with 545 additions and 4576 deletions

View File

@ -7,6 +7,7 @@ import {
FieldFullNameValue,
FieldLinksValue,
FieldPhonesValue,
FieldRichTextV2Value,
} from '@/object-record/record-field/types/FieldMetadata';
import { SettingsFieldTypeConfig } from '@/settings/data-model/constants/SettingsNonCompositeFieldTypeConfigs';
import { CompositeFieldType } from '@/settings/data-model/types/CompositeFieldType';
@ -18,6 +19,7 @@ import {
IllustrationIconMap,
IllustrationIconPhone,
IllustrationIconSetting,
IllustrationIconText,
IllustrationIconUser,
} from 'twenty-ui';
import { FieldMetadataType } from '~/generated-metadata/graphql';
@ -185,4 +187,19 @@ export const SETTINGS_COMPOSITE_FIELD_TYPE_CONFIGS = {
context: { provider: ConnectedAccountProvider.GOOGLE },
},
} as const satisfies SettingsCompositeFieldTypeConfig<FieldActorValue>,
[FieldMetadataType.RICH_TEXT_V2]: {
label: 'Rich Text',
Icon: IllustrationIconText,
subFields: ['blocknote', 'markdown'],
filterableSubFields: [],
labelBySubField: {
blocknote: 'BlockNote',
markdown: 'Markdown',
},
exampleValue: {
blocknote: '[{"type":"heading","content":"Hello"}]',
markdown: '# Hello',
},
category: 'Basic',
} as const satisfies SettingsCompositeFieldTypeConfig<FieldRichTextV2Value>,
} as const satisfies SettingsCompositeFieldTypeConfigArray;

View File

@ -6,7 +6,6 @@ import {
IllustrationIconJson,
IllustrationIconNumbers,
IllustrationIconOneToMany,
IllustrationIconSetting,
IllustrationIconStar,
IllustrationIconTag,
IllustrationIconTags,
@ -25,7 +24,6 @@ import {
FieldNumberValue,
FieldRatingValue,
FieldRelationValue,
FieldRichTextValue,
FieldSelectValue,
FieldTextValue,
FieldUUidValue,
@ -122,12 +120,6 @@ export const SETTINGS_NON_COMPOSITE_FIELD_TYPE_CONFIGS: SettingsNonCompositeFiel
exampleValue: { key: 'value' },
category: 'Advanced',
} as const satisfies SettingsFieldTypeConfig<FieldJsonValue>,
[FieldMetadataType.RICH_TEXT]: {
label: 'Rich Text',
Icon: IllustrationIconSetting,
exampleValue: "{ key: 'value' }",
category: 'Basic',
} as const satisfies SettingsFieldTypeConfig<FieldRichTextValue>,
[FieldMetadataType.ARRAY]: {
label: 'Array',
Icon: IllustrationIconArray,

View File

@ -7,6 +7,7 @@ import { SettingsFieldTypeConfig } from '@/settings/data-model/constants/Setting
import { useBooleanSettingsFormInitialValues } from '@/settings/data-model/fields/forms/boolean/hooks/useBooleanSettingsFormInitialValues';
import { useCurrencySettingsFormInitialValues } from '@/settings/data-model/fields/forms/currency/hooks/useCurrencySettingsFormInitialValues';
import { useSelectSettingsFormInitialValues } from '@/settings/data-model/fields/forms/select/hooks/useSelectSettingsFormInitialValues';
import { FieldType } from '@/settings/data-model/types/FieldType';
import { SettingsFieldType } from '@/settings/data-model/types/SettingsFieldType';
import { SettingsPath } from '@/types/SettingsPath';
import { TextInput } from '@/ui/input/components/TextInput';
@ -22,7 +23,7 @@ import { getSettingsPath } from '~/utils/navigation/getSettingsPath';
type SettingsObjectNewFieldSelectorProps = {
className?: string;
excludedFieldTypes?: SettingsFieldType[];
excludedFieldTypes?: FieldType[];
fieldMetadataItem?: Pick<
FieldMetadataItem,
'defaultValue' | 'options' | 'type'

View File

@ -10,6 +10,7 @@ export const COMPOSITE_FIELD_TYPES = [
'PHONES',
'FULL_NAME',
'ACTOR',
'RICH_TEXT_V2',
] as const;
type CompositeFieldTypeBaseLiteral = (typeof COMPOSITE_FIELD_TYPES)[number];

View File

@ -1,8 +1,7 @@
import { CompositeFieldType } from '@/settings/data-model/types/CompositeFieldType';
import { SettingsFieldType } from '@/settings/data-model/types/SettingsFieldType';
import { PickLiteral } from '~/types/PickLiteral';
export type SettingsCompositeFieldType = PickLiteral<
export type SettingsCompositeFieldType = Extract<
SettingsFieldType,
CompositeFieldType
>;

View File

@ -3,5 +3,5 @@ import { PickLiteral } from '~/types/PickLiteral';
export type SettingsExcludedFieldType = PickLiteral<
FieldType,
'POSITION' | 'TS_VECTOR' | 'RICH_TEXT_V2'
'POSITION' | 'TS_VECTOR' | 'RICH_TEXT' | 'RICH_TEXT_V2'
>;

View File

@ -1,8 +1,7 @@
import { NonCompositeFieldType } from '@/settings/data-model/types/NonCompositeFieldType';
import { SettingsExcludedFieldType } from '@/settings/data-model/types/SettingsExcludedFieldType';
import { ExcludeLiteral } from '~/types/ExcludeLiteral';
import { SettingsFieldType } from '@/settings/data-model/types/SettingsFieldType';
export type SettingsNonCompositeFieldType = ExcludeLiteral<
export type SettingsNonCompositeFieldType = Extract<
NonCompositeFieldType,
SettingsExcludedFieldType
SettingsFieldType
>;