import * as React from 'react'; import PropTypes from 'prop-types'; import * as moment from 'moment'; import interopDefault from '../_util/interopDefault'; import { ModalLocale, changeConfirmLocale } from '../modal/locale'; export interface Locale { locale: string; Pagination?: Object; DatePicker?: Object; TimePicker?: Object; Calendar?: Object; Table?: Object; Modal?: ModalLocale; Popconfirm?: Object; Transfer?: Object; Select?: Object; Upload?: Object; } export interface LocaleProviderProps { locale: Locale; children?: React.ReactElement; } function setMomentLocale(locale: Locale) { if (locale && locale.locale) { interopDefault(moment).locale(locale.locale); } else { interopDefault(moment).locale('en'); } } export default class LocaleProvider extends React.Component { static propTypes = { locale: PropTypes.object, }; static defaultProps = { locale: {}, }; static childContextTypes = { antLocale: PropTypes.object, }; constructor(props: LocaleProviderProps) { super(props); setMomentLocale(props.locale); changeConfirmLocale(props.locale && props.locale.Modal); } getChildContext() { return { antLocale: { ...this.props.locale, exist: true, }, }; } componentWillReceiveProps(nextProps: LocaleProviderProps) { const { locale } = this.props; const nextLocale = nextProps.locale; if (locale !== nextLocale) { setMomentLocale(nextProps.locale); } } componentDidUpdate() { const { locale } = this.props; changeConfirmLocale(locale && locale.Modal); } componentWillUnmount() { changeConfirmLocale(); } render() { return React.Children.only(this.props.children); } }