Remove Luxon from codebase (#14448)
Fixes #14444 We shouldn't have 2 libraries to manage dates, one is enough
This commit is contained in:
+3
-2
@@ -10,7 +10,6 @@ import { DropdownContent } from '@/ui/layout/dropdown/components/DropdownContent
|
||||
import { ScrollWrapper } from '@/ui/utilities/scroll/components/ScrollWrapper';
|
||||
import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue';
|
||||
import styled from '@emotion/styled';
|
||||
import { id } from 'date-fns/locale';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
const StyledContainer = styled.div`
|
||||
@@ -37,7 +36,9 @@ export const AdvancedFilterRootRecordFilterGroup = () => {
|
||||
}
|
||||
|
||||
return (
|
||||
<ScrollWrapper componentInstanceId={`scroll-wrapper-dropdown-menu-${id}`}>
|
||||
<ScrollWrapper
|
||||
componentInstanceId={`scroll-wrapper-dropdown-menu-${rootRecordFilterGroup.id}`}
|
||||
>
|
||||
<DropdownContent widthInPixels={ADVANCED_FILTER_DROPDOWN_CONTENT_WIDTH}>
|
||||
<StyledContainer>
|
||||
{childRecordFiltersAndRecordFilterGroups.map(
|
||||
|
||||
+3
-1
@@ -114,7 +114,9 @@ export const FormDateTimeFieldInput = ({
|
||||
);
|
||||
|
||||
const draftValueAsDate =
|
||||
isDefined(draftValue.value) && isNonEmptyString(draftValue.value)
|
||||
isDefined(draftValue.value) &&
|
||||
isNonEmptyString(draftValue.value) &&
|
||||
draftValue.type === 'static'
|
||||
? new Date(draftValue.value)
|
||||
: null;
|
||||
|
||||
|
||||
+28
-33
@@ -10,7 +10,6 @@ import {
|
||||
waitForElementToBeRemoved,
|
||||
within,
|
||||
} from '@storybook/test';
|
||||
import { DateTime } from 'luxon';
|
||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
||||
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
||||
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
||||
@@ -208,23 +207,21 @@ export const DefaultsToMinValueWhenTypingReallyOldDate: Story = {
|
||||
}),
|
||||
);
|
||||
|
||||
const expectedDate = DateTime.fromJSDate(MIN_DATE)
|
||||
.toLocal()
|
||||
.set({
|
||||
day: MIN_DATE.getUTCDate(),
|
||||
month: MIN_DATE.getUTCMonth() + 1,
|
||||
year: MIN_DATE.getUTCFullYear(),
|
||||
hour: 0,
|
||||
minute: 0,
|
||||
second: 0,
|
||||
millisecond: 0,
|
||||
});
|
||||
const expectedDate = new Date(
|
||||
MIN_DATE.getUTCFullYear(),
|
||||
MIN_DATE.getUTCMonth(),
|
||||
MIN_DATE.getUTCDate(),
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
);
|
||||
|
||||
const selectedDay = within(datePicker).getByRole('option', {
|
||||
selected: true,
|
||||
name: (accessibleName) => {
|
||||
// The name looks like "Choose Sunday, December 31st, 1899"
|
||||
return accessibleName.includes(expectedDate.toFormat('yyyy'));
|
||||
return accessibleName.includes(expectedDate.getFullYear().toString());
|
||||
},
|
||||
});
|
||||
expect(selectedDay).toBeVisible();
|
||||
@@ -264,23 +261,23 @@ export const DefaultsToMaxValueWhenTypingReallyFarDate: Story = {
|
||||
);
|
||||
}),
|
||||
waitFor(() => {
|
||||
const expectedDate = DateTime.fromJSDate(MAX_DATE)
|
||||
.toLocal()
|
||||
.set({
|
||||
day: MAX_DATE.getUTCDate(),
|
||||
month: MAX_DATE.getUTCMonth() + 1,
|
||||
year: MAX_DATE.getUTCFullYear(),
|
||||
hour: 0,
|
||||
minute: 0,
|
||||
second: 0,
|
||||
millisecond: 0,
|
||||
});
|
||||
const expectedDate = new Date(
|
||||
MAX_DATE.getUTCFullYear(),
|
||||
MAX_DATE.getUTCMonth(),
|
||||
MAX_DATE.getUTCDate(),
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
);
|
||||
|
||||
const selectedDay = within(datePicker).getByRole('option', {
|
||||
selected: true,
|
||||
name: (accessibleName) => {
|
||||
// The name looks like "Choose Thursday, December 30th, 2100"
|
||||
return accessibleName.includes(expectedDate.toFormat('yyyy'));
|
||||
return accessibleName.includes(
|
||||
expectedDate.getFullYear().toString(),
|
||||
);
|
||||
},
|
||||
});
|
||||
expect(selectedDay).toBeVisible();
|
||||
@@ -315,13 +312,7 @@ export const SwitchesToStandaloneVariable: Story = {
|
||||
const variableTag = await canvas.findByText('Creation date');
|
||||
expect(variableTag).toBeVisible();
|
||||
|
||||
const removeVariableButton = canvasElement.querySelector(
|
||||
'button .tabler-icon-x',
|
||||
);
|
||||
|
||||
if (!removeVariableButton) {
|
||||
throw new Error('Remove variable button not found');
|
||||
}
|
||||
const removeVariableButton = canvas.getByLabelText('Remove variable');
|
||||
|
||||
await Promise.all([
|
||||
userEvent.click(removeVariableButton),
|
||||
@@ -342,8 +333,12 @@ export const ClickingOutsideDoesNotResetInputState: Story = {
|
||||
onChange: fn(),
|
||||
},
|
||||
play: async ({ canvasElement, args }) => {
|
||||
if (!args.defaultValue) {
|
||||
throw new Error('This test requires a defaultValue');
|
||||
}
|
||||
|
||||
const defaultValueAsDisplayString = parseDateToString({
|
||||
date: new Date(args.defaultValue!),
|
||||
date: new Date(args.defaultValue),
|
||||
isDateTimeInput: false,
|
||||
userTimezone: undefined,
|
||||
});
|
||||
|
||||
+30
-33
@@ -11,7 +11,6 @@ import {
|
||||
waitForElementToBeRemoved,
|
||||
within,
|
||||
} from '@storybook/test';
|
||||
import { DateTime } from 'luxon';
|
||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
||||
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
||||
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
||||
@@ -257,23 +256,23 @@ export const DefaultsToMinValueWhenTypingReallyOldDate: Story = {
|
||||
);
|
||||
}),
|
||||
waitFor(() => {
|
||||
const expectedDate = DateTime.fromJSDate(MIN_DATE)
|
||||
.toLocal()
|
||||
.set({
|
||||
day: MIN_DATE.getUTCDate(),
|
||||
month: MIN_DATE.getUTCMonth() + 1,
|
||||
year: MIN_DATE.getUTCFullYear(),
|
||||
hour: 0,
|
||||
minute: 0,
|
||||
second: 0,
|
||||
millisecond: 0,
|
||||
});
|
||||
const expectedDate = new Date(
|
||||
MIN_DATE.getUTCFullYear(),
|
||||
MIN_DATE.getUTCMonth(),
|
||||
MIN_DATE.getUTCDate(),
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
);
|
||||
|
||||
const selectedDay = within(datePicker).getByRole('option', {
|
||||
selected: true,
|
||||
name: (accessibleName) => {
|
||||
// The name looks like "Choose Sunday, December 31st, 1899"
|
||||
return accessibleName.includes(expectedDate.toFormat('yyyy'));
|
||||
return accessibleName.includes(
|
||||
expectedDate.getFullYear().toString(),
|
||||
);
|
||||
},
|
||||
});
|
||||
expect(selectedDay).toBeVisible();
|
||||
@@ -315,23 +314,23 @@ export const DefaultsToMaxValueWhenTypingReallyFarDate: Story = {
|
||||
);
|
||||
}),
|
||||
waitFor(() => {
|
||||
const expectedDate = DateTime.fromJSDate(MAX_DATE)
|
||||
.toLocal()
|
||||
.set({
|
||||
day: MAX_DATE.getUTCDate(),
|
||||
month: MAX_DATE.getUTCMonth() + 1,
|
||||
year: MAX_DATE.getUTCFullYear(),
|
||||
hour: 0,
|
||||
minute: 0,
|
||||
second: 0,
|
||||
millisecond: 0,
|
||||
});
|
||||
const expectedDate = new Date(
|
||||
MAX_DATE.getUTCFullYear(),
|
||||
MAX_DATE.getUTCMonth(),
|
||||
MAX_DATE.getUTCDate(),
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
);
|
||||
|
||||
const selectedDay = within(datePicker).getByRole('option', {
|
||||
selected: true,
|
||||
name: (accessibleName) => {
|
||||
// The name looks like "Choose Thursday, December 30th, 2100"
|
||||
return accessibleName.includes(expectedDate.toFormat('yyyy'));
|
||||
return accessibleName.includes(
|
||||
expectedDate.getFullYear().toString(),
|
||||
);
|
||||
},
|
||||
});
|
||||
expect(selectedDay).toBeVisible();
|
||||
@@ -366,13 +365,7 @@ export const SwitchesToStandaloneVariable: Story = {
|
||||
const variableTag = await canvas.findByText('Creation date');
|
||||
expect(variableTag).toBeVisible();
|
||||
|
||||
const removeVariableButton = canvasElement.querySelector(
|
||||
'button .tabler-icon-x',
|
||||
);
|
||||
|
||||
if (!removeVariableButton) {
|
||||
throw new Error('Remove variable button not found');
|
||||
}
|
||||
const removeVariableButton = canvas.getByLabelText('Remove variable');
|
||||
|
||||
await Promise.all([
|
||||
userEvent.click(removeVariableButton),
|
||||
@@ -393,8 +386,12 @@ export const ClickingOutsideDoesNotResetInputState: Story = {
|
||||
onChange: fn(),
|
||||
},
|
||||
play: async ({ canvasElement, args }) => {
|
||||
if (!args.defaultValue) {
|
||||
throw new Error('This test requires a defaultValue');
|
||||
}
|
||||
|
||||
const defaultValueAsDisplayString = parseDateToString({
|
||||
date: new Date(args.defaultValue!),
|
||||
date: new Date(args.defaultValue),
|
||||
isDateTimeInput: true,
|
||||
userTimezone: undefined,
|
||||
});
|
||||
|
||||
+11
-7
@@ -1,4 +1,4 @@
|
||||
import { DateTime } from 'luxon';
|
||||
import { parseISO, isEqual, isAfter, isBefore } from 'date-fns';
|
||||
|
||||
import { type DateFilter } from '@/object-record//graphql/types/RecordGqlOperationFilter';
|
||||
|
||||
@@ -11,10 +11,10 @@ export const isMatchingDateFilter = ({
|
||||
}) => {
|
||||
switch (true) {
|
||||
case dateFilter.eq !== undefined: {
|
||||
return DateTime.fromISO(value).equals(DateTime.fromISO(dateFilter.eq));
|
||||
return isEqual(parseISO(value), parseISO(dateFilter.eq));
|
||||
}
|
||||
case dateFilter.neq !== undefined: {
|
||||
return !DateTime.fromISO(value).equals(DateTime.fromISO(dateFilter.neq));
|
||||
return !isEqual(parseISO(value), parseISO(dateFilter.neq));
|
||||
}
|
||||
case dateFilter.in !== undefined: {
|
||||
return dateFilter.in.includes(value);
|
||||
@@ -27,16 +27,20 @@ export const isMatchingDateFilter = ({
|
||||
}
|
||||
}
|
||||
case dateFilter.gt !== undefined: {
|
||||
return DateTime.fromISO(value) > DateTime.fromISO(dateFilter.gt);
|
||||
return isAfter(parseISO(value), parseISO(dateFilter.gt));
|
||||
}
|
||||
case dateFilter.gte !== undefined: {
|
||||
return DateTime.fromISO(value) >= DateTime.fromISO(dateFilter.gte);
|
||||
const valueDate = parseISO(value);
|
||||
const filterDate = parseISO(dateFilter.gte);
|
||||
return isAfter(valueDate, filterDate) || isEqual(valueDate, filterDate);
|
||||
}
|
||||
case dateFilter.lt !== undefined: {
|
||||
return DateTime.fromISO(value) < DateTime.fromISO(dateFilter.lt);
|
||||
return isBefore(parseISO(value), parseISO(dateFilter.lt));
|
||||
}
|
||||
case dateFilter.lte !== undefined: {
|
||||
return DateTime.fromISO(value) <= DateTime.fromISO(dateFilter.lte);
|
||||
const valueDate = parseISO(value);
|
||||
const filterDate = parseISO(dateFilter.lte);
|
||||
return isBefore(valueDate, filterDate) || isEqual(valueDate, filterDate);
|
||||
}
|
||||
default: {
|
||||
throw new Error(
|
||||
|
||||
Reference in New Issue
Block a user