From 14b61fc8619690866bfdbabf221b21c24d8e6481 Mon Sep 17 00:00:00 2001 From: Trevor Swanson <83826109+trevorswanson@users.noreply.github.com> Date: Sun, 11 Feb 2024 08:53:44 -0500 Subject: [PATCH] =?UTF-8?q?=F0=9F=96=8C=EF=B8=8F=20style:=20Update=20conve?= =?UTF-8?q?rsation=20history=20groups=20(#1770)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * style: Add month groups to conversation history * style: Change "Last x days" to "Previous x days" to match ChatGPT * style: Add "Yesterday" to conversation groups to match ChatGPT * fix: use startOfDay for Yesterday conversation group * fix: Output month name instead of number in conversation group name * test: Validate new conversation groups are created properly * fix: Formatting of month category string was wrong --- client/src/utils/convos.spec.ts | 11 ++++++++++- client/src/utils/convos.ts | 22 +++++++++++++++++++--- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/client/src/utils/convos.spec.ts b/client/src/utils/convos.spec.ts index 1d21d8654c..4541544253 100644 --- a/client/src/utils/convos.spec.ts +++ b/client/src/utils/convos.spec.ts @@ -15,12 +15,21 @@ describe('Conversation Utilities', () => { const conversations = [ { conversationId: '1', updatedAt: '2023-04-01T12:00:00Z' }, { conversationId: '2', updatedAt: new Date().toISOString() }, + { conversationId: '3', updatedAt: new Date(Date.now() - 86400000).toISOString() }, // 86400 seconds ago = yesterday + { conversationId: '4', updatedAt: new Date(Date.now() - 86400000 * 2).toISOString() }, // 2 days ago (previous 7 days) + { conversationId: '5', updatedAt: new Date(Date.now() - 86400000 * 8).toISOString() }, // 8 days ago (previous 30 days) ]; const grouped = groupConversationsByDate(conversations as TConversation[]); expect(grouped[0][0]).toBe('Today'); expect(grouped[0][1]).toHaveLength(1); - expect(grouped[1][0]).toBe(' 2023'); + expect(grouped[1][0]).toBe('Yesterday'); expect(grouped[1][1]).toHaveLength(1); + expect(grouped[2][0]).toBe('Previous 7 days'); + expect(grouped[2][1]).toHaveLength(1); + expect(grouped[3][0]).toBe('Previous 30 days'); + expect(grouped[3][1]).toHaveLength(1); + expect(grouped[4][0]).toBe(' 2023'); + expect(grouped[4][1]).toHaveLength(1); }); it('returns an empty array for no conversations', () => { diff --git a/client/src/utils/convos.ts b/client/src/utils/convos.ts index 5f2741bd8d..c6f33e6d47 100644 --- a/client/src/utils/convos.ts +++ b/client/src/utils/convos.ts @@ -1,4 +1,14 @@ -import { parseISO, isToday, isWithinInterval, subDays, getYear } from 'date-fns'; +import { + parseISO, + isToday, + isWithinInterval, + subDays, + getMonth, + getYear, + startOfDay, + startOfYear, + format, +} from 'date-fns'; import type { TConversation, ConversationData, @@ -11,11 +21,17 @@ const getGroupName = (date: Date) => { if (isToday(date)) { return 'Today'; } + if (isWithinInterval(date, { start: startOfDay(subDays(now, 1)), end: now })) { + return 'Yesterday'; + } if (isWithinInterval(date, { start: subDays(now, 7), end: now })) { - return 'Last 7 days'; + return 'Previous 7 days'; } if (isWithinInterval(date, { start: subDays(now, 30), end: now })) { - return 'Last 30 days'; + return 'Previous 30 days'; + } + if (isWithinInterval(date, { start: startOfYear(now), end: now })) { + return ' ' + format(date, 'MMMM'); } return ' ' + getYear(date).toString(); };