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
@@ -2,7 +2,7 @@ import { FieldMetadataType } from '@/types';
import { isFieldMetadataTextKind } from '../isFieldMetadataTextKind';
describe('isFieldMetadataTextKind', () => {
it.each([FieldMetadataType.TEXT, FieldMetadataType.RICH_TEXT_V2])(
it.each([FieldMetadataType.TEXT, FieldMetadataType.RICH_TEXT])(
'should return true for %s',
(type) => {
expect(isFieldMetadataTextKind(type)).toBe(true);
@@ -2,7 +2,7 @@ import { FieldMetadataType } from '@/types';
const TEXT_FIELD_TYPES: FieldMetadataType[] = [
FieldMetadataType.TEXT,
FieldMetadataType.RICH_TEXT_V2,
FieldMetadataType.RICH_TEXT,
];
export const isFieldMetadataTextKind = (
@@ -24,7 +24,7 @@ export * from './utils/isMatchingFloatFilter';
export * from './utils/isMatchingMultiSelectFilter';
export * from './utils/isMatchingRatingFilter';
export * from './utils/isMatchingRawJsonFilter';
export * from './utils/isMatchingRichTextV2Filter';
export * from './utils/isMatchingRichTextFilter';
export * from './utils/isMatchingSelectFilter';
export * from './utils/isMatchingStringFilter';
export * from './utils/isMatchingTSVectorFilter';
@@ -1,11 +1,11 @@
import { isMatchingRichTextV2Filter } from '@/utils/filter/utils/isMatchingRichTextV2Filter';
import { isMatchingRichTextFilter } from '@/utils/filter/utils/isMatchingRichTextFilter';
describe('isMatchingRichTextV2Filter', () => {
describe('isMatchingRichTextFilter', () => {
describe('markdown ilike', () => {
it('should match with wildcard pattern', () => {
expect(
isMatchingRichTextV2Filter({
richTextV2Filter: { markdown: { ilike: '%hello%' } },
isMatchingRichTextFilter({
richTextFilter: { markdown: { ilike: '%hello%' } },
value: 'say hello world',
}),
).toBe(true);
@@ -13,8 +13,8 @@ describe('isMatchingRichTextV2Filter', () => {
it('should not match when pattern does not match', () => {
expect(
isMatchingRichTextV2Filter({
richTextV2Filter: { markdown: { ilike: '%goodbye%' } },
isMatchingRichTextFilter({
richTextFilter: { markdown: { ilike: '%goodbye%' } },
value: 'say hello world',
}),
).toBe(false);
@@ -22,8 +22,8 @@ describe('isMatchingRichTextV2Filter', () => {
it('should be case insensitive', () => {
expect(
isMatchingRichTextV2Filter({
richTextV2Filter: { markdown: { ilike: '%HELLO%' } },
isMatchingRichTextFilter({
richTextFilter: { markdown: { ilike: '%HELLO%' } },
value: 'say hello world',
}),
).toBe(true);
@@ -33,11 +33,11 @@ describe('isMatchingRichTextV2Filter', () => {
describe('default', () => {
it('should throw for unexpected filter', () => {
expect(() =>
isMatchingRichTextV2Filter({
richTextV2Filter: {} as any,
isMatchingRichTextFilter({
richTextFilter: {} as any,
value: 'test',
}),
).toThrow('Unexpected value for RICH_TEXT_V2 filter');
).toThrow('Unexpected value for RICH_TEXT filter');
});
});
});
@@ -0,0 +1,25 @@
import { type RichTextFilter } from '@/types';
import escapeRegExp from 'lodash.escaperegexp';
export const isMatchingRichTextFilter = ({
richTextFilter,
value,
}: {
richTextFilter: RichTextFilter;
value: string;
}) => {
switch (true) {
case richTextFilter.markdown !== undefined: {
const escapedPattern = escapeRegExp(richTextFilter.markdown.ilike);
const regexPattern = escapedPattern.replace(/%/g, '.*');
const regexCaseInsensitive = new RegExp(`^${regexPattern}$`, 'i');
return regexCaseInsensitive.test(value);
}
default: {
throw new Error(
`Unexpected value for RICH_TEXT filter : ${JSON.stringify(richTextFilter)}`,
);
}
}
};
@@ -1,25 +0,0 @@
import { type RichTextV2Filter } from '@/types';
import escapeRegExp from 'lodash.escaperegexp';
export const isMatchingRichTextV2Filter = ({
richTextV2Filter,
value,
}: {
richTextV2Filter: RichTextV2Filter;
value: string;
}) => {
switch (true) {
case richTextV2Filter.markdown !== undefined: {
const escapedPattern = escapeRegExp(richTextV2Filter.markdown.ilike);
const regexPattern = escapedPattern.replace(/%/g, '.*');
const regexCaseInsensitive = new RegExp(`^${regexPattern}$`, 'i');
return regexCaseInsensitive.test(value);
}
default: {
throw new Error(
`Unexpected value for RICH_TEXT_V2 filter : ${JSON.stringify(richTextV2Filter)}`,
);
}
}
};
+1 -1
View File
@@ -117,7 +117,7 @@ export { isMatchingFloatFilter } from './filter/utils/isMatchingFloatFilter';
export { isMatchingMultiSelectFilter } from './filter/utils/isMatchingMultiSelectFilter';
export { isMatchingRatingFilter } from './filter/utils/isMatchingRatingFilter';
export { isMatchingRawJsonFilter } from './filter/utils/isMatchingRawJsonFilter';
export { isMatchingRichTextV2Filter } from './filter/utils/isMatchingRichTextV2Filter';
export { isMatchingRichTextFilter } from './filter/utils/isMatchingRichTextFilter';
export { isMatchingSelectFilter } from './filter/utils/isMatchingSelectFilter';
export { isMatchingStringFilter } from './filter/utils/isMatchingStringFilter';
export { isMatchingTSVectorFilter } from './filter/utils/isMatchingTSVectorFilter';