Import v2 - add label for subfield in csv export (#12355)

To test : Export companies record - "Domain Name PrimaryLinkUrl" >>
"Domain Name / Link URL"

closes https://github.com/twentyhq/core-team-issues/issues/907
This commit is contained in:
Etienne
2025-06-02 17:21:44 +02:00
committed by GitHub
parent dc205370df
commit e71aef5a3a
4 changed files with 151 additions and 54 deletions

View File

@ -0,0 +1,50 @@
import { CompositeFieldType } from '@/settings/data-model/types/CompositeFieldType';
import { FieldMetadataType } from 'twenty-shared/types';
export const COMPOSITE_FIELD_SUB_FIELD_LABELS: {
[key in CompositeFieldType]: Record<string, string>;
} = {
[FieldMetadataType.CURRENCY]: {
amountMicros: 'Amount',
currencyCode: 'Currency',
},
[FieldMetadataType.EMAILS]: {
primaryEmail: 'Primary Email',
additionalEmails: 'Additional Emails',
},
[FieldMetadataType.LINKS]: {
primaryLinkLabel: 'Link Label',
primaryLinkUrl: 'Link URL',
secondaryLinks: 'Secondary Links',
},
[FieldMetadataType.PHONES]: {
primaryPhoneNumber: 'Primary Phone Number',
primaryPhoneCountryCode: 'Primary Phone Country Code',
primaryPhoneCallingCode: 'Primary Phone Calling Code',
additionalPhones: 'Additional Phones',
},
[FieldMetadataType.FULL_NAME]: {
firstName: 'First Name',
lastName: 'Last Name',
},
[FieldMetadataType.ADDRESS]: {
addressStreet1: 'Address 1',
addressStreet2: 'Address 2',
addressCity: 'City',
addressState: 'State',
addressCountry: 'Country',
addressPostcode: 'Post Code',
addressLat: 'Latitude',
addressLng: 'Longitude',
},
[FieldMetadataType.ACTOR]: {
source: 'Source',
name: 'Name',
workspaceMemberId: 'Workspace Member ID',
context: 'Context',
},
[FieldMetadataType.RICH_TEXT_V2]: {
blocknote: 'BlockNote',
markdown: 'Markdown',
},
};

View File

@ -9,6 +9,7 @@ import {
FieldPhonesValue,
FieldRichTextV2Value,
} from '@/object-record/record-field/types/FieldMetadata';
import { COMPOSITE_FIELD_SUB_FIELD_LABELS } from '@/settings/data-model/constants/CompositeFieldSubFieldLabel';
import { SettingsFieldTypeConfig } from '@/settings/data-model/constants/SettingsNonCompositeFieldTypeConfigs';
import { CompositeFieldType } from '@/settings/data-model/types/CompositeFieldType';
import { ConnectedAccountProvider } from 'twenty-shared/types';
@ -43,8 +44,12 @@ export const SETTINGS_COMPOSITE_FIELD_TYPE_CONFIGS = {
subFields: ['amountMicros', 'currencyCode'],
filterableSubFields: ['amountMicros', 'currencyCode'],
labelBySubField: {
amountMicros: 'Amount',
currencyCode: 'Currency',
amountMicros:
COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.CURRENCY]
.amountMicros,
currencyCode:
COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.CURRENCY]
.currencyCode,
},
exampleValue: {
amountMicros: 2000000000,
@ -87,9 +92,15 @@ export const SETTINGS_COMPOSITE_FIELD_TYPE_CONFIGS = {
'secondaryLinks',
],
labelBySubField: {
primaryLinkUrl: 'Link URL',
primaryLinkLabel: 'Link Label',
secondaryLinks: 'Secondary Links',
primaryLinkUrl:
COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.LINKS]
.primaryLinkUrl,
primaryLinkLabel:
COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.LINKS]
.primaryLinkLabel,
secondaryLinks:
COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.LINKS]
.secondaryLinks,
},
} as const satisfies SettingsCompositeFieldTypeConfig<FieldLinksValue>,
[FieldMetadataType.PHONES]: {
@ -115,10 +126,18 @@ export const SETTINGS_COMPOSITE_FIELD_TYPE_CONFIGS = {
'additionalPhones',
],
labelBySubField: {
primaryPhoneNumber: 'Primary Phone Number',
primaryPhoneCountryCode: 'Primary Phone Country Code',
primaryPhoneCallingCode: 'Primary Phone Calling Code',
additionalPhones: 'Additional Phones',
primaryPhoneNumber:
COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.PHONES]
.primaryPhoneNumber,
primaryPhoneCountryCode:
COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.PHONES]
.primaryPhoneCountryCode,
primaryPhoneCallingCode:
COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.PHONES]
.primaryPhoneCallingCode,
additionalPhones:
COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.PHONES]
.additionalPhones,
},
category: 'Basic',
} as const satisfies SettingsCompositeFieldTypeConfig<FieldPhonesValue>,
@ -130,8 +149,10 @@ export const SETTINGS_COMPOSITE_FIELD_TYPE_CONFIGS = {
subFields: ['firstName', 'lastName'],
filterableSubFields: ['firstName', 'lastName'],
labelBySubField: {
firstName: 'First Name',
lastName: 'Last Name',
firstName:
COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.FULL_NAME].firstName,
lastName:
COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.FULL_NAME].lastName,
},
} as const satisfies SettingsCompositeFieldTypeConfig<FieldFullNameValue>,
[FieldMetadataType.ADDRESS]: {
@ -156,14 +177,27 @@ export const SETTINGS_COMPOSITE_FIELD_TYPE_CONFIGS = {
'addressPostcode',
],
labelBySubField: {
addressStreet1: 'Address 1',
addressStreet2: 'Address 2',
addressCity: 'City',
addressState: 'State',
addressCountry: 'Country',
addressPostcode: 'Post Code',
addressLat: 'Latitude',
addressLng: 'Longitude',
addressStreet1:
COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.ADDRESS]
.addressStreet1,
addressStreet2:
COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.ADDRESS]
.addressStreet2,
addressCity:
COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.ADDRESS].addressCity,
addressState:
COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.ADDRESS]
.addressState,
addressCountry:
COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.ADDRESS]
.addressCountry,
addressPostcode:
COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.ADDRESS]
.addressPostcode,
addressLat:
COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.ADDRESS].addressLat,
addressLng:
COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.ADDRESS].addressLng,
},
exampleValue: {
addressStreet1: '456 Oak Street',
@ -184,10 +218,13 @@ export const SETTINGS_COMPOSITE_FIELD_TYPE_CONFIGS = {
subFields: ['source', 'name'],
filterableSubFields: ['source', 'name'],
labelBySubField: {
source: 'Source',
name: 'Name',
workspaceMemberId: 'Workspace Member ID',
context: 'Context',
source: COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.ACTOR].source,
name: COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.ACTOR].name,
workspaceMemberId:
COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.ACTOR]
.workspaceMemberId,
context:
COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.ACTOR].context,
},
exampleValue: {
source: 'IMPORT',
@ -202,8 +239,12 @@ export const SETTINGS_COMPOSITE_FIELD_TYPE_CONFIGS = {
subFields: ['blocknote', 'markdown'],
filterableSubFields: [],
labelBySubField: {
blocknote: 'BlockNote',
markdown: 'Markdown',
blocknote:
COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.RICH_TEXT_V2]
.blocknote,
markdown:
COMPOSITE_FIELD_SUB_FIELD_LABELS[FieldMetadataType.RICH_TEXT_V2]
.markdown,
},
exampleValue: {
blocknote: '[{"type":"heading","content":"Hello"}]',