From aa5e11915e09f7173c9f888be115e81e3f601fab Mon Sep 17 00:00:00 2001 From: kolaente Date: Fri, 17 Nov 2023 19:38:55 +0100 Subject: [PATCH] fix(filter): don't prevent entering date math strings Resolves https://community.vikunja.io/t/filter-setting-s/1791/2 --- src/components/date/datepickerWithRange.vue | 7 ++++--- src/helpers/time/parseDateOrString.ts | 8 ++++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/components/date/datepickerWithRange.vue b/src/components/date/datepickerWithRange.vue index 7f2bb740d..c04922537 100644 --- a/src/components/date/datepickerWithRange.vue +++ b/src/components/date/datepickerWithRange.vue @@ -75,6 +75,7 @@ import {useI18n} from 'vue-i18n' import flatPickr from 'vue-flatpickr-component' import 'flatpickr/dist/flatpickr.css' +import {parseDateOrString} from '@/helpers/time/parseDateOrString' import Popup from '@/components/misc/popup.vue' import {DATE_RANGES} from '@/components/date/dateRanges' @@ -120,9 +121,9 @@ watch( to.value = newValue.dateTo // Only set the date back to flatpickr when it's an actual date. // Otherwise flatpickr runs in an endless loop and slows down the browser. - const dateFrom = new Date(from.value) - const dateTo = new Date(to.value) - if (dateTo.getTime() === dateTo.getTime() && dateFrom.getTime() === dateFrom.getTime()) { + const dateFrom = parseDateOrString(from.value, false) + const dateTo = parseDateOrString(to.value, false) + if (dateFrom instanceof Date && dateTo instanceof Date) { flatpickrRange.value = `${from.value} to ${to.value}` } }, diff --git a/src/helpers/time/parseDateOrString.ts b/src/helpers/time/parseDateOrString.ts index 139455709..e65fad23f 100644 --- a/src/helpers/time/parseDateOrString.ts +++ b/src/helpers/time/parseDateOrString.ts @@ -1,8 +1,12 @@ -export function parseDateOrString(rawValue: string | undefined, fallback: unknown) { - if (typeof rawValue === 'undefined') { +export function parseDateOrString(rawValue: string | undefined | null, fallback: unknown): (unknown | string | Date) { + if (rawValue === null || typeof rawValue === 'undefined') { return fallback } + if (rawValue.toLowerCase().includes('now') || rawValue.toLowerCase().includes('||')) { + return rawValue + } + const d = new Date(rawValue) return !isNaN(+d)