From bbffde1ca0bf7c8f39838a50bd6a03c73cc8de71 Mon Sep 17 00:00:00 2001 From: Anoop P <44577841+anoopw3bdev@users.noreply.github.com> Date: Tue, 2 Apr 2024 18:59:57 +0530 Subject: [PATCH] New field currency (#4338) Closes #4122 --------- Co-authored-by: Lucas Bordeau --- .../apollo/components/ApolloProvider.tsx | 4 +- .../ApolloMetadataClientProvider.tsx | 1 + .../cache/utils/getRecordNodeFromRecord.ts | 76 +++++++++++-------- .../components/CurrencyFieldDisplay.tsx | 8 +- .../SettingsObjectFieldCurrencyForm.tsx | 2 +- .../display/components/CurrencyDisplay.tsx | 49 +++++++++++- .../display/components/EllipsisDisplay.tsx | 6 +- .../views/hooks/useGetViewFromCache.ts | 21 ++--- .../format/__tests__/amountFormat.test.ts | 22 +++--- .../src/utils/format/amountFormat.ts | 11 --- .../src/utils/format/formatAmount.ts | 11 +++ .../src/utils/string/lowerAndCapitalize.ts | 9 +++ 12 files changed, 145 insertions(+), 75 deletions(-) delete mode 100644 packages/twenty-front/src/utils/format/amountFormat.ts create mode 100644 packages/twenty-front/src/utils/format/formatAmount.ts create mode 100644 packages/twenty-front/src/utils/string/lowerAndCapitalize.ts diff --git a/packages/twenty-front/src/modules/apollo/components/ApolloProvider.tsx b/packages/twenty-front/src/modules/apollo/components/ApolloProvider.tsx index 21a501528..c0d771c61 100644 --- a/packages/twenty-front/src/modules/apollo/components/ApolloProvider.tsx +++ b/packages/twenty-front/src/modules/apollo/components/ApolloProvider.tsx @@ -3,7 +3,9 @@ import { ApolloProvider as ApolloProviderBase } from '@apollo/client'; import { useApolloFactory } from '@/apollo/hooks/useApolloFactory'; export const ApolloProvider = ({ children }: React.PropsWithChildren) => { - const apolloClient = useApolloFactory(); + const apolloClient = useApolloFactory({ + connectToDevTools: true, + }); // This will attach the right apollo client to Apollo Dev Tools window.__APOLLO_CLIENT__ = apolloClient; diff --git a/packages/twenty-front/src/modules/object-metadata/components/ApolloMetadataClientProvider.tsx b/packages/twenty-front/src/modules/object-metadata/components/ApolloMetadataClientProvider.tsx index e68f7555b..737811846 100644 --- a/packages/twenty-front/src/modules/object-metadata/components/ApolloMetadataClientProvider.tsx +++ b/packages/twenty-front/src/modules/object-metadata/components/ApolloMetadataClientProvider.tsx @@ -10,6 +10,7 @@ export const ApolloMetadataClientProvider = ({ }) => { const apolloMetadataClient = useApolloFactory({ uri: `${REACT_APP_SERVER_BASE_URL}/metadata`, + connectToDevTools: false, }); return ( diff --git a/packages/twenty-front/src/modules/object-record/cache/utils/getRecordNodeFromRecord.ts b/packages/twenty-front/src/modules/object-record/cache/utils/getRecordNodeFromRecord.ts index 82399a003..73b093095 100644 --- a/packages/twenty-front/src/modules/object-record/cache/utils/getRecordNodeFromRecord.ts +++ b/packages/twenty-front/src/modules/object-record/cache/utils/getRecordNodeFromRecord.ts @@ -8,6 +8,7 @@ import { getRecordConnectionFromRecords } from '@/object-record/cache/utils/getR import { ObjectRecord } from '@/object-record/types/ObjectRecord'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { isDefined } from '~/utils/isDefined'; +import { lowerAndCapitalize } from '~/utils/string/lowerAndCapitalize'; export const getRecordNodeFromRecord = ({ objectMetadataItems, @@ -92,46 +93,61 @@ export const getRecordNodeFromRecord = ({ ]; } - if (field.type === 'RELATION') { - if ( - isUndefined( + switch (field.type) { + case FieldMetadataType.Relation: { + if ( + isUndefined( + field.relationDefinition?.targetObjectMetadata.nameSingular, + ) + ) { + return undefined; + } + + if (isNull(value)) { + return [fieldName, null]; + } + + if (isUndefined(value?.id)) { + return undefined; + } + + const typeName = getObjectTypename( field.relationDefinition?.targetObjectMetadata.nameSingular, - ) - ) { - return undefined; - } + ); - if (isNull(value)) { - return [fieldName, null]; - } + if (computeReferences) { + return [ + fieldName, + { + __ref: `${typeName}:${value.id}`, + }, + ]; + } - if (isUndefined(value?.id)) { - return undefined; - } - - const typeName = getObjectTypename( - field.relationDefinition?.targetObjectMetadata.nameSingular, - ); - - if (computeReferences) { return [ fieldName, { - __ref: `${typeName}:${value.id}`, + __typename: typeName, + ...value, }, ]; } - - return [ - fieldName, - { - __typename: typeName, - ...value, - }, - ]; + case FieldMetadataType.Link: + case FieldMetadataType.Address: + case FieldMetadataType.FullName: + case FieldMetadataType.Currency: { + return [ + fieldName, + { + ...value, + __typename: lowerAndCapitalize(field.type), + }, + ]; + } + default: { + return [fieldName, value]; + } } - - return [fieldName, value]; }) .filter(isDefined), ) as T; // Todo fix typing once we have investigated apollo edges / nodes removal diff --git a/packages/twenty-front/src/modules/object-record/record-field/meta-types/display/components/CurrencyFieldDisplay.tsx b/packages/twenty-front/src/modules/object-record/record-field/meta-types/display/components/CurrencyFieldDisplay.tsx index 75e4030e5..5a17caefc 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/meta-types/display/components/CurrencyFieldDisplay.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/meta-types/display/components/CurrencyFieldDisplay.tsx @@ -5,11 +5,5 @@ import { useCurrencyField } from '../../hooks/useCurrencyField'; export const CurrencyFieldDisplay = () => { const { fieldValue } = useCurrencyField(); - return ( - - ); + return ; }; diff --git a/packages/twenty-front/src/modules/settings/data-model/components/SettingsObjectFieldCurrencyForm.tsx b/packages/twenty-front/src/modules/settings/data-model/components/SettingsObjectFieldCurrencyForm.tsx index f0afa115e..725b9a51e 100644 --- a/packages/twenty-front/src/modules/settings/data-model/components/SettingsObjectFieldCurrencyForm.tsx +++ b/packages/twenty-front/src/modules/settings/data-model/components/SettingsObjectFieldCurrencyForm.tsx @@ -23,7 +23,7 @@ export const SettingsObjectFieldCurrencyForm = ({