From 2a65b85302a12c0624253d7aebce158af47293b7 Mon Sep 17 00:00:00 2001 From: contributor Date: Mon, 17 Nov 2025 12:42:05 +0200 Subject: [PATCH] edited notes: allow spaces between keyword and delta in #dateNote to be compatible with existing search syntax --- apps/server/src/routes/api/edited-notes.spec.ts | 12 +++++++++--- apps/server/src/routes/api/edited-notes.ts | 4 ++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/apps/server/src/routes/api/edited-notes.spec.ts b/apps/server/src/routes/api/edited-notes.spec.ts index 7227a4c80..2626af8bc 100644 --- a/apps/server/src/routes/api/edited-notes.spec.ts +++ b/apps/server/src/routes/api/edited-notes.spec.ts @@ -19,7 +19,7 @@ const expectedYear = "2025"; const expectedYearMinus1 = "2024"; function keywordResolvesToDate(dateStrOrKeyword: string, expectedDate: string) { - cls.init(() => { + cls.init(() => { cls.set("localNowDateTime", clientDate); const dateFilter = dateNoteLabelKeywordToDateFilter(dateStrOrKeyword); expect(dateFilter.date).toBe(expectedDate); @@ -27,7 +27,7 @@ function keywordResolvesToDate(dateStrOrKeyword: string, expectedDate: string) { } function keywordDoesNotResolve(dateStrOrKeyword: string) { - cls.init(() => { + cls.init(() => { cls.set("localNowDateTime", clientDate); const dateFilter = dateNoteLabelKeywordToDateFilter(dateStrOrKeyword); expect(dateFilter.date).toBe(null); @@ -36,7 +36,7 @@ function keywordDoesNotResolve(dateStrOrKeyword: string) { describe("edited-notes::dateNoteLabelKeywordToDateFilter", () => { beforeEach(() => { - vi.stubEnv('TZ', 'UTC'); + vi.stubEnv("TZ", "UTC"); vi.useFakeTimers(); vi.setSystemTime(new Date(serverDate)); }); @@ -67,6 +67,12 @@ describe("edited-notes::dateNoteLabelKeywordToDateFilter", () => { keywordResolvesToDate("TODAY-1", expectedTodayMinus1); }); + it("resolves 'TODAY - 1' (with spaces) to yesterday's date", () => { + keywordResolvesToDate("TODAY - 1", expectedTodayMinus1); + keywordResolvesToDate("TODAY- 1", expectedTodayMinus1); + keywordResolvesToDate("TODAY -1", expectedTodayMinus1); + }); + it("resolves 'MONTH-2' to 2 months ago", () => { keywordResolvesToDate("MONTH-2", expectedMonthMinus2); }); diff --git a/apps/server/src/routes/api/edited-notes.ts b/apps/server/src/routes/api/edited-notes.ts index 262db76cb..884b554c0 100644 --- a/apps/server/src/routes/api/edited-notes.ts +++ b/apps/server/src/routes/api/edited-notes.ts @@ -155,11 +155,11 @@ type DateFilter = DateValue; * @returns A `DateFilter` object containing the resolved date string. */ export function dateNoteLabelKeywordToDateFilter(dateStr: string): DateFilter { - const keywordAndDelta = dateStr.match(/^(today|month|year)([+-]\d+)?$/i); + const keywordAndDelta = dateStr.match(/^(today|month|year)\s*([+-]\s*\d+)?$/i); if (keywordAndDelta) { const keyword = keywordAndDelta[1].toLowerCase(); - const delta = keywordAndDelta[2] ? parseInt(keywordAndDelta[2]) : 0; + const delta = parseInt(keywordAndDelta[2]?.replace(/\s/g, "") ?? "0"); const clientDate = dayjs(dateUtils.localNowDate()); const date = formatDateFromKeywordAndDelta(clientDate, keyword, delta);