From e812878bc310c0b0ab2c0924bc4ae0c96fc39fe3 Mon Sep 17 00:00:00 2001 From: Jeet Desai <52026385+jeet1desai@users.noreply.github.com> Date: Wed, 17 Jan 2024 21:14:44 +0530 Subject: [PATCH] #3476 round sum total amount in board (#3484) * #3476 round sum total amount in board * Fix issues --------- Co-authored-by: Charles Bochet --- .../useObjectMetadataItemForSettings.ts | 1 + .../recordBoardColumnTotalsFamilySelector.ts | 3 +- .../format/__tests__/amountFormat.test.ts | 28 +++++++++++++++++++ .../src/utils/format/amountFormat.ts | 11 ++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 packages/twenty-front/src/utils/format/__tests__/amountFormat.test.ts create mode 100644 packages/twenty-front/src/utils/format/amountFormat.ts diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useObjectMetadataItemForSettings.ts b/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useObjectMetadataItemForSettings.ts index 017dca504..a9b8aadea 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useObjectMetadataItemForSettings.ts +++ b/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useObjectMetadataItemForSettings.ts @@ -29,6 +29,7 @@ export const variables = { updatePayload: { description: 'newDescription', icon: undefined, + labelIdentifierFieldMetadataId: null, labelPlural: 'labelPlural', labelSingular: 'labelSingular', namePlural: 'labelPlural', diff --git a/packages/twenty-front/src/modules/object-record/record-board/states/selectors/recordBoardColumnTotalsFamilySelector.ts b/packages/twenty-front/src/modules/object-record/record-board/states/selectors/recordBoardColumnTotalsFamilySelector.ts index 656c1f6b4..a03d9b935 100644 --- a/packages/twenty-front/src/modules/object-record/record-board/states/selectors/recordBoardColumnTotalsFamilySelector.ts +++ b/packages/twenty-front/src/modules/object-record/record-board/states/selectors/recordBoardColumnTotalsFamilySelector.ts @@ -1,6 +1,7 @@ import { selectorFamily } from 'recoil'; import { companyProgressesFamilyState } from '@/companies/states/companyProgressesFamilyState'; +import { amountFormat } from '~/utils/format/amountFormat'; import { recordBoardCardIdsByColumnIdFamilyState } from '../recordBoardCardIdsByColumnIdFamilyState'; @@ -26,6 +27,6 @@ export const recordBoardColumnTotalsFamilySelector = selectorFamily({ 0, ) || 0; - return pipelineStepTotal; + return amountFormat(pipelineStepTotal); }, }); diff --git a/packages/twenty-front/src/utils/format/__tests__/amountFormat.test.ts b/packages/twenty-front/src/utils/format/__tests__/amountFormat.test.ts new file mode 100644 index 000000000..7dd44186e --- /dev/null +++ b/packages/twenty-front/src/utils/format/__tests__/amountFormat.test.ts @@ -0,0 +1,28 @@ +import { amountFormat } from '../amountFormat'; + +describe('amountFormat', () => { + it('formats numbers less than 1000 correctly', () => { + expect(amountFormat(500)).toBe('500'); + expect(amountFormat(123.456)).toBe('123.5'); + }); + + it('formats numbers between 1000 and 999999 correctly', () => { + expect(amountFormat(1500)).toBe('1.5k'); + expect(amountFormat(789456)).toBe('789.5k'); + }); + + it('formats numbers between 1000000 and 999999999 correctly', () => { + expect(amountFormat(2000000)).toBe('2m'); + expect(amountFormat(654987654)).toBe('655m'); + }); + + it('formats numbers greater than or equal to 1000000000 correctly', () => { + expect(amountFormat(1200000000)).toBe('1.2b'); + expect(amountFormat(987654321987)).toBe('987.7b'); + }); + + it('handles numbers with decimal places correctly', () => { + expect(amountFormat(123.456)).toBe('123.5'); + expect(amountFormat(789.0123)).toBe('789'); + }); +}); diff --git a/packages/twenty-front/src/utils/format/amountFormat.ts b/packages/twenty-front/src/utils/format/amountFormat.ts new file mode 100644 index 000000000..b87d45515 --- /dev/null +++ b/packages/twenty-front/src/utils/format/amountFormat.ts @@ -0,0 +1,11 @@ +export const amountFormat = (number: number) => { + if (number < 1000) { + return number.toFixed(1).replace(/\.?0+$/, ''); + } else if (number < 1000000) { + return (number / 1000).toFixed(1).replace(/\.?0+$/, '') + 'k'; + } else if (number < 1000000000) { + return (number / 1000000).toFixed(1).replace(/\.?0+$/, '') + 'm'; + } else { + return (number / 1000000000).toFixed(1).replace(/\.?0+$/, '') + 'b'; + } +};