Skip to content
This repository was archived by the owner on Sep 9, 2024. It is now read-only.

Commit 2c06660

Browse files
committed
feat: date fns locales
1 parent e655745 commit 2c06660

File tree

11 files changed

+181
-39
lines changed

11 files changed

+181
-39
lines changed

cypress/utils/steps.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import 'cypress-real-events';
2-
import format from 'date-fns/format';
2+
import { format } from 'date-fns/format';
33

44
import { editorStatus, notifications, publishTypes, workflowStatus } from './constants';
55

packages/core/dev-test/config.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ site_url: 'https://example.com'
55
media_folder: /assets/uploads
66
media_library:
77
folder_support: true
8-
locale: en
8+
locale: fr
99
i18n:
1010
# Required and can be one of multiple_folders, multiple_files or single_file
1111
# multiple_folders - persists files in `<folder>/<locale>/<slug>.<extension>`

packages/core/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
"@mui/base": "5.0.0-beta.30",
7272
"@mui/material": "5.15.3",
7373
"@mui/system": "5.15.3",
74-
"@mui/x-date-pickers": "6.18.6",
74+
"@mui/x-date-pickers": "7.3.1",
7575
"@reduxjs/toolkit": "1.9.7",
7676
"@styled-icons/bootstrap": "10.47.0",
7777
"@styled-icons/fa-brands": "10.47.0",
@@ -97,7 +97,7 @@
9797
"common-tags": "1.8.2",
9898
"copy-text-to-clipboard": "3.2.0",
9999
"create-react-class": "15.7.0",
100-
"date-fns": "2.30.0",
100+
"date-fns": "3.6.0",
101101
"deepmerge": "4.3.1",
102102
"diacritics": "1.3.0",
103103
"escape-html": "1.0.3",

packages/core/src/components/collections/entries/EntryCard.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Info as InfoIcon } from '@styled-icons/material-outlined/Info';
2-
import format from 'date-fns/format';
3-
import parse from 'date-fns/parse';
2+
import { format } from 'date-fns/format';
3+
import { parse } from 'date-fns/parse';
44
import React, { useEffect, useMemo, useState } from 'react';
55

66
import useTranslate from '@staticcms/core/lib/hooks/useTranslate';

packages/core/src/lib/widgets/stringTemplate.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import format from 'date-fns/format';
2-
import parse from 'date-fns/parse';
1+
import { format } from 'date-fns/format';
2+
import { parse } from 'date-fns/parse';
33
import get from 'lodash/get';
44
import trimEnd from 'lodash/trimEnd';
55
import truncate from 'lodash/truncate';

packages/core/src/widgets/datetime/DateTimeControl.tsx

+13-6
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
import { unstable_useForkRef as useForkRef } from '@mui/utils';
2-
import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';
2+
import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3';
33
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
44
import { DateTimePicker } from '@mui/x-date-pickers/DateTimePicker';
55
import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
66
import { TimePicker } from '@mui/x-date-pickers/TimePicker';
7-
import formatDate from 'date-fns/format';
8-
import parse from 'date-fns/parse';
9-
import parseISO from 'date-fns/parseISO';
7+
import { formatDate } from 'date-fns/format';
8+
import { parse } from 'date-fns/parse';
9+
import { parseISO } from 'date-fns/parseISO';
1010
import React, { useCallback, useMemo, useRef, useState } from 'react';
1111

1212
import Field from '@staticcms/core/components/common/field/Field';
1313
import classNames from '@staticcms/core/lib/util/classNames.util';
1414
import { generateClassNames } from '@staticcms/core/lib/util/theming.util';
1515
import NowButton from './components/NowButton';
1616
import { DEFAULT_DATETIME_FORMAT } from './constants';
17-
import { useDatetimeFormats } from './datetime.util';
17+
import { getDateFnsLocale, useDatetimeFormats } from './datetime.util';
1818
import { localToUTC } from './utc.util';
1919

2020
import type { DateTimeField, WidgetControlProps } from '@staticcms/core';
@@ -43,6 +43,7 @@ const DateTimeControl: FC<WidgetControlProps<string | Date, DateTimeField>> = ({
4343
errors,
4444
hasErrors,
4545
forSingleList,
46+
config: { locale },
4647
onChange,
4748
}) => {
4849
const ref = useRef<HTMLInputElement | null>(null);
@@ -194,6 +195,8 @@ const DateTimeControl: FC<WidgetControlProps<string | Date, DateTimeField>> = ({
194195
rootRef,
195196
]);
196197

198+
const dateLocale = useMemo(() => (locale ? getDateFnsLocale(locale) : undefined), [locale]);
199+
197200
return (
198201
<Field
199202
inputRef={!open ? ref : undefined}
@@ -213,7 +216,11 @@ const DateTimeControl: FC<WidgetControlProps<string | Date, DateTimeField>> = ({
213216
wrapperClassName={classes.wrapper}
214217
>
215218
<div className={classes['inputs']}>
216-
<LocalizationProvider key="localization-provider" dateAdapter={AdapterDateFns}>
219+
<LocalizationProvider
220+
key="localization-provider"
221+
dateAdapter={AdapterDateFns}
222+
adapterLocale={dateLocale}
223+
>
217224
{dateTimePicker}
218225
</LocalizationProvider>
219226
<NowButton

packages/core/src/widgets/datetime/datetime.util.ts

+6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import * as Locales from 'date-fns/locale';
12
import { useMemo } from 'react';
23

34
import { isNotEmpty } from '@staticcms/core/lib/util/string.util';
@@ -9,6 +10,7 @@ import {
910
} from './constants';
1011

1112
import type { DateTimeField, DateTimeFormats } from '@staticcms/core';
13+
import type { Locale } from 'date-fns/locale';
1214

1315
function getDisplayFormat(
1416
dateFormat: string | boolean,
@@ -87,3 +89,7 @@ export function useDatetimeFormats(field: DateTimeField | undefined): DateTimeFo
8789
export function useDatetimeFormats(field: DateTimeField | undefined): DateTimeFormats | undefined {
8890
return useMemo(() => getDatetimeFormats(field), [field]);
8991
}
92+
93+
export function getDateFnsLocale(locale: string): Locale {
94+
return (Locales as Record<string, Locale>)[locale] ?? Locales.enUS;
95+
}

packages/core/src/widgets/datetime/getDefaultValue.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import format from 'date-fns/format';
1+
import { format } from 'date-fns/format';
22

33
import { isNotNullish } from '@staticcms/core/lib/util/null.util';
44
import { DEFAULT_DATETIME_FORMAT, DEFAULT_DATE_FORMAT, DEFAULT_TIME_FORMAT } from './constants';

packages/core/src/widgets/datetime/utc.util.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import addMinutes from 'date-fns/addMinutes';
1+
import { addMinutes } from 'date-fns/addMinutes';
22

33
export function localToUTC(dateTime: Date): Date {
44
return addMinutes(dateTime.getTime(), getTimezoneOffset(dateTime));

packages/docs/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"@emotion/styled": "11.11.0",
1919
"@mui/icons-material": "5.15.3",
2020
"@mui/material": "5.15.3",
21-
"date-fns": "2.30.0",
21+
"date-fns": "3.6.0",
2222
"gray-matter": "4.0.3",
2323
"js-yaml": "4.1.0",
2424
"next": "14.0.4",

0 commit comments

Comments
 (0)