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:
+3
-3
@@ -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),
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
+9
-9
@@ -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 = {
|
||||
+5
-5
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user