From b255d3481ecb9549d0e4c5f01717877a78509bbb Mon Sep 17 00:00:00 2001 From: Sonarly Claude Code Date: Tue, 7 Apr 2026 06:36:45 +0000 Subject: [PATCH] fix: handle relative date filter values without amount for THIS direction https://sonarly.com/issue/22312?type=bug The relative date filter stringified parser fails on the value "THIS_QUARTER" because the regex requires a `DIRECTION_DIGITS_UNIT` three-segment format (e.g., `THIS_1_QUARTER`), but the stored filter value lacks the amount segment. This crashes the opportunities table view for the affected user. --- .../utils/relativeDateFilterStringifiedSchema.ts | 2 +- .../filter/turnRecordFilterIntoGqlOperationFilter.ts | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/twenty-shared/src/utils/filter/dates/utils/relativeDateFilterStringifiedSchema.ts b/packages/twenty-shared/src/utils/filter/dates/utils/relativeDateFilterStringifiedSchema.ts index 91b0c78b9ce..91ca1392a4a 100644 --- a/packages/twenty-shared/src/utils/filter/dates/utils/relativeDateFilterStringifiedSchema.ts +++ b/packages/twenty-shared/src/utils/filter/dates/utils/relativeDateFilterStringifiedSchema.ts @@ -3,7 +3,7 @@ import { isNonEmptyArray } from '@sniptt/guards'; import z from 'zod'; const REGEX_FOR_RELATIVE_DATE_FILTER_STRINGIFIED_PARSING = - /((?:THIS)|(?:PAST)|(?:NEXT))_(\d*)_(DAY|MONTH|YEAR|WEEK|QUARTER|HOUR|MINUTE|SECOND)(?:(?:;;([^;;]*);;)?(?:(MONDAY|SUNDAY|SATURDAY);;)?)?/; + /((?:THIS)|(?:PAST)|(?:NEXT))_(?:(\d+)_)?(DAY|MONTH|YEAR|WEEK|QUARTER|HOUR|MINUTE|SECOND)(?:(?:;;([^;;]*);;)?(?:(MONDAY|SUNDAY|SATURDAY);;)?)?/; export const relativeDateFilterStringifiedSchema = z .string() diff --git a/packages/twenty-shared/src/utils/filter/turnRecordFilterIntoGqlOperationFilter.ts b/packages/twenty-shared/src/utils/filter/turnRecordFilterIntoGqlOperationFilter.ts index 2a1a27c9b53..bbbcaacd76c 100644 --- a/packages/twenty-shared/src/utils/filter/turnRecordFilterIntoGqlOperationFilter.ts +++ b/packages/twenty-shared/src/utils/filter/turnRecordFilterIntoGqlOperationFilter.ts @@ -305,12 +305,6 @@ export const turnRecordFilterIntoRecordGqlOperationFilter = ({ ? resolvedFilterValue : null; - if (!isDefined(parsedRelativeDateFilterValue)) { - throw new Error( - `Cannot parse relative date filter : "${recordFilter.value}"`, - ); - } - const defaultDateRange = resolveDateTimeFilter({ value: `PAST_1_DAY;;${filterValueDependencies.timeZone}`, operand: RecordFilterOperand.IS_RELATIVE, @@ -323,6 +317,12 @@ export const turnRecordFilterIntoRecordGqlOperationFilter = ({ throw new Error('Failed to resolve default date range'); } + if (!isDefined(parsedRelativeDateFilterValue)) { + console.warn( + `Cannot parse relative date filter : "${recordFilter.value}", falling back to default range`, + ); + } + const start = parsedRelativeDateFilterValue?.start ?? defaultDateRange.start;