From 92cdf5fe9c9903f2066f89c94a562ff7330ecd1f Mon Sep 17 00:00:00 2001 From: kolaente Date: Thu, 6 Jun 2024 21:44:29 +0200 Subject: [PATCH] fix(quick add magic): assume today when no date was specified with time --- frontend/src/helpers/time/parseDate.ts | 8 +++++++- frontend/src/modules/parseTaskText.test.ts | 11 +++++++++++ frontend/src/modules/parseTaskText.ts | 7 ++++++- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/frontend/src/helpers/time/parseDate.ts b/frontend/src/helpers/time/parseDate.ts index d1ca0a743..fb074ae38 100644 --- a/frontend/src/helpers/time/parseDate.ts +++ b/frontend/src/helpers/time/parseDate.ts @@ -79,6 +79,12 @@ export const parseDate = (text: string, now: Date = new Date()): dateParseResult parsed = getDateFromText(text, now) if (parsed.date === null) { + const time = addTimeToDate(text, new Date(now), parsed.foundText) + + if (time.date !== null && +now !== +time.date) { + return time + } + return { newText: replaceAll(text, parsed.foundText, ''), date: parsed.date, @@ -122,7 +128,7 @@ const addTimeToDate = (text: string, date: Date, previousMatch: string | null): const replace = results !== null ? results[0] : previousMatch return { newText: replaceAll(text, replace, '').trim(), - date: date, + date, } } diff --git a/frontend/src/modules/parseTaskText.test.ts b/frontend/src/modules/parseTaskText.test.ts index d3d49a196..e72640062 100644 --- a/frontend/src/modules/parseTaskText.test.ts +++ b/frontend/src/modules/parseTaskText.test.ts @@ -804,6 +804,17 @@ describe('Parse Task Text', () => { expect(result?.repeats?.type).toBe(cases[c].type) expect(result?.repeats?.amount).toBe(cases[c].amount) }) + + it(`should parse ${c} as recurring date every ${cases[c].amount} ${cases[c].type} at 11:42`, () => { + const result = parseTaskText(`Lorem Ipsum ${c} at 11:42`) + + expect(result.text).toBe('Lorem Ipsum') + expect(result?.repeats?.type).toBe(cases[c].type) + expect(result?.repeats?.amount).toBe(cases[c].amount) + const now = new Date() + expect(`${result?.date?.getFullYear()}-${result?.date?.getMonth()}-${result?.date?.getDate()}`).toBe(`${now.getFullYear()}-${now.getMonth()}-${now.getDate()}`) + expect(`${result?.date?.getHours()}:${result?.date?.getMinutes()}`).toBe('11:42') + }) } const wordCases = [ diff --git a/frontend/src/modules/parseTaskText.ts b/frontend/src/modules/parseTaskText.ts index e5abd5e9f..d725a05c9 100644 --- a/frontend/src/modules/parseTaskText.ts +++ b/frontend/src/modules/parseTaskText.ts @@ -261,9 +261,14 @@ const getRepeats = (text: string): repeatParsedResult => { break } } + + let matchedText = results[0] + if(matchedText.endsWith(' ')) { + matchedText = matchedText.substring(0, matchedText.length - 1) + } return { - textWithoutMatched: text.replace(results[0], ''), + textWithoutMatched: text.replace(matchedText, ''), repeats: { amount, type,