Fixed relative date filter initalization (#12811)

This PR fixes problems with date filter : 
- Filter chip shows the label with plural, ex : `This weeks` 
- Using a relative filter now initializes to `This day`
- Switching between the different relative sub-operands (This, Past,
Next) now initializes with a value so we're never in an "empty" state.
This commit is contained in:
Lucas Bordeau
2025-06-24 13:57:05 +02:00
committed by GitHub
parent 5c3550a2ee
commit 81d70e6fa3
3 changed files with 39 additions and 6 deletions

View File

@ -3,12 +3,18 @@ import { useUpsertObjectFilterDropdownCurrentFilter } from '@/object-record/obje
import { fieldMetadataItemUsedInDropdownComponentSelector } from '@/object-record/object-filter-dropdown/states/fieldMetadataItemUsedInDropdownComponentSelector';
import { objectFilterDropdownCurrentRecordFilterComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownCurrentRecordFilterComponentState';
import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState';
import { getRelativeDateDisplayValue } from '@/object-record/object-filter-dropdown/utils/getRelativeDateDisplayValue';
import { useCreateEmptyRecordFilterFromFieldMetadataItem } from '@/object-record/record-filter/hooks/useCreateEmptyRecordFilterFromFieldMetadataItem';
import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
import { RecordFilterOperand } from '@/object-record/record-filter/types/RecordFilterOperand';
import { getDateFilterDisplayValue } from '@/object-record/record-filter/utils/getDateFilterDisplayValue';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2';
import { computeVariableDateViewFilterValue } from '@/views/view-filter-value/utils/computeVariableDateViewFilterValue';
import {
VariableDateViewFilterValueDirection,
VariableDateViewFilterValueUnit,
} from '@/views/view-filter-value/utils/resolveDateViewFilterValue';
import { isDefined } from 'twenty-shared/utils';
export const useApplyObjectFilterDropdownOperand = () => {
@ -87,6 +93,20 @@ export const useApplyObjectFilterDropdownOperand = () => {
);
recordFilterToUpsert.displayValue = displayValue;
} else if (newOperand === RecordFilterOperand.IsRelative) {
const defaultRelativeDate = {
direction: 'THIS' as VariableDateViewFilterValueDirection,
amount: 1,
unit: 'DAY' as VariableDateViewFilterValueUnit,
};
recordFilterToUpsert.value = computeVariableDateViewFilterValue(
defaultRelativeDate.direction,
defaultRelativeDate.amount,
defaultRelativeDate.unit,
);
recordFilterToUpsert.displayValue =
getRelativeDateDisplayValue(defaultRelativeDate);
} else {
recordFilterToUpsert.value = '';
recordFilterToUpsert.displayValue = '';

View File

@ -17,11 +17,14 @@ export const getRelativeDateDisplayValue = (
const directionStr = capitalize(direction.toLowerCase());
const amountStr = direction === 'THIS' ? '' : amount;
const unitStr = amount
? amount > 1
? plural(unit.toLowerCase())
: unit.toLowerCase()
: undefined;
const unitStr =
direction === 'THIS'
? unit.toLowerCase()
: amount
? amount > 1
? plural(unit.toLowerCase())
: unit.toLowerCase()
: undefined;
return [directionStr, amountStr, unitStr]
.filter((item) => item !== undefined)

View File

@ -7,4 +7,14 @@ export const computeVariableDateViewFilterValue = (
direction: VariableDateViewFilterValueDirection,
amount: number | undefined,
unit: VariableDateViewFilterValueUnit,
) => `${direction}_${amount?.toString()}_${unit}`;
) => {
if (direction === 'THIS') {
return `THIS_1_${unit}`;
} else if (amount === undefined || amount <= 0) {
throw new Error(
'Amount must be defined and greater than 0 for relative date filters',
);
}
return `${direction}_${amount.toString()}_${unit}`;
};