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
@@ -172,11 +172,11 @@ exports[`DataArgProcessorService failing inputs validation RELATION should throw
exports[`DataArgProcessorService failing inputs validation RELATION should throw for invalid input #5: "non-uuid" 1`] = `"Invalid UUID value 'non-uuid' for field "manyToOneRelationFieldId""`;
exports[`DataArgProcessorService failing inputs validation RICH_TEXT_V2 should throw for invalid input #1: "not-a-rich-text" 1`] = `"Invalid rich text v2 value 'not-a-rich-text' for field "richTextV2Field" - Should be an object"`;
exports[`DataArgProcessorService failing inputs validation RICH_TEXT should throw for invalid input #1: "not-a-rich-text" 1`] = `"Invalid rich text v2 value 'not-a-rich-text' for field "richTextField" - Should be an object"`;
exports[`DataArgProcessorService failing inputs validation RICH_TEXT_V2 should throw for invalid input #2: 1 1`] = `"Invalid rich text v2 value 1 for field "richTextV2Field" - Should be an object"`;
exports[`DataArgProcessorService failing inputs validation RICH_TEXT should throw for invalid input #2: 1 1`] = `"Invalid rich text v2 value 1 for field "richTextField" - Should be an object"`;
exports[`DataArgProcessorService failing inputs validation RICH_TEXT_V2 should throw for invalid input #3: true 1`] = `"Invalid rich text v2 value true for field "richTextV2Field" - Should be an object"`;
exports[`DataArgProcessorService failing inputs validation RICH_TEXT should throw for invalid input #3: true 1`] = `"Invalid rich text v2 value true for field "richTextField" - Should be an object"`;
exports[`DataArgProcessorService failing inputs validation SELECT should throw for invalid input #1: "not-a-select-option" 1`] = `"Invalid value 'not-a-select-option' for field "selectField""`;
@@ -150,10 +150,10 @@ export const failingInputsByFieldMetadataType: {
{ input: { linksField: 1 } },
{ input: { linksField: true } },
],
[FieldMetadataType.RICH_TEXT_V2]: [
{ input: { richTextV2Field: 'not-a-rich-text' } },
{ input: { richTextV2Field: 1 } },
{ input: { richTextV2Field: true } },
[FieldMetadataType.RICH_TEXT]: [
{ input: { richTextField: 'not-a-rich-text' } },
{ input: { richTextField: 1 } },
{ input: { richTextField: true } },
],
[FieldMetadataType.POSITION]: [
{ input: { position: 'not-a-position' } },
@@ -134,9 +134,9 @@ export const fieldMetadataConfigByFieldName: Record<
type: FieldMetadataType.LINKS,
isNullable: true,
},
richTextV2Field: {
name: 'richTextV2Field',
type: FieldMetadataType.RICH_TEXT_V2,
richTextField: {
name: 'richTextField',
type: FieldMetadataType.RICH_TEXT,
isNullable: true,
},
position: {
@@ -383,16 +383,16 @@ export const successfulInputsByFieldMetadataType: {
},
{ input: { linksField: null }, expectedOutput: { linksField: null } },
],
[FieldMetadataType.RICH_TEXT_V2]: [
[FieldMetadataType.RICH_TEXT]: [
{
input: { richTextV2Field: { blocknote: 'test', markdown: 'test' } },
input: { richTextField: { blocknote: 'test', markdown: 'test' } },
expectedOutput: {
richTextV2Field: { blocknote: 'test', markdown: 'test' },
richTextField: { blocknote: 'test', markdown: 'test' },
},
},
{
input: { richTextV2Field: null },
expectedOutput: { richTextV2Field: null },
input: { richTextField: null },
expectedOutput: { richTextField: null },
},
],
[FieldMetadataType.POSITION]: [
@@ -16,9 +16,9 @@ import { successfulInputsByFieldMetadataType } from './constants/successful-inpu
// Mock the rich text v2 transformation to avoid BlockNote module issues
jest.mock(
'src/engine/core-modules/record-transformer/utils/transform-rich-text-v2.util',
'src/engine/core-modules/record-transformer/utils/transform-rich-text.util',
() => ({
transformRichTextV2Value: jest.fn().mockImplementation((value) => value),
transformRichTextValue: jest.fn().mockImplementation((value) => value),
}),
);
@@ -44,7 +44,7 @@ const DEFAULT_ACTOR_FIELD_NULL_EQUIVALENT_VALUE = {
name: DEFAULT_TEXT_FIELD_NULL_EQUIVALENT_VALUE,
};
const DEFAULT_RICH_TEXT_V2_FIELD_NULL_EQUIVALENT_VALUE = {
const DEFAULT_RICH_TEXT_FIELD_NULL_EQUIVALENT_VALUE = {
markdown: DEFAULT_TEXT_FIELD_NULL_EQUIVALENT_VALUE,
};
@@ -57,6 +57,5 @@ export const DEFAULT_COMPOSITE_FIELDS_NULL_EQUIVALENT_VALUE: Partial<
[FieldMetadataType.PHONES]: DEFAULT_PHONES_FIELD_NULL_EQUIVALENT_VALUE,
[FieldMetadataType.FULL_NAME]: DEFAULT_FULL_NAME_FIELD_NULL_EQUIVALENT_VALUE,
[FieldMetadataType.ACTOR]: DEFAULT_ACTOR_FIELD_NULL_EQUIVALENT_VALUE,
[FieldMetadataType.RICH_TEXT_V2]:
DEFAULT_RICH_TEXT_V2_FIELD_NULL_EQUIVALENT_VALUE,
[FieldMetadataType.RICH_TEXT]: DEFAULT_RICH_TEXT_FIELD_NULL_EQUIVALENT_VALUE,
};
@@ -41,7 +41,7 @@ import { validateOverriddenPositionFieldOrThrow } from 'src/engine/api/common/co
import { validatePhonesFieldOrThrow } from 'src/engine/api/common/common-args-processors/data-arg-processor/validator-utils/validate-phones-field-or-throw.util';
import { validateRatingAndSelectFieldOrThrow } from 'src/engine/api/common/common-args-processors/data-arg-processor/validator-utils/validate-rating-and-select-field-or-throw.util';
import { validateRawJsonFieldOrThrow } from 'src/engine/api/common/common-args-processors/data-arg-processor/validator-utils/validate-raw-json-field-or-throw.util';
import { validateRichTextV2FieldOrThrow } from 'src/engine/api/common/common-args-processors/data-arg-processor/validator-utils/validate-rich-text-v2-field-or-throw.util';
import { validateRichTextFieldOrThrow } from 'src/engine/api/common/common-args-processors/data-arg-processor/validator-utils/validate-rich-text-field-or-throw.util';
import { validateTextFieldOrThrow } from 'src/engine/api/common/common-args-processors/data-arg-processor/validator-utils/validate-text-field-or-throw.util';
import { validateUUIDFieldOrThrow } from 'src/engine/api/common/common-args-processors/data-arg-processor/validator-utils/validate-uuid-field-or-throw.util';
import {
@@ -54,7 +54,7 @@ import { RecordPositionService } from 'src/engine/core-modules/record-position/s
import { transformEmailsValue } from 'src/engine/core-modules/record-transformer/utils/transform-emails-value.util';
import { transformLinksValue } from 'src/engine/core-modules/record-transformer/utils/transform-links-value.util';
import { transformPhonesValue } from 'src/engine/core-modules/record-transformer/utils/transform-phones-value.util';
import { transformRichTextV2Value } from 'src/engine/core-modules/record-transformer/utils/transform-rich-text-v2.util';
import { transformRichTextValue } from 'src/engine/core-modules/record-transformer/utils/transform-rich-text.util';
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
import { FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type';
import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util';
@@ -302,10 +302,10 @@ export class DataArgProcessorService {
return transformActorField(validatedValue);
}
case FieldMetadataType.RICH_TEXT_V2: {
const validatedValue = validateRichTextV2FieldOrThrow(value, key);
case FieldMetadataType.RICH_TEXT: {
const validatedValue = validateRichTextFieldOrThrow(value, key);
return await transformRichTextV2Value(validatedValue);
return await transformRichTextValue(validatedValue);
}
case FieldMetadataType.LINKS: {
const validatedValue = validateLinksFieldOrThrow(value, key);
@@ -171,12 +171,12 @@ describe('findPostgresDefaultNullEquivalentValue', () => {
});
});
describe('RICH_TEXT_V2', () => {
describe('RICH_TEXT', () => {
it('should return json default for blocknote', () => {
expect(
findPostgresDefaultNullEquivalentValue(
{},
FieldMetadataType.RICH_TEXT_V2,
FieldMetadataType.RICH_TEXT,
'blocknote',
),
).toBe(undefined);
@@ -186,7 +186,7 @@ describe('findPostgresDefaultNullEquivalentValue', () => {
expect(
findPostgresDefaultNullEquivalentValue(
'',
FieldMetadataType.RICH_TEXT_V2,
FieldMetadataType.RICH_TEXT,
'markdown',
),
).toBe(POSTGRES_DEFAULT_TEXT_FIELD_NULL_EQUIVALENT_VALUE);
@@ -117,7 +117,7 @@ export const findPostgresDefaultNullEquivalentValue = (
return undefined;
}
}
case FieldMetadataType.RICH_TEXT_V2: {
case FieldMetadataType.RICH_TEXT: {
switch (key) {
case 'markdown':
return isNullEquivalentTextFieldValue(value) || value === 'NULL'
@@ -1,16 +1,16 @@
import { validateRichTextV2FieldOrThrow } from 'src/engine/api/common/common-args-processors/data-arg-processor/validator-utils/validate-rich-text-v2-field-or-throw.util';
import { validateRichTextFieldOrThrow } from 'src/engine/api/common/common-args-processors/data-arg-processor/validator-utils/validate-rich-text-field-or-throw.util';
import { CommonQueryRunnerException } from 'src/engine/api/common/common-query-runners/errors/common-query-runner.exception';
describe('validateRichTextV2FieldOrThrow', () => {
describe('validateRichTextFieldOrThrow', () => {
describe('valid inputs', () => {
it('should return null when value is null', () => {
const result = validateRichTextV2FieldOrThrow(null, 'testField');
const result = validateRichTextFieldOrThrow(null, 'testField');
expect(result).toBeNull();
});
it('should return null when value is an empty object', () => {
const result = validateRichTextV2FieldOrThrow({}, 'testField');
const result = validateRichTextFieldOrThrow({}, 'testField');
expect(result).toBeNull();
});
@@ -20,7 +20,7 @@ describe('validateRichTextV2FieldOrThrow', () => {
blocknote: 'some blocknote content',
markdown: '# Heading\nContent',
};
const result = validateRichTextV2FieldOrThrow(value, 'testField');
const result = validateRichTextFieldOrThrow(value, 'testField');
expect(result).toEqual(value);
});
@@ -29,23 +29,23 @@ describe('validateRichTextV2FieldOrThrow', () => {
describe('invalid inputs', () => {
it('should throw when value is undefined', () => {
expect(() =>
validateRichTextV2FieldOrThrow(undefined, 'testField'),
validateRichTextFieldOrThrow(undefined, 'testField'),
).toThrow(CommonQueryRunnerException);
});
it('should throw when value is a string', () => {
expect(() =>
validateRichTextV2FieldOrThrow('not an object', 'testField'),
validateRichTextFieldOrThrow('not an object', 'testField'),
).toThrow(CommonQueryRunnerException);
});
it('should throw when value has invalid subfields', () => {
const value = { invalidField: 'value' };
expect(() => validateRichTextV2FieldOrThrow(value, 'testField')).toThrow(
expect(() => validateRichTextFieldOrThrow(value, 'testField')).toThrow(
CommonQueryRunnerException,
);
expect(() => validateRichTextV2FieldOrThrow(value, 'testField')).toThrow(
expect(() => validateRichTextFieldOrThrow(value, 'testField')).toThrow(
/Should have only blocknote, markdown subfields/,
);
});
@@ -12,7 +12,7 @@ import {
CommonQueryRunnerExceptionCode,
} from 'src/engine/api/common/common-query-runners/errors/common-query-runner.exception';
export const validateRichTextV2FieldOrThrow = (
export const validateRichTextFieldOrThrow = (
value: unknown,
fieldName: string,
): {
@@ -29,16 +29,16 @@ export const validateRichTextV2FieldOrThrow = (
if (Object.keys(parsedValue).length === 0) return null;
const subfields = Object.keys(parsedValue);
const richTextV2Subfields = compositeTypeDefinitions
.get(FieldMetadataType.RICH_TEXT_V2)
const richTextSubfields = compositeTypeDefinitions
.get(FieldMetadataType.RICH_TEXT)
?.properties.filter(
(prop) => prop.hidden !== true && prop.hidden !== 'input',
)
.map((prop) => prop.name);
if (!subfields.every((subfield) => richTextV2Subfields?.includes(subfield)))
if (!subfields.every((subfield) => richTextSubfields?.includes(subfield)))
throw new Error(
`Should have only ${richTextV2Subfields?.join(', ')} subfields`,
`Should have only ${richTextSubfields?.join(', ')} subfields`,
);
return value as {
@@ -140,9 +140,9 @@ exports[`FilterArgProcessorService failing filter inputs validation RELATION sho
exports[`FilterArgProcessorService failing filter inputs validation RELATION should throw for invalid filter #3: {"manyToOneRelationFieldId":{}} 1`] = `"Filter for field "manyToOneRelationFieldId" must have exactly one operator"`;
exports[`FilterArgProcessorService failing filter inputs validation RICH_TEXT_V2 should throw for invalid filter #1: {"richTextV2Field":{"invalidOperator":"test"}} 1`] = `"Sub field "invalidOperator" not found for composite type: RICH_TEXT_V2"`;
exports[`FilterArgProcessorService failing filter inputs validation RICH_TEXT should throw for invalid filter #1: {"richTextField":{"invalidOperator":"test"}} 1`] = `"Sub field "invalidOperator" not found for composite type: RICH_TEXT"`;
exports[`FilterArgProcessorService failing filter inputs validation RICH_TEXT_V2 should throw for invalid filter #2: {"richTextV2Field":{"markdown":{"invalidOperator":"test"}}} 1`] = `"Operator "invalidOperator" is not valid for field "richTextV2Field.markdown" of type TEXT - Allowed operators: eq, neq, gt, gte, lt, lte, in, is, like, ilike, startsWith, endsWith"`;
exports[`FilterArgProcessorService failing filter inputs validation RICH_TEXT should throw for invalid filter #2: {"richTextField":{"markdown":{"invalidOperator":"test"}}} 1`] = `"Operator "invalidOperator" is not valid for field "richTextField.markdown" of type TEXT - Allowed operators: eq, neq, gt, gte, lt, lte, in, is, like, ilike, startsWith, endsWith"`;
exports[`FilterArgProcessorService failing filter inputs validation SELECT should throw for invalid filter #1: {"selectField":{"invalidOperator":"OPTION_1"}} 1`] = `"Operator "invalidOperator" is not valid for field "selectField" of type SELECT - Allowed operators: eq, neq, in, containsAny, is, isEmptyArray"`;
@@ -116,9 +116,9 @@ export const failingFilterInputsByFieldMetadataType: {
{ filter: { filesField: { invalidOperator: 'test' } } },
{ filter: { filesField: {} } },
],
[FieldMetadataType.RICH_TEXT_V2]: [
{ filter: { richTextV2Field: { invalidOperator: 'test' } } },
{ filter: { richTextV2Field: { markdown: { invalidOperator: 'test' } } } },
[FieldMetadataType.RICH_TEXT]: [
{ filter: { richTextField: { invalidOperator: 'test' } } },
{ filter: { richTextField: { markdown: { invalidOperator: 'test' } } } },
],
[FieldMetadataType.ADDRESS]: [
{ filter: { addressField: { invalidSubField: { eq: 'test' } } } },
@@ -190,8 +190,8 @@ export const successfulFilterInputsByFieldMetadataType: {
{ filter: { filesField: { is: 'NOT_NULL' } } },
{ filter: { filesField: { like: '%test%' } } },
],
[FieldMetadataType.RICH_TEXT_V2]: [
{ filter: { richTextV2Field: { markdown: { ilike: '%test%' } } } },
[FieldMetadataType.RICH_TEXT]: [
{ filter: { richTextField: { markdown: { ilike: '%test%' } } } },
],
[FieldMetadataType.ADDRESS]: [
{ filter: { addressField: { addressCity: { eq: 'Paris' } } } },
@@ -73,4 +73,4 @@ export const ENUM_FILTER_OPERATORS: FilterOperator[] = [
export const RAW_JSON_FILTER_OPERATORS: FilterOperator[] = ['is', 'like'];
export const RICH_TEXT_V2_FILTER_OPERATORS: FilterOperator[] = ['ilike'];
export const RICH_TEXT_FILTER_OPERATORS: FilterOperator[] = ['ilike'];
@@ -9,7 +9,7 @@ import {
MULTI_SELECT_FILTER_OPERATORS,
NUMBER_FILTER_OPERATORS,
RAW_JSON_FILTER_OPERATORS,
RICH_TEXT_V2_FILTER_OPERATORS,
RICH_TEXT_FILTER_OPERATORS,
STRING_FILTER_OPERATORS,
UUID_FILTER_OPERATORS,
} from 'src/engine/api/common/common-args-processors/filter-arg-processor/constants/filter-operators.constant';
@@ -53,8 +53,8 @@ export const getOperatorsForFieldType = (
case FieldMetadataType.FILES:
return RAW_JSON_FILTER_OPERATORS;
case FieldMetadataType.RICH_TEXT_V2:
return RICH_TEXT_V2_FILTER_OPERATORS;
case FieldMetadataType.RICH_TEXT:
return RICH_TEXT_FILTER_OPERATORS;
case FieldMetadataType.TS_VECTOR:
case FieldMetadataType.ACTOR:
@@ -11,7 +11,7 @@ import { type QueryResultFieldValue } from 'src/engine/api/graphql/workspace-que
import { type QueryResultGetterHandlerInterface } from 'src/engine/api/graphql/workspace-query-runner/factories/query-result-getters/interfaces/query-result-getter-handler.interface';
import { FilesFieldQueryResultGetterHandler } from 'src/engine/api/common/common-result-getters/handlers/field-handlers/files-field-query-result-getter.handler';
import { RichTextV2FieldQueryResultGetterHandler } from 'src/engine/api/common/common-result-getters/handlers/field-handlers/rich-text-v2-field-query-result-getter.handler';
import { RichTextFieldQueryResultGetterHandler } from 'src/engine/api/common/common-result-getters/handlers/field-handlers/rich-text-field-query-result-getter.handler';
import { AttachmentQueryResultGetterHandler } from 'src/engine/api/graphql/workspace-query-runner/factories/query-result-getters/handlers/attachment-query-result-getter.handler';
import { PersonQueryResultGetterHandler } from 'src/engine/api/graphql/workspace-query-runner/factories/query-result-getters/handlers/person-query-result-getter.handler';
import { WorkspaceMemberQueryResultGetterHandler } from 'src/engine/api/graphql/workspace-query-runner/factories/query-result-getters/handlers/workspace-member-query-result-getter.handler';
@@ -68,8 +68,8 @@ export class CommonResultGettersService {
new FilesFieldQueryResultGetterHandler(this.fileUrlService),
],
[
FieldMetadataType.RICH_TEXT_V2,
new RichTextV2FieldQueryResultGetterHandler(this.fileUrlService),
FieldMetadataType.RICH_TEXT,
new RichTextFieldQueryResultGetterHandler(this.fileUrlService),
],
]);
}
@@ -1,6 +1,6 @@
import { FieldMetadataType, type ObjectRecord } from 'twenty-shared/types';
import { RichTextV2FieldQueryResultGetterHandler } from 'src/engine/api/common/common-result-getters/handlers/field-handlers/rich-text-v2-field-query-result-getter.handler';
import { RichTextFieldQueryResultGetterHandler } from 'src/engine/api/common/common-result-getters/handlers/field-handlers/rich-text-field-query-result-getter.handler';
import { type FileUrlService } from 'src/engine/core-modules/file/file-url/file-url.service';
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
@@ -13,7 +13,7 @@ const baseRecord: ObjectRecord = {
const richTextFieldMetadata = [
{
type: FieldMetadataType.RICH_TEXT_V2,
type: FieldMetadataType.RICH_TEXT,
name: 'bodyV2',
},
] as FlatFieldMetadata[];
@@ -23,12 +23,12 @@ const mockFileUrlService = {
signFileByIdUrl: jest.fn().mockReturnValue('signed-path'),
} as unknown as FileUrlService;
describe('RichTextV2FieldQueryResultGetterHandler', () => {
let handler: RichTextV2FieldQueryResultGetterHandler;
describe('RichTextFieldQueryResultGetterHandler', () => {
let handler: RichTextFieldQueryResultGetterHandler;
beforeEach(() => {
process.env.SERVER_URL = 'https://my-domain.twenty.com';
handler = new RichTextV2FieldQueryResultGetterHandler(mockFileUrlService);
handler = new RichTextFieldQueryResultGetterHandler(mockFileUrlService);
});
afterEach(() => {
@@ -37,7 +37,7 @@ describe('RichTextV2FieldQueryResultGetterHandler', () => {
});
describe('should return record unchanged', () => {
it('when no RICH_TEXT_V2 field metadata is present', async () => {
it('when no RICH_TEXT field metadata is present', async () => {
const record = {
...baseRecord,
bodyV2: { blocknote: '[]', markdown: null },
@@ -156,11 +156,11 @@ describe('RichTextV2FieldQueryResultGetterHandler', () => {
});
});
describe('should handle multiple RICH_TEXT_V2 fields', () => {
describe('should handle multiple RICH_TEXT fields', () => {
it('when record has multiple rich text fields', async () => {
const multiFieldMetadata = [
{ type: FieldMetadataType.RICH_TEXT_V2, name: 'bodyV2' },
{ type: FieldMetadataType.RICH_TEXT_V2, name: 'description' },
{ type: FieldMetadataType.RICH_TEXT, name: 'bodyV2' },
{ type: FieldMetadataType.RICH_TEXT, name: 'description' },
] as FlatFieldMetadata[];
const record = {
@@ -30,7 +30,7 @@ const parseBlocknoteJsonSafely = (
}
};
export class RichTextV2FieldQueryResultGetterHandler
export class RichTextFieldQueryResultGetterHandler
implements QueryResultGetterHandlerInterface
{
constructor(private readonly fileUrlService: FileUrlService) {}
@@ -40,15 +40,15 @@ export class RichTextV2FieldQueryResultGetterHandler
workspaceId: string,
flatFieldMetadata: FlatFieldMetadata[],
): Promise<ObjectRecord> {
const richTextV2Fields = flatFieldMetadata.filter(
(field) => field.type === FieldMetadataType.RICH_TEXT_V2,
const richTextFields = flatFieldMetadata.filter(
(field) => field.type === FieldMetadataType.RICH_TEXT,
);
if (richTextV2Fields.length === 0) {
if (richTextFields.length === 0) {
return record;
}
for (const field of richTextV2Fields) {
for (const field of richTextFields) {
const fieldValue = record[field.name];
const blocknoteJson = fieldValue?.blocknote;
@@ -1,7 +1,7 @@
import { GraphQLInputObjectType, GraphQLString } from 'graphql';
const richTextV2LeafFilter = new GraphQLInputObjectType({
name: 'RichTextV2LeafFilter',
const richTextLeafFilter = new GraphQLInputObjectType({
name: 'RichTextLeafFilter',
fields: {
ilike: {
type: GraphQLString,
@@ -10,10 +10,10 @@ const richTextV2LeafFilter = new GraphQLInputObjectType({
},
});
export const RichTextV2FilterType = new GraphQLInputObjectType({
name: 'RichTextV2Filter',
export const RichTextFilterType = new GraphQLInputObjectType({
name: 'RichTextFilter',
fields: {
blocknote: { type: richTextV2LeafFilter },
markdown: { type: richTextV2LeafFilter },
blocknote: { type: richTextLeafFilter },
markdown: { type: richTextLeafFilter },
},
});
@@ -33,7 +33,7 @@ import {
} from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/input';
import { FilesInputType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/input/files.input-type';
import { MultiSelectFilterType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/input/multi-select-filter.input-type';
import { RichTextV2FilterType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/input/rich-text.input-type';
import { RichTextFilterType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/input/rich-text.input-type';
import { SelectFilterType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/input/select-filter.input-type';
import { TSVectorFilterType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/input/ts-vector-filter.input-type';
import { UUIDFilterType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/input/uuid-filter.input-type';
@@ -178,7 +178,7 @@ export class TypeMapperService {
[FieldMetadataType.POSITION, FloatFilterType],
[FieldMetadataType.FILES, RawJsonFilterType],
[FieldMetadataType.RAW_JSON, RawJsonFilterType],
[FieldMetadataType.RICH_TEXT_V2, RichTextV2FilterType],
[FieldMetadataType.RICH_TEXT, RichTextFilterType],
[FieldMetadataType.ARRAY, ArrayFilterType],
[FieldMetadataType.MULTI_SELECT, MultiSelectFilterType],
[FieldMetadataType.SELECT, SelectFilterType],