Skip to content

Commit 1d0dd66

Browse files
committed
Fixed date filter
1 parent 2903e45 commit 1d0dd66

File tree

2 files changed

+71
-31
lines changed

2 files changed

+71
-31
lines changed

packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownDateInput.tsx

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,25 @@ import { selectedOperandInDropdownComponentState } from '@/object-record/object-
55
import { getRelativeDateDisplayValue } from '@/object-record/object-filter-dropdown/utils/getRelativeDateDisplayValue';
66
import { DateTimePicker } from '@/ui/input/components/internal/date/components/InternalDatePicker';
77
import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue';
8+
import { UserContext } from '@/users/contexts/UserContext';
89
import { computeVariableDateViewFilterValue } from '@/views/view-filter-value/utils/computeVariableDateViewFilterValue';
9-
import { useState } from 'react';
10+
import { useContext, useState } from 'react';
11+
import { useRecoilValue } from 'recoil';
1012
import {
1113
ViewFilterOperand,
1214
type VariableDateViewFilterValueDirection,
1315
type VariableDateViewFilterValueUnit,
1416
} from 'twenty-shared/types';
1517
import { isDefined, resolveDateViewFilterValue } from 'twenty-shared/utils';
1618
import { FieldMetadataType } from '~/generated-metadata/graphql';
19+
import { dateLocaleState } from '~/localization/states/dateLocaleState';
20+
import { formatDateString } from '~/utils/string/formatDateString';
21+
import { formatDateTimeString } from '~/utils/string/formatDateTimeString';
1722

1823
export const ObjectFilterDropdownDateInput = () => {
24+
const { dateFormat, timeFormat, timeZone } = useContext(UserContext);
25+
const dateLocale = useRecoilValue(dateLocaleState);
26+
1927
const fieldMetadataItemUsedInDropdown = useRecoilComponentValue(
2028
fieldMetadataItemUsedInDropdownComponentSelector,
2129
);
@@ -46,10 +54,26 @@ export const ObjectFilterDropdownDateInput = () => {
4654
setInternalDate(newDate);
4755

4856
const newFilterValue = newDate?.toISOString() ?? '';
57+
58+
const formattedDateTime = formatDateTimeString({
59+
value: newDate?.toISOString(),
60+
timeZone,
61+
dateFormat,
62+
timeFormat,
63+
localeCatalog: dateLocale.localeCatalog,
64+
});
65+
66+
const formattedDate = formatDateString({
67+
value: newDate?.toISOString(),
68+
timeZone,
69+
dateFormat,
70+
localeCatalog: dateLocale.localeCatalog,
71+
});
72+
4973
const newDisplayValue = isDefined(newDate)
5074
? isDateTimeInput
51-
? newDate.toLocaleString()
52-
: newDate.toLocaleDateString()
75+
? formattedDateTime
76+
: formattedDate
5377
: '';
5478

5579
applyObjectFilterDropdownFilterValue(newFilterValue, newDisplayValue);

packages/twenty-shared/src/utils/filter/turnRecordFilterIntoGqlOperationFilter.ts

Lines changed: 44 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -223,20 +223,28 @@ export const turnRecordFilterIntoRecordGqlOperationFilter = ({
223223
const isValid = resolvedFilterValue instanceof Date;
224224
const date = isValid ? resolvedFilterValue : now;
225225

226-
return {
227-
and: [
228-
{
229-
[correspondingFieldMetadataItem.name]: {
230-
lte: endOfDay(date).toISOString(),
231-
} as DateFilter,
232-
},
233-
{
234-
[correspondingFieldMetadataItem.name]: {
235-
gte: startOfDay(date).toISOString(),
236-
} as DateFilter,
237-
},
238-
],
239-
};
226+
if (filterType === 'DATE') {
227+
return {
228+
[correspondingFieldMetadataItem.name]: {
229+
eq: date.toISOString(),
230+
} as DateFilter,
231+
};
232+
} else {
233+
return {
234+
and: [
235+
{
236+
[correspondingFieldMetadataItem.name]: {
237+
lte: endOfDay(date).toISOString(),
238+
} as DateFilter,
239+
},
240+
{
241+
[correspondingFieldMetadataItem.name]: {
242+
gte: startOfDay(date).toISOString(),
243+
} as DateFilter,
244+
},
245+
],
246+
};
247+
}
240248
}
241249
case RecordFilterOperand.IS_IN_PAST:
242250
return {
@@ -251,20 +259,28 @@ export const turnRecordFilterIntoRecordGqlOperationFilter = ({
251259
} as DateFilter,
252260
};
253261
case RecordFilterOperand.IS_TODAY: {
254-
return {
255-
and: [
256-
{
257-
[correspondingFieldMetadataItem.name]: {
258-
lte: endOfDay(now).toISOString(),
259-
} as DateFilter,
260-
},
261-
{
262-
[correspondingFieldMetadataItem.name]: {
263-
gte: startOfDay(now).toISOString(),
264-
} as DateFilter,
265-
},
266-
],
267-
};
262+
if (filterType === 'DATE') {
263+
return {
264+
[correspondingFieldMetadataItem.name]: {
265+
eq: now.toISOString(),
266+
} as DateFilter,
267+
};
268+
} else {
269+
return {
270+
and: [
271+
{
272+
[correspondingFieldMetadataItem.name]: {
273+
lte: endOfDay(now).toISOString(),
274+
} as DateFilter,
275+
},
276+
{
277+
[correspondingFieldMetadataItem.name]: {
278+
gte: startOfDay(now).toISOString(),
279+
} as DateFilter,
280+
},
281+
],
282+
};
283+
}
268284
}
269285
default:
270286
throw new Error(

0 commit comments

Comments
 (0)