From f0ca3439a8e1d9272b72c1c31e1930433bf4d914 Mon Sep 17 00:00:00 2001 From: Lucas Bordeau Date: Fri, 2 Aug 2024 10:48:36 +0200 Subject: [PATCH] Fixed sort bug when two select values were null (#6493) Fixes https://github.com/twentyhq/twenty/issues/5762 The problem was only happening with a sort on a select type field, also appears with currency type and maybe other types. This was because NULL values were sorted in a random order because the sort function was comparing two NULL values as not equal, so I just added a case for when A === B === NULL. --- packages/twenty-front/src/utils/__tests__/sort.test.ts | 2 ++ packages/twenty-front/src/utils/sort.ts | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/twenty-front/src/utils/__tests__/sort.test.ts b/packages/twenty-front/src/utils/__tests__/sort.test.ts index 771c6aad1..9f0a4ea4f 100644 --- a/packages/twenty-front/src/utils/__tests__/sort.test.ts +++ b/packages/twenty-front/src/utils/__tests__/sort.test.ts @@ -3,6 +3,7 @@ import { sortAsc, sortDesc, sortNullsFirst, sortNullsLast } from '../sort'; describe('sort', () => { describe('sortNullsFirst', () => { it('should sort nulls first', () => { + expect(sortNullsFirst(null, null)).toBe(0); expect(sortNullsFirst(null, 'a')).toBe(-1); expect(sortNullsFirst('a', null)).toBe(1); expect(sortNullsFirst('a', 'a')).toBe(0); @@ -11,6 +12,7 @@ describe('sort', () => { describe('sortNullsLast', () => { it('should sort nulls last', () => { + expect(sortNullsFirst(null, null)).toBe(0); expect(sortNullsLast(null, 'a')).toBe(1); expect(sortNullsLast('a', null)).toBe(-1); expect(sortNullsLast('a', 'a')).toBe(0); diff --git a/packages/twenty-front/src/utils/sort.ts b/packages/twenty-front/src/utils/sort.ts index 8680cac16..bb616575d 100644 --- a/packages/twenty-front/src/utils/sort.ts +++ b/packages/twenty-front/src/utils/sort.ts @@ -3,7 +3,14 @@ import { Maybe } from '~/generated/graphql'; export const sortNullsFirst = ( fieldValueA: Maybe, fieldValueB: Maybe, -) => (fieldValueA === null ? -1 : fieldValueB === null ? 1 : 0); +) => + fieldValueA === null && fieldValueB === null + ? 0 + : fieldValueA === null + ? -1 + : fieldValueB === null + ? 1 + : 0; export const sortNullsLast = ( fieldValueA: Maybe,