Compare commits

...
Author SHA1 Message Date
Sonarly Claude Code 9edb338596 fix: handle DATE field type in calendar view date range filter
https://sonarly.com/issue/33310?type=bug

Calendar view sends ISO instant string values (e.g., "2024-12-31T18:30:00Z") as filter values regardless of whether the selected calendar field is DATE or DATE_TIME type. For DATE fields, the filter type is hardcoded as 'DATE_TIME' but the server resolves the actual field type as 'DATE', causing a format mismatch that can result in zero records returned.
2026-05-01 14:33:33 +00:00
@@ -18,6 +18,7 @@ import {
turnAnyFieldFilterIntoRecordGqlFilter,
turnPlainDateIntoUserTimeZoneInstantString,
} from 'twenty-shared/utils';
import { FieldMetadataType } from '~/generated-metadata/graphql';
const DATE_RANGE_FILTER_AFTER_ID = 'DATE_RANGE_FILTER_AFTER_ID';
const DATE_RANGE_FILTER_BEFORE_ID = 'DATE_RANGE_FILTER_BEFORE_ID';
@@ -60,26 +61,37 @@ export const useRecordCalendarQueryDateRangeFilter = (
};
}
const firstDayOfFirstWeekISOString =
turnPlainDateIntoUserTimeZoneInstantString(
firstDayOfFirstWeek,
userTimezone,
);
const nextDayAfterLastDayOfLastWeekISOString =
turnPlainDateIntoUserTimeZoneInstantString(
lastDayOfLastWeek.add({ days: 1 }),
userTimezone,
);
const dateRangeFilterFieldMetadataId = currentView.calendarFieldMetadataId;
const calendarFieldMetadataItem = objectMetadataItem.fields.find(
(field) => field.id === dateRangeFilterFieldMetadataId,
);
const isDateField =
calendarFieldMetadataItem?.type === FieldMetadataType.DATE;
const filterType = isDateField ? 'DATE' : 'DATE_TIME';
const afterValue = isDateField
? firstDayOfFirstWeek.toString()
: turnPlainDateIntoUserTimeZoneInstantString(
firstDayOfFirstWeek,
userTimezone,
);
const beforeValue = isDateField
? lastDayOfLastWeek.add({ days: 1 }).toString()
: turnPlainDateIntoUserTimeZoneInstantString(
lastDayOfLastWeek.add({ days: 1 }),
userTimezone,
);
const dateRangeFilterAfter: RecordFilter = {
id: DATE_RANGE_FILTER_AFTER_ID,
fieldMetadataId: dateRangeFilterFieldMetadataId,
value: `${firstDayOfFirstWeekISOString}`,
value: afterValue,
operand: RecordFilterOperand.IS_AFTER,
type: 'DATE_TIME',
type: filterType,
label: t`After or equal`,
displayValue: `${firstDayOfFirstWeek.toString()}`,
};
@@ -87,9 +99,9 @@ export const useRecordCalendarQueryDateRangeFilter = (
const dateRangeFilterBefore: RecordFilter = {
id: DATE_RANGE_FILTER_BEFORE_ID,
fieldMetadataId: dateRangeFilterFieldMetadataId,
value: `${nextDayAfterLastDayOfLastWeekISOString}`,
value: beforeValue,
operand: RecordFilterOperand.IS_BEFORE,
type: 'DATE_TIME',
type: filterType,
label: t`Before`,
displayValue: `${lastDayOfLastWeek.toString()}`,
};