UNPKG

@6thquake/react-material

Version:

React components that implement Google's Material Design.

133 lines (108 loc) 2.94 kB
import _extends from "@babel/runtime/helpers/extends"; /** * @ignore - do not document. */ import React from 'react'; import PropTypes from 'prop-types'; import en, { en_us, zh_cn, zh_tw } from './languages'; import DateTimePickersProvider from '../Picker/DateTimePickersProvider'; import MomentUtils from '../Picker/utils/moment-utils'; import moment from 'moment'; import 'moment/locale/en-ca'; import 'moment/locale/zh-cn'; import deepmerge from 'deepmerge'; const languages = { 'zh-tw': zh_tw, 'zh-cn': zh_cn, zh: zh_cn, 'en-ca': en_us, 'en-us': en_us, en }; const getLanguage = (lang, value) => { const _languages = value || languages; if (lang) { lang = lang.toLowerCase(); if (_languages[lang]) { return lang; } lang = lang.split('-')[0]; if (_languages[lang]) { return lang; } } return 'en'; }; const getLocaleResource = (lang, value) => { const lang1 = getLanguage(lang); if (!value) { return languages[lang1]; } const lang2 = getLanguage(lang, value); return _extends({}, deepmerge(languages[lang1], value[lang2])); }; const getDefaultLocale = () => { const wg = global || window; const lang = wg && wg.navigator && wg.navigator.language; return getLanguage(lang); }; const getDefaultLocaleResource = () => { const lang = getDefaultLocale(); return getLocaleResource(lang); }; const defaultLocale = getDefaultLocaleResource(); const LocaleContext = React.createContext(defaultLocale); const LocaleConsumer = LocaleContext.Consumer; class LocaleProvider extends React.Component { constructor(props) { super(props); this.changeLocale = locale => () => { this.setState({ locale }); }; this.getLocale = () => this.state.locale; this.state = { locale: props.locale || defaultLocale.locale }; } render() { const { children } = this.props; const { locale } = this.state; if (locale) { moment.locale(locale); LocaleProvider.locale = this.state.locale; } const value = _extends({}, { changeLocale: this.changeLocale.bind(this) }, getLocaleResource(locale, this.props.value)); return React.createElement(LocaleContext.Provider, { locale: locale, value: value }, React.createElement(DateTimePickersProvider, { utils: MomentUtils, locale: locale, moment: moment }, children)); } } LocaleProvider.locale = 'en'; process.env.NODE_ENV !== "production" ? LocaleProvider.propTypes = { /** * The International resources */ children: PropTypes.node, /** * Type of locale, such as en, zh, en_us... */ locale: PropTypes.string, /** * You can wrap a node. */ value: PropTypes.object } : void 0; export { LocaleContext, LocaleProvider, LocaleConsumer, getLanguage, getLocaleResource, getDefaultLocaleResource, getLanguage as getLocale, getDefaultLocale };