/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import { extendedDayjs as dayjs } from '@superset-ui/core/utils/dates'; import { useEffect, useState } from 'react'; import { useSelector } from 'react-redux'; import { ExplorePageState } from 'src/explore/types'; import 'dayjs/locale/en'; import 'dayjs/locale/fr'; import 'dayjs/locale/es'; import 'dayjs/locale/it'; import 'dayjs/locale/zh-cn'; import 'dayjs/locale/ja'; import 'dayjs/locale/de'; import 'dayjs/locale/pt'; import 'dayjs/locale/pt-br'; import 'dayjs/locale/ru'; import 'dayjs/locale/ko'; import 'dayjs/locale/sk'; import 'dayjs/locale/sl'; import 'dayjs/locale/nl'; /* eslint-disable no-restricted-imports */ import { Locale } from 'antd/es/locale'; export const LOCALE_MAPPING = { en: () => import('antd/locale/en_US'), fr: () => import('antd/locale/fr_FR'), es: () => import('antd/locale/es_ES'), it: () => import('antd/locale/it_IT'), zh: () => import('antd/locale/zh_CN'), ja: () => import('antd/locale/ja_JP'), de: () => import('antd/locale/de_DE'), pt: () => import('antd/locale/pt_PT'), pt_BR: () => import('antd/locale/pt_BR'), ru: () => import('antd/locale/ru_RU'), ko: () => import('antd/locale/ko_KR'), sk: () => import('antd/locale/sk_SK'), sl: () => import('antd/locale/sl_SI'), nl: () => import('antd/locale/nl_NL'), }; /* eslint-enable no-restricted-imports */ export const useLocale = (): Locale | undefined | null => { const [datePickerLocale, setDatePickerLocale] = useState< Locale | undefined | null >(null); // Retrieve the locale from Redux store const localFromFlaskBabel = useSelector( (state: ExplorePageState) => state?.common?.locale, ); useEffect(() => { if (datePickerLocale === null) { if ( localFromFlaskBabel && LOCALE_MAPPING[localFromFlaskBabel as keyof typeof LOCALE_MAPPING] ) { LOCALE_MAPPING[localFromFlaskBabel as keyof typeof LOCALE_MAPPING]() .then((locale: { default: Locale }) => { setDatePickerLocale(locale.default); dayjs.locale(localFromFlaskBabel); }) .catch(() => setDatePickerLocale(undefined)); } else { setDatePickerLocale(undefined); } } }, [datePickerLocale, localFromFlaskBabel]); return datePickerLocale; };