feat: date fns locales (#1108)
This commit is contained in:
committed by
GitHub
parent
1d0141fcc8
commit
7a85aaaa4a
@ -71,7 +71,7 @@
|
||||
"@mui/base": "5.0.0-beta.30",
|
||||
"@mui/material": "5.15.3",
|
||||
"@mui/system": "5.15.3",
|
||||
"@mui/x-date-pickers": "6.18.6",
|
||||
"@mui/x-date-pickers": "7.3.1",
|
||||
"@reduxjs/toolkit": "1.9.7",
|
||||
"@styled-icons/bootstrap": "10.47.0",
|
||||
"@styled-icons/fa-brands": "10.47.0",
|
||||
@ -97,7 +97,7 @@
|
||||
"common-tags": "1.8.2",
|
||||
"copy-text-to-clipboard": "3.2.0",
|
||||
"create-react-class": "15.7.0",
|
||||
"date-fns": "2.30.0",
|
||||
"date-fns": "3.6.0",
|
||||
"deepmerge": "4.3.1",
|
||||
"diacritics": "1.3.0",
|
||||
"escape-html": "1.0.3",
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { Info as InfoIcon } from '@styled-icons/material-outlined/Info';
|
||||
import format from 'date-fns/format';
|
||||
import parse from 'date-fns/parse';
|
||||
import { format } from 'date-fns/format';
|
||||
import { parse } from 'date-fns/parse';
|
||||
import React, { useEffect, useMemo, useState } from 'react';
|
||||
|
||||
import useTranslate from '@staticcms/core/lib/hooks/useTranslate';
|
||||
|
@ -1,5 +1,5 @@
|
||||
import format from 'date-fns/format';
|
||||
import parse from 'date-fns/parse';
|
||||
import { format } from 'date-fns/format';
|
||||
import { parse } from 'date-fns/parse';
|
||||
import get from 'lodash/get';
|
||||
import trimEnd from 'lodash/trimEnd';
|
||||
import truncate from 'lodash/truncate';
|
||||
|
@ -1,12 +1,12 @@
|
||||
import { unstable_useForkRef as useForkRef } from '@mui/utils';
|
||||
import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';
|
||||
import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3';
|
||||
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
|
||||
import { DateTimePicker } from '@mui/x-date-pickers/DateTimePicker';
|
||||
import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
|
||||
import { TimePicker } from '@mui/x-date-pickers/TimePicker';
|
||||
import formatDate from 'date-fns/format';
|
||||
import parse from 'date-fns/parse';
|
||||
import parseISO from 'date-fns/parseISO';
|
||||
import { formatDate } from 'date-fns/format';
|
||||
import { parse } from 'date-fns/parse';
|
||||
import { parseISO } from 'date-fns/parseISO';
|
||||
import React, { useCallback, useMemo, useRef, useState } from 'react';
|
||||
|
||||
import Field from '@staticcms/core/components/common/field/Field';
|
||||
@ -14,7 +14,7 @@ import classNames from '@staticcms/core/lib/util/classNames.util';
|
||||
import { generateClassNames } from '@staticcms/core/lib/util/theming.util';
|
||||
import NowButton from './components/NowButton';
|
||||
import { DEFAULT_DATETIME_FORMAT } from './constants';
|
||||
import { useDatetimeFormats } from './datetime.util';
|
||||
import { getDateFnsLocale, useDatetimeFormats } from './datetime.util';
|
||||
import { localToUTC } from './utc.util';
|
||||
|
||||
import type { DateTimeField, WidgetControlProps } from '@staticcms/core';
|
||||
@ -43,6 +43,7 @@ const DateTimeControl: FC<WidgetControlProps<string | Date, DateTimeField>> = ({
|
||||
errors,
|
||||
hasErrors,
|
||||
forSingleList,
|
||||
config: { locale },
|
||||
onChange,
|
||||
}) => {
|
||||
const ref = useRef<HTMLInputElement | null>(null);
|
||||
@ -194,6 +195,8 @@ const DateTimeControl: FC<WidgetControlProps<string | Date, DateTimeField>> = ({
|
||||
rootRef,
|
||||
]);
|
||||
|
||||
const dateLocale = useMemo(() => (locale ? getDateFnsLocale(locale) : undefined), [locale]);
|
||||
|
||||
return (
|
||||
<Field
|
||||
inputRef={!open ? ref : undefined}
|
||||
@ -213,7 +216,11 @@ const DateTimeControl: FC<WidgetControlProps<string | Date, DateTimeField>> = ({
|
||||
wrapperClassName={classes.wrapper}
|
||||
>
|
||||
<div className={classes['inputs']}>
|
||||
<LocalizationProvider key="localization-provider" dateAdapter={AdapterDateFns}>
|
||||
<LocalizationProvider
|
||||
key="localization-provider"
|
||||
dateAdapter={AdapterDateFns}
|
||||
adapterLocale={dateLocale}
|
||||
>
|
||||
{dateTimePicker}
|
||||
</LocalizationProvider>
|
||||
<NowButton
|
||||
|
@ -1,3 +1,4 @@
|
||||
import * as Locales from 'date-fns/locale';
|
||||
import { useMemo } from 'react';
|
||||
|
||||
import { isNotEmpty } from '@staticcms/core/lib/util/string.util';
|
||||
@ -9,6 +10,7 @@ import {
|
||||
} from './constants';
|
||||
|
||||
import type { DateTimeField, DateTimeFormats } from '@staticcms/core';
|
||||
import type { Locale } from 'date-fns/locale';
|
||||
|
||||
function getDisplayFormat(
|
||||
dateFormat: string | boolean,
|
||||
@ -87,3 +89,7 @@ export function useDatetimeFormats(field: DateTimeField | undefined): DateTimeFo
|
||||
export function useDatetimeFormats(field: DateTimeField | undefined): DateTimeFormats | undefined {
|
||||
return useMemo(() => getDatetimeFormats(field), [field]);
|
||||
}
|
||||
|
||||
export function getDateFnsLocale(locale: string): Locale {
|
||||
return (Locales as Record<string, Locale>)[locale] ?? Locales.enUS;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
import format from 'date-fns/format';
|
||||
import { format } from 'date-fns/format';
|
||||
|
||||
import { isNotNullish } from '@staticcms/core/lib/util/null.util';
|
||||
import { DEFAULT_DATETIME_FORMAT, DEFAULT_DATE_FORMAT, DEFAULT_TIME_FORMAT } from './constants';
|
||||
|
@ -1,4 +1,4 @@
|
||||
import addMinutes from 'date-fns/addMinutes';
|
||||
import { addMinutes } from 'date-fns/addMinutes';
|
||||
|
||||
export function localToUTC(dateTime: Date): Date {
|
||||
return addMinutes(dateTime.getTime(), getTimezoneOffset(dateTime));
|
||||
|
@ -18,7 +18,7 @@
|
||||
"@emotion/styled": "11.11.0",
|
||||
"@mui/icons-material": "5.15.3",
|
||||
"@mui/material": "5.15.3",
|
||||
"date-fns": "2.30.0",
|
||||
"date-fns": "3.6.0",
|
||||
"gray-matter": "4.0.3",
|
||||
"js-yaml": "4.1.0",
|
||||
"next": "14.0.4",
|
||||
|
@ -1,6 +1,4 @@
|
||||
import addMinutes from 'date-fns/addMinutes';
|
||||
import format from 'date-fns/format';
|
||||
import parseISO from 'date-fns/parseISO';
|
||||
import { addMinutes, format, parseISO } from 'date-fns';
|
||||
import { useEffect, useState } from 'react';
|
||||
|
||||
function formatDate(date: Date, dateFormat: string) {
|
||||
|
@ -1,4 +1,4 @@
|
||||
import formatISO from 'date-fns/formatISO';
|
||||
import { formatISO } from 'date-fns';
|
||||
import Head from 'next/head';
|
||||
import { jsonLdScriptProps } from 'react-schemaorg';
|
||||
|
||||
|
@ -3,8 +3,7 @@ import AlertTitle from '@mui/material/AlertTitle';
|
||||
import Box from '@mui/material/Box';
|
||||
import Typography from '@mui/material/Typography';
|
||||
import { styled } from '@mui/material/styles';
|
||||
import format from 'date-fns/format';
|
||||
import parseISO from 'date-fns/parseISO';
|
||||
import { format, parseISO } from 'date-fns';
|
||||
import Link from 'next/link';
|
||||
import { useMemo } from 'react';
|
||||
|
||||
|
Reference in New Issue
Block a user