Files
twenty/packages/twenty-server/src/engine/twenty-orm/utils/get-subfields-for-aggregate-operation.util.ts
T
Charles Bochet d9eb317bb5 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)
2026-03-13 19:07:55 +01:00

46 lines
1.4 KiB
TypeScript

import { FieldMetadataType } from 'twenty-shared/types';
import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util';
export const getSubfieldsForAggregateOperation = (
fieldType: FieldMetadataType,
): string[] | undefined => {
if (!isCompositeFieldMetadataType(fieldType)) {
return undefined;
} else {
switch (fieldType) {
case FieldMetadataType.CURRENCY:
return ['amountMicros', 'currencyCode'];
case FieldMetadataType.FULL_NAME:
return ['firstName', 'lastName'];
case FieldMetadataType.ADDRESS:
return [
'addressStreet1',
'addressStreet2',
'addressCity',
'addressPostcode',
'addressState',
'addressCountry',
'addressLat',
'addressLng',
];
case FieldMetadataType.LINKS:
return ['primaryLinkUrl'];
case FieldMetadataType.ACTOR:
return ['workspaceMemberId', 'source'];
case FieldMetadataType.EMAILS:
return ['primaryEmail'];
case FieldMetadataType.PHONES:
return [
'primaryPhoneNumber',
'primaryPhoneCountryCode',
'primaryPhoneCallingCode',
];
case FieldMetadataType.RICH_TEXT:
return ['blocknote', 'markdown'];
default:
throw new Error(`Unsupported composite field type: ${fieldType}`);
}
}
};