feat: rename RICH_TEXT_V2 → RICH_TEXT in codebase (keep DB value) (#18628)

## Summary

- Renames the `FieldMetadataType` enum key from `RICH_TEXT_V2` to
`RICH_TEXT` across the entire codebase, while keeping the underlying
string value as `'RICH_TEXT_V2'` to maintain PostgreSQL database
compatibility
- Renames all related types, guards, hooks, components, and files from
`*RichTextV2*` / `*rich-text-v2*` to `*RichText*` / `*rich-text*` (e.g.
`FormRichTextV2FieldInput` → `FormRichTextFieldInput`,
`isFieldRichTextV2` → `isFieldRichText`)
- Updates generated files (GraphQL schema, SDK types) to use the new key
while preserving the `RICH_TEXT_V2` string value for DB/API layer
- Updates i18n locale files, test snapshots, and integration tests to
reflect the rename

## Context

The legacy `RICH_TEXT` (V1) field type was deprecated and migrated to
`TEXT` in a previous PR (#18623). With V1 gone, the `RICH_TEXT_V2`
naming is no longer necessary — `RICH_TEXT` is now the canonical name.
The DB enum value stays `'RICH_TEXT_V2'` to avoid confusion with the
just-deprecated V1 type and to prevent a database migration.

## Test plan

- [x] `twenty-server` typecheck passes
- [x] `twenty-front` typecheck passes (only pre-existing Apollo client
errors remain)
- [x] `twenty-server` lint passes
- [x] `twenty-front` lint passes
- [x] `twenty-shared` build passes
- [ ] CI passes


Made with [Cursor](https://cursor.com)
This commit is contained in:
Charles Bochet
2026-03-13 19:07:55 +01:00
committed by GitHub
parent 3054679411
commit d9eb317bb5
129 changed files with 452 additions and 401 deletions
@@ -96,12 +96,12 @@ describe('filterSortableFieldMetadataItems', () => {
expect(filterSortableFieldMetadataItems(field)).toBe(false);
});
it('should NOT allow unsortable field types like RICH_TEXT_V2', () => {
it('should NOT allow unsortable field types like RICH_TEXT', () => {
const field = {
type: FieldMetadataType.RICH_TEXT_V2,
type: FieldMetadataType.RICH_TEXT,
isSystem: false,
isActive: true,
name: 'richTextV2',
name: 'richText',
};
expect(filterSortableFieldMetadataItems(field)).toBe(false);
@@ -310,7 +310,7 @@ ${mapObjectMetadataToGraphQLQuery({
}`;
}
if (fieldType === FieldMetadataType.RICH_TEXT_V2) {
if (fieldType === FieldMetadataType.RICH_TEXT) {
return `${gqlField}
{
blocknote
@@ -65,7 +65,7 @@ export const useFieldListFieldMetadataItems = ({
)
.filter(
(fieldMetadataItem) =>
fieldMetadataItem.type !== FieldMetadataType.RICH_TEXT_V2,
fieldMetadataItem.type !== FieldMetadataType.RICH_TEXT,
),
(fieldMetadataItem) =>
fieldMetadataItem.type === FieldMetadataType.RELATION ||
@@ -10,7 +10,7 @@ import { LinksFieldDisplay } from '@/object-record/record-field/ui/meta-types/di
import { PhonesFieldDisplay } from '@/object-record/record-field/ui/meta-types/display/components/PhonesFieldDisplay';
import { RatingFieldDisplay } from '@/object-record/record-field/ui/meta-types/display/components/RatingFieldDisplay';
import { RelationFromManyFieldDisplay } from '@/object-record/record-field/ui/meta-types/display/components/RelationFromManyFieldDisplay';
import { RichTextV2FieldDisplay } from '@/object-record/record-field/ui/meta-types/display/components/RichTextV2FieldDisplay';
import { RichTextFieldDisplay } from '@/object-record/record-field/ui/meta-types/display/components/RichTextFieldDisplay';
import { isFieldIdentifierDisplay } from '@/object-record/record-field/ui/meta-types/display/utils/isFieldIdentifierDisplay';
import { isFieldActor } from '@/object-record/record-field/ui/types/guards/isFieldActor';
import { isFieldArray } from '@/object-record/record-field/ui/types/guards/isFieldArray';
@@ -20,7 +20,7 @@ import { isFieldFiles } from '@/object-record/record-field/ui/types/guards/isFie
import { isFieldLinks } from '@/object-record/record-field/ui/types/guards/isFieldLinks';
import { isFieldPhones } from '@/object-record/record-field/ui/types/guards/isFieldPhones';
import { isFieldRating } from '@/object-record/record-field/ui/types/guards/isFieldRating';
import { isFieldRichTextV2 } from '@/object-record/record-field/ui/types/guards/isFieldRichTextV2';
import { isFieldRichText } from '@/object-record/record-field/ui/types/guards/isFieldRichText';
import { MorphRelationManyToOneFieldDisplay } from '@/object-record/record-field/ui/meta-types/display/components/MorphRelationManyToOneFieldDisplay';
import { MorphRelationOneToManyFieldDisplay } from '@/object-record/record-field/ui/meta-types/display/components/MorphRelationOneToManyFieldDisplay';
@@ -110,8 +110,8 @@ export const FieldDisplay = () => {
<BooleanFieldDisplay />
) : isFieldRating(fieldDefinition) ? (
<RatingFieldDisplay readonly={isRecordFieldReadOnly} />
) : isFieldRichTextV2(fieldDefinition) ? (
<RichTextV2FieldDisplay />
) : isFieldRichText(fieldDefinition) ? (
<RichTextFieldDisplay />
) : isFieldActor(fieldDefinition) ? (
<ActorFieldDisplay />
) : isFieldArray(fieldDefinition) ? (
@@ -36,7 +36,7 @@ import { isFieldRating } from '@/object-record/record-field/ui/types/guards/isFi
import { isFieldRawJson } from '@/object-record/record-field/ui/types/guards/isFieldRawJson';
import { isFieldRelationManyToOne } from '@/object-record/record-field/ui/types/guards/isFieldRelationManyToOne';
import { isFieldRelationOneToMany } from '@/object-record/record-field/ui/types/guards/isFieldRelationOneToMany';
import { isFieldRichTextV2 } from '@/object-record/record-field/ui/types/guards/isFieldRichTextV2';
import { isFieldRichText } from '@/object-record/record-field/ui/types/guards/isFieldRichText';
import { isFieldSelect } from '@/object-record/record-field/ui/types/guards/isFieldSelect';
import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext';
import { BooleanFieldInput } from '@/object-record/record-field/ui/meta-types/input/components/BooleanFieldInput';
@@ -94,7 +94,7 @@ export const FieldInput = () => {
<RawJsonFieldInput />
) : isFieldArray(fieldDefinition) ? (
<ArrayFieldInput />
) : isFieldRichTextV2(fieldDefinition) ? (
) : isFieldRichText(fieldDefinition) ? (
<RichTextFieldInput />
) : (
<></>
@@ -13,7 +13,7 @@ import { FormNumberFieldInput } from '@/object-record/record-field/ui/form-types
import { FormPhoneFieldInput } from '@/object-record/record-field/ui/form-types/components/FormPhoneFieldInput';
import { FormRawJsonFieldInput } from '@/object-record/record-field/ui/form-types/components/FormRawJsonFieldInput';
import { FormRelationToOneFieldInput } from '@/object-record/record-field/ui/form-types/components/FormRelationToOneFieldInput';
import { FormRichTextV2FieldInput } from '@/object-record/record-field/ui/form-types/components/FormRichTextV2FieldInput';
import { FormRichTextFieldInput } from '@/object-record/record-field/ui/form-types/components/FormRichTextFieldInput';
import { FormSelectFieldInput } from '@/object-record/record-field/ui/form-types/components/FormSelectFieldInput';
import { FormTextFieldInput } from '@/object-record/record-field/ui/form-types/components/FormTextFieldInput';
import { FormUuidFieldInput } from '@/object-record/record-field/ui/form-types/components/FormUuidFieldInput';
@@ -30,7 +30,7 @@ import {
type FieldPhonesValue,
type FieldRelationToOneValue,
type FieldRelationValue,
type FieldRichTextV2Value,
type FieldRichTextValue,
type FormFieldCurrencyValue,
} from '@/object-record/record-field/ui/types/FieldMetadata';
import { isFieldAddress } from '@/object-record/record-field/ui/types/guards/isFieldAddress';
@@ -48,7 +48,7 @@ import { isFieldNumber } from '@/object-record/record-field/ui/types/guards/isFi
import { isFieldPhones } from '@/object-record/record-field/ui/types/guards/isFieldPhones';
import { isFieldRawJson } from '@/object-record/record-field/ui/types/guards/isFieldRawJson';
import { isFieldRelationManyToOne } from '@/object-record/record-field/ui/types/guards/isFieldRelationManyToOne';
import { isFieldRichTextV2 } from '@/object-record/record-field/ui/types/guards/isFieldRichTextV2';
import { isFieldRichText } from '@/object-record/record-field/ui/types/guards/isFieldRichText';
import { isFieldSelect } from '@/object-record/record-field/ui/types/guards/isFieldSelect';
import { isFieldText } from '@/object-record/record-field/ui/types/guards/isFieldText';
import { isFieldUuid } from '@/object-record/record-field/ui/types/guards/isFieldUuid';
@@ -220,10 +220,10 @@ export const FormFieldInput = ({
VariablePicker={VariablePicker}
readonly={readonly}
/>
) : isFieldRichTextV2(field) ? (
<FormRichTextV2FieldInput
) : isFieldRichText(field) ? (
<FormRichTextFieldInput
label={field.label}
defaultValue={defaultValue as FieldRichTextV2Value | undefined}
defaultValue={defaultValue as FieldRichTextValue | undefined}
onChange={onChange}
VariablePicker={VariablePicker}
readonly={readonly}
@@ -1,22 +1,22 @@
import { FormAdvancedTextFieldInput } from '@/object-record/record-field/ui/form-types/components/FormAdvancedTextFieldInput';
import { type VariablePickerComponent } from '@/object-record/record-field/ui/form-types/types/VariablePickerComponent';
import { type FieldRichTextV2Value } from '@/object-record/record-field/ui/types/FieldMetadata';
import { type FieldRichTextValue } from '@/object-record/record-field/ui/types/FieldMetadata';
type FormRichTextV2FieldInputProps = {
type FormRichTextFieldInputProps = {
label?: string;
error?: string;
hint?: string;
defaultValue: FieldRichTextV2Value | undefined;
onChange: (value: FieldRichTextV2Value) => void;
defaultValue: FieldRichTextValue | undefined;
onChange: (value: FieldRichTextValue) => void;
onBlur?: () => void;
readonly?: boolean;
placeholder?: string;
VariablePicker?: VariablePickerComponent;
};
const RICH_TEXT_V2_EDITOR_MIN_HEIGHT = 340;
const RICH_TEXT_EDITOR_MIN_HEIGHT = 340;
const RICH_TEXT_V2_EDITOR_MAX_WIDTH = 600;
const RICH_TEXT_EDITOR_MAX_WIDTH = 600;
const mapTipTapToBlockNote = (tiptapJson: string): string => {
try {
@@ -30,7 +30,7 @@ const mapTipTapToBlockNote = (tiptapJson: string): string => {
}
};
export const FormRichTextV2FieldInput = ({
export const FormRichTextFieldInput = ({
label,
error,
hint,
@@ -39,7 +39,7 @@ export const FormRichTextV2FieldInput = ({
onChange,
readonly,
VariablePicker,
}: FormRichTextV2FieldInputProps) => {
}: FormRichTextFieldInputProps) => {
const handleChange = (value: string) => {
onChange({
blocknote: mapTipTapToBlockNote(value),
@@ -57,8 +57,8 @@ export const FormRichTextV2FieldInput = ({
onChange={handleChange}
readonly={readonly}
VariablePicker={VariablePicker}
minHeight={RICH_TEXT_V2_EDITOR_MIN_HEIGHT}
maxWidth={RICH_TEXT_V2_EDITOR_MAX_WIDTH}
minHeight={RICH_TEXT_EDITOR_MIN_HEIGHT}
maxWidth={RICH_TEXT_EDITOR_MAX_WIDTH}
/>
);
};
@@ -1,4 +1,4 @@
import { FormRichTextV2FieldInput } from '@/object-record/record-field/ui/form-types/components/FormRichTextV2FieldInput';
import { FormRichTextFieldInput } from '@/object-record/record-field/ui/form-types/components/FormRichTextFieldInput';
import { type Meta, type StoryObj } from '@storybook/react-vite';
import {
expect,
@@ -12,9 +12,9 @@ import { getUserDevice } from 'twenty-ui/utilities';
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
const meta: Meta<typeof FormRichTextV2FieldInput> = {
title: 'UI/Data/Field/Form/Input/FormRichTextV2FieldInput',
component: FormRichTextV2FieldInput,
const meta: Meta<typeof FormRichTextFieldInput> = {
title: 'UI/Data/Field/Form/Input/FormRichTextFieldInput',
component: FormRichTextFieldInput,
args: {},
argTypes: {},
decorators: [WorkflowStepDecorator],
@@ -22,7 +22,7 @@ const meta: Meta<typeof FormRichTextV2FieldInput> = {
export default meta;
type Story = StoryObj<typeof FormRichTextV2FieldInput>;
type Story = StoryObj<typeof FormRichTextFieldInput>;
export const Default: Story = {
args: {
@@ -49,8 +49,8 @@ import { isFieldRating } from '@/object-record/record-field/ui/types/guards/isFi
import { isFieldRatingValue } from '@/object-record/record-field/ui/types/guards/isFieldRatingValue';
import { isFieldRelationManyToOne } from '@/object-record/record-field/ui/types/guards/isFieldRelationManyToOne';
import { isFieldRelationManyToOneValue } from '@/object-record/record-field/ui/types/guards/isFieldRelationManyToOneValue';
import { isFieldRichTextV2 } from '@/object-record/record-field/ui/types/guards/isFieldRichTextV2';
import { isFieldRichTextV2Value } from '@/object-record/record-field/ui/types/guards/isFieldRichTextValueV2';
import { isFieldRichText } from '@/object-record/record-field/ui/types/guards/isFieldRichText';
import { isFieldRichTextValue } from '@/object-record/record-field/ui/types/guards/isFieldRichTextValue';
import { isFieldText } from '@/object-record/record-field/ui/types/guards/isFieldText';
import { isFieldTextValue } from '@/object-record/record-field/ui/types/guards/isFieldTextValue';
import { useUpsertRecordsInStore } from '@/object-record/record-store/hooks/useUpsertRecordsInStore';
@@ -143,9 +143,9 @@ export const usePersistField = ({
const fieldIsRawJson =
isFieldRawJson(fieldDefinition) && isFieldRawJsonValue(valueToPersist);
const fieldIsRichTextV2 =
isFieldRichTextV2(fieldDefinition) &&
isFieldRichTextV2Value(valueToPersist);
const fieldIsRichText =
isFieldRichText(fieldDefinition) &&
isFieldRichTextValue(valueToPersist);
const fieldIsArray =
isFieldArray(fieldDefinition) && isFieldArrayValue(valueToPersist);
@@ -179,7 +179,7 @@ export const usePersistField = ({
fieldIsRawJson ||
fieldIsArray ||
fieldIsFiles ||
fieldIsRichTextV2;
fieldIsRichText;
if (isValuePersistable) {
const fieldName = fieldDefinition.metadata.fieldName;
@@ -1,11 +1,11 @@
import { useRichTextV2FieldDisplay } from '@/object-record/record-field/ui/meta-types/hooks/useRichTextV2FieldDisplay';
import { useRichTextFieldDisplay } from '@/object-record/record-field/ui/meta-types/hooks/useRichTextFieldDisplay';
import { getFirstNonEmptyLineOfRichText } from '@/blocknote-editor/utils/getFirstNonEmptyLineOfRichText';
import type { PartialBlock } from '@blocknote/core';
import { isNonEmptyString } from '@sniptt/guards';
import { isDefined, parseJson } from 'twenty-shared/utils';
export const RichTextV2FieldDisplay = () => {
const { fieldValue } = useRichTextV2FieldDisplay();
export const RichTextFieldDisplay = () => {
const { fieldValue } = useRichTextFieldDisplay();
const blocks =
isDefined(fieldValue) && isNonEmptyString(fieldValue.blocknote)
@@ -1,24 +1,24 @@
import { useContext } from 'react';
import { type FieldRichTextV2Value } from '@/object-record/record-field/ui/types/FieldMetadata';
import { type FieldRichTextValue } from '@/object-record/record-field/ui/types/FieldMetadata';
import { assertFieldMetadata } from '@/object-record/record-field/ui/types/guards/assertFieldMetadata';
import { isFieldRichTextV2 } from '@/object-record/record-field/ui/types/guards/isFieldRichTextV2';
import { isFieldRichText } from '@/object-record/record-field/ui/types/guards/isFieldRichText';
import { useRecordFieldValue } from '@/object-record/record-store/hooks/useRecordFieldValue';
import { FieldMetadataType } from '~/generated-metadata/graphql';
import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext';
export const useRichTextV2FieldDisplay = () => {
export const useRichTextFieldDisplay = () => {
const { recordId, fieldDefinition } = useContext(FieldContext);
assertFieldMetadata(
FieldMetadataType.RICH_TEXT_V2,
isFieldRichTextV2,
FieldMetadataType.RICH_TEXT,
isFieldRichText,
fieldDefinition,
);
const fieldName = fieldDefinition.metadata.fieldName;
const fieldValue = useRecordFieldValue<FieldRichTextV2Value | undefined>(
const fieldValue = useRecordFieldValue<FieldRichTextValue | undefined>(
recordId,
fieldName,
fieldDefinition,
@@ -7,7 +7,7 @@ import { RecordFieldComponentInstanceContext } from '@/object-record/record-fiel
import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext';
import { FieldInputEventContext } from '@/object-record/record-field/ui/contexts/FieldInputEventContext';
import { type FieldRichTextV2Metadata } from '@/object-record/record-field/ui/types/FieldMetadata';
import { type FieldRichTextMetadata } from '@/object-record/record-field/ui/types/FieldMetadata';
import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow';
import { styled } from '@linaria/react';
import { Suspense, lazy, useContext, useRef } from 'react';
@@ -59,7 +59,7 @@ export const RichTextFieldInput = () => {
id: recordId,
targetObjectNameSingular: (
fieldDefinition as {
metadata: FieldRichTextV2Metadata;
metadata: FieldRichTextMetadata;
}
).metadata.objectMetadataNameSingular as
| CoreObjectNameSingular.Note
@@ -65,7 +65,7 @@ const RichTextFieldInputWithContext = () => {
fieldDefinition: {
fieldMetadataId: 'richText',
label: 'Rich Text',
type: FieldMetadataType.RICH_TEXT_V2,
type: FieldMetadataType.RICH_TEXT,
iconName: 'IconRichText',
metadata: {
fieldName: 'richText',
@@ -131,7 +131,7 @@ export type FieldRawJsonMetadata = BaseFieldMetadata & {
settings?: null;
};
export type FieldRichTextV2Metadata = BaseFieldMetadata & {
export type FieldRichTextMetadata = BaseFieldMetadata & {
settings?: null;
};
@@ -225,7 +225,7 @@ export type FieldMetadata =
| FieldArrayMetadata
| FieldTsVectorMetadata
| FieldRawJsonMetadata
| FieldRichTextV2Metadata;
| FieldRichTextMetadata;
export type FieldTextValue = string;
export type FieldUUidValue = string; // TODO: can we replace with a template literal type, or maybe overkill ?
@@ -279,7 +279,7 @@ export type FieldRelationValue<
export type Json = ZodHelperLiteral | { [key: string]: Json } | Json[];
export type FieldJsonValue = Record<string, Json> | Json[] | null;
export type FieldRichTextV2Value = {
export type FieldRichTextValue = {
blocknote: string | null;
markdown: string | null;
};
@@ -24,7 +24,7 @@ import {
type FieldRatingMetadata,
type FieldRawJsonMetadata,
type FieldRelationMetadata,
type FieldRichTextV2Metadata,
type FieldRichTextMetadata,
type FieldSelectMetadata,
type FieldTextMetadata,
type FieldUuidMetadata,
@@ -74,8 +74,8 @@ type AssertFieldMetadataFunction = <
? FieldAddressMetadata
: E extends 'RAW_JSON'
? FieldRawJsonMetadata
: E extends 'RICH_TEXT_V2'
? FieldRichTextV2Metadata
: E extends 'RICH_TEXT'
? FieldRichTextMetadata
: E extends 'ACTOR'
? FieldActorMetadata
: E extends 'ARRAY'
@@ -3,10 +3,10 @@ import { FieldMetadataType } from '~/generated-metadata/graphql';
import { type FieldDefinition } from '@/object-record/record-field/ui/types/FieldDefinition';
import {
type FieldMetadata,
type FieldRichTextV2Metadata,
type FieldRichTextMetadata,
} from '@/object-record/record-field/ui/types/FieldMetadata';
export const isFieldRichTextV2 = (
export const isFieldRichText = (
field: Pick<FieldDefinition<FieldMetadata>, 'type'>,
): field is FieldDefinition<FieldRichTextV2Metadata> =>
field.type === FieldMetadataType.RICH_TEXT_V2;
): field is FieldDefinition<FieldRichTextMetadata> =>
field.type === FieldMetadataType.RICH_TEXT;
@@ -0,0 +1,12 @@
import { type FieldRichTextValue } from '@/object-record/record-field/ui/types/FieldMetadata';
import { z } from 'zod';
export const richTextSchema: z.ZodType<FieldRichTextValue> = z.object({
blocknote: z.string().nullable(),
markdown: z.string().nullable(),
});
export const isFieldRichTextValue = (
fieldValue: unknown,
): fieldValue is FieldRichTextValue =>
richTextSchema.safeParse(fieldValue).success;
@@ -1,12 +0,0 @@
import { type FieldRichTextV2Value } from '@/object-record/record-field/ui/types/FieldMetadata';
import { z } from 'zod';
export const richTextV2Schema: z.ZodType<FieldRichTextV2Value> = z.object({
blocknote: z.string().nullable(),
markdown: z.string().nullable(),
});
export const isFieldRichTextV2Value = (
fieldValue: unknown,
): fieldValue is FieldRichTextV2Value =>
richTextV2Schema.safeParse(fieldValue).success;
@@ -32,8 +32,8 @@ import { isFieldPosition } from '@/object-record/record-field/ui/types/guards/is
import { isFieldRating } from '@/object-record/record-field/ui/types/guards/isFieldRating';
import { isFieldRawJson } from '@/object-record/record-field/ui/types/guards/isFieldRawJson';
import { isFieldRelation } from '@/object-record/record-field/ui/types/guards/isFieldRelation';
import { isFieldRichTextV2 } from '@/object-record/record-field/ui/types/guards/isFieldRichTextV2';
import { isFieldRichTextV2Value } from '@/object-record/record-field/ui/types/guards/isFieldRichTextValueV2';
import { isFieldRichText } from '@/object-record/record-field/ui/types/guards/isFieldRichText';
import { isFieldRichTextValue } from '@/object-record/record-field/ui/types/guards/isFieldRichTextValue';
import { isFieldSelect } from '@/object-record/record-field/ui/types/guards/isFieldSelect';
import { isFieldSelectValue } from '@/object-record/record-field/ui/types/guards/isFieldSelectValue';
import { isFieldText } from '@/object-record/record-field/ui/types/guards/isFieldText';
@@ -177,9 +177,9 @@ export const isFieldValueEmpty = ({
return false;
}
if (isFieldRichTextV2(fieldDefinition)) {
if (isFieldRichText(fieldDefinition)) {
return (
!isFieldRichTextV2Value(fieldValue) || isValueEmpty(fieldValue?.markdown)
!isFieldRichTextValue(fieldValue) || isValueEmpty(fieldValue?.markdown)
);
}
@@ -22,7 +22,7 @@ import {
type RatingFilter,
type RawJsonFilter,
type RecordGqlOperationFilter,
type RichTextV2Filter,
type RichTextFilter,
type SelectFilter,
type StringFilter,
type TSVectorFilter,
@@ -40,7 +40,7 @@ import {
isMatchingMultiSelectFilter,
isMatchingRatingFilter,
isMatchingRawJsonFilter,
isMatchingRichTextV2Filter,
isMatchingRichTextFilter,
isMatchingSelectFilter,
isMatchingStringFilter,
isMatchingTSVectorFilter,
@@ -235,9 +235,9 @@ export const isRecordMatchingFilter = ({
value: record[filterKey],
});
}
case FieldMetadataType.RICH_TEXT_V2: {
return isMatchingRichTextV2Filter({
richTextV2Filter: filterValue as RichTextV2Filter,
case FieldMetadataType.RICH_TEXT: {
return isMatchingRichTextFilter({
richTextFilter: filterValue as RichTextFilter,
value: record[filterKey],
});
}
@@ -375,7 +375,7 @@ const SUPPORTED_COMPOSITE_FIELD_TYPES: FieldMetadataType[] = [
FieldMetadataType.EMAILS,
FieldMetadataType.PHONES,
FieldMetadataType.ACTOR,
FieldMetadataType.RICH_TEXT_V2,
FieldMetadataType.RICH_TEXT,
];
const computeValueFromSubFieldType = ({
@@ -48,7 +48,7 @@ export const useBuildSpreadsheetImportFields = () => {
case FieldMetadataType.FULL_NAME:
case FieldMetadataType.LINKS:
case FieldMetadataType.PHONES:
case FieldMetadataType.RICH_TEXT_V2:
case FieldMetadataType.RICH_TEXT:
return handleCompositeFields({
fieldMetadataItem,
fieldType: fieldMetadataItem.type,
@@ -251,7 +251,7 @@ describe('buildRecordFromImportedStructuredRow', () => {
universalIdentifier: '16',
name: 'richTextField',
label: 'Rich Text Field',
type: FieldMetadataType.RICH_TEXT_V2,
type: FieldMetadataType.RICH_TEXT,
isNullable: true,
isActive: true,
isCustom: false,
@@ -196,7 +196,7 @@ export const buildRecordFromImportedStructuredRow = ({
additionalPhones: phoneArrayJSONSchema.parse,
},
[FieldMetadataType.RICH_TEXT_V2]: {
[FieldMetadataType.RICH_TEXT]: {
blocknote: castToString,
markdown: castToString,
},
@@ -222,7 +222,7 @@ export const buildRecordFromImportedStructuredRow = ({
case FieldMetadataType.CURRENCY:
case FieldMetadataType.ADDRESS:
case FieldMetadataType.LINKS:
case FieldMetadataType.RICH_TEXT_V2:
case FieldMetadataType.RICH_TEXT:
case FieldMetadataType.EMAILS:
case FieldMetadataType.FULL_NAME: {
const compositeData = buildCompositeFieldRecord(
@@ -95,7 +95,7 @@ export const generateEmptyFieldValue = ({
case FieldMetadataType.RAW_JSON: {
return null;
}
case FieldMetadataType.RICH_TEXT_V2: {
case FieldMetadataType.RICH_TEXT: {
return {
blocknote: null,
markdown: null,
@@ -17,7 +17,7 @@ import { isDefined } from 'twenty-shared/utils';
import { v4 as uuidv4 } from 'uuid';
import {
type PageLayoutWidget,
type RichTextV2Body,
type RichTextBody,
WidgetType,
} from '~/generated-metadata/graphql';
@@ -48,7 +48,7 @@ export const useCreatePageLayoutStandaloneRichTextWidget = (
);
const createPageLayoutStandaloneRichTextWidget = useCallback(
(body: RichTextV2Body): PageLayoutWidget => {
(body: RichTextBody): PageLayoutWidget => {
const activeTabId = store.get(
activeTabIdComponentState.atomFamily({
instanceId: tabListInstanceId,
@@ -2,7 +2,7 @@ import {
type GridPosition,
PageLayoutTabLayoutMode,
type PageLayoutWidget,
type RichTextV2Body,
type RichTextBody,
WidgetConfigurationType,
WidgetType,
} from '~/generated-metadata/graphql';
@@ -10,7 +10,7 @@ import {
export const createDefaultStandaloneRichTextWidget = (
id: string,
pageLayoutTabId: string,
body: RichTextV2Body,
body: RichTextBody,
gridPosition: GridPosition,
objectMetadataId?: string | null,
): PageLayoutWidget => {
@@ -43,7 +43,7 @@ export const COMPOSITE_FIELD_SUB_FIELD_LABELS: {
workspaceMemberId: 'Workspace Member',
context: 'Context',
},
[FieldMetadataType.RICH_TEXT_V2]: {
[FieldMetadataType.RICH_TEXT]: {
blocknote: 'BlockNote',
markdown: 'Markdown',
},
@@ -6,7 +6,7 @@ import {
type FieldFullNameValue,
type FieldLinksValue,
type FieldPhonesValue,
type FieldRichTextV2Value,
type FieldRichTextValue,
} from '@/object-record/record-field/ui/types/FieldMetadata';
import { COMPOSITE_FIELD_SUB_FIELD_LABELS } from '@/settings/data-model/constants/CompositeFieldSubFieldLabel';
import { type SettingsFieldTypeConfig } from '@/settings/data-model/constants/SettingsNonCompositeFieldTypeConfigs';
@@ -499,17 +499,17 @@ export const SETTINGS_COMPOSITE_FIELD_TYPE_CONFIGS = {
},
],
} as const satisfies SettingsCompositeFieldTypeConfig<FieldActorValue>,
[FieldMetadataType.RICH_TEXT_V2]: {
[FieldMetadataType.RICH_TEXT]: {
label: 'Rich Text',
Icon: IllustrationIconText,
category: 'Basic',
subFields: [
{
subFieldName:
COMPOSITE_FIELD_TYPE_SUB_FIELDS_NAMES[FieldMetadataType.RICH_TEXT_V2]
COMPOSITE_FIELD_TYPE_SUB_FIELDS_NAMES[FieldMetadataType.RICH_TEXT]
.blocknote,
subFieldLabel:
COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.RICH_TEXT_V2]
COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.RICH_TEXT]
.blocknote,
isImportable: false,
isFilterable: false,
@@ -517,10 +517,10 @@ export const SETTINGS_COMPOSITE_FIELD_TYPE_CONFIGS = {
},
{
subFieldName:
COMPOSITE_FIELD_TYPE_SUB_FIELDS_NAMES[FieldMetadataType.RICH_TEXT_V2]
COMPOSITE_FIELD_TYPE_SUB_FIELDS_NAMES[FieldMetadataType.RICH_TEXT]
.markdown,
subFieldLabel:
COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.RICH_TEXT_V2]
COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.RICH_TEXT]
.markdown,
isImportable: true,
isFilterable: false,
@@ -541,5 +541,5 @@ export const SETTINGS_COMPOSITE_FIELD_TYPE_CONFIGS = {
markdown: '# Hello Again',
},
],
} as const satisfies SettingsCompositeFieldTypeConfig<FieldRichTextV2Value>,
} as const satisfies SettingsCompositeFieldTypeConfig<FieldRichTextValue>,
} as const satisfies SettingsCompositeFieldTypeConfigArray;
@@ -10,7 +10,7 @@ export const COMPOSITE_FIELD_TYPES = [
'PHONES',
'FULL_NAME',
'ACTOR',
'RICH_TEXT_V2',
'RICH_TEXT',
] as const;
type CompositeFieldTypeBaseLiteral = (typeof COMPOSITE_FIELD_TYPES)[number];
@@ -3,5 +3,5 @@ import { type PickLiteral } from '~/types/PickLiteral';
export type SettingsExcludedFieldType = PickLiteral<
FieldType,
'POSITION' | 'TS_VECTOR' | 'RICH_TEXT_V2' | 'NUMERIC'
'POSITION' | 'TS_VECTOR' | 'RICH_TEXT' | 'NUMERIC'
>;
@@ -51,10 +51,10 @@ describe('getSortIconForFieldType', () => {
).toBe(IconSortDescendingLetters);
});
it('should return IconSortAscendingLetters for RICH_TEXT_V2 field ascending', () => {
it('should return IconSortAscendingLetters for RICH_TEXT field ascending', () => {
expect(
getSortIconForFieldType({
fieldType: FieldMetadataType.RICH_TEXT_V2,
fieldType: FieldMetadataType.RICH_TEXT,
orderBy: GraphOrderBy.FIELD_ASC,
}),
).toBe(IconSortAscendingLetters);
@@ -41,7 +41,7 @@ export const useDownloadFakeRecords = () => {
break;
}
case FieldMetadataType.RICH_TEXT_V2:
case FieldMetadataType.RICH_TEXT:
case FieldMetadataType.ACTOR:
case FieldMetadataType.EMAILS:
case FieldMetadataType.CURRENCY:
@@ -22,7 +22,7 @@ type WorkflowStepFilterFieldSelectProps = {
};
const NON_SELECTABLE_FIELD_TYPES = [
FieldMetadataType.RICH_TEXT_V2,
FieldMetadataType.RICH_TEXT,
FieldMetadataType.RATING,
];
@@ -59,7 +59,7 @@ const isFilterableFieldType = (
FieldMetadataType.SELECT,
FieldMetadataType.MULTI_SELECT,
FieldMetadataType.RAW_JSON,
FieldMetadataType.RICH_TEXT_V2,
FieldMetadataType.RICH_TEXT,
FieldMetadataType.ARRAY,
FieldMetadataType.UUID,
FieldMetadataType.RELATION,
@@ -22,7 +22,7 @@ const SUPPORTED_FORM_FIELD_TYPES = [
FieldMetadataType.UUID,
FieldMetadataType.ARRAY,
FieldMetadataType.RELATION,
FieldMetadataType.RICH_TEXT_V2,
FieldMetadataType.RICH_TEXT,
];
export const shouldDisplayFormField = ({