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:
+1
-1
@@ -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';
|
||||
|
||||
+11
-11
@@ -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)}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -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';
|
||||
|
||||
Reference in New Issue
Block a user