Lazy set moment locale (#8785)

This commit is contained in:
Wei Zhu 2018-01-13 03:53:25 -06:00 committed by GitHub
parent 5dfb114842
commit 7f5922b209
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
36 changed files with 13608 additions and 7469 deletions

View File

@ -1,3 +1,4 @@
/* eslint-disable react/no-multi-comp */
import React from 'react'; import React from 'react';
import { mount } from 'enzyme'; import { mount } from 'enzyme';
import moment from 'moment'; import moment from 'moment';
@ -37,8 +38,9 @@ import srRS from '../sr_RS';
import isIS from '../is_IS'; import isIS from '../is_IS';
import arEG from '../ar_EG'; import arEG from '../ar_EG';
import ukUA from '../uk_UA'; import ukUA from '../uk_UA';
import zhCN from '../zh_CN';
const locales = [enUS, ptBR, ptPT, ruRU, esES, svSE, frBE, deDE, nlNL, caES, csCZ, koKR, etEE, skSK, jaJP, trTR, zhTW, fiFI, plPL, bgBG, enGB, frFR, nlBE, itIT, viVN, thTH, faIR, elGR, nbNO, srRS, isIS, arEG, ukUA]; const locales = [enUS, ptBR, ptPT, ruRU, esES, svSE, frBE, deDE, nlNL, caES, csCZ, koKR, etEE, skSK, jaJP, trTR, zhTW, fiFI, plPL, bgBG, enGB, frFR, nlBE, itIT, viVN, thTH, faIR, elGR, nbNO, srRS, isIS, arEG, ukUA, zhCN];
const { Option } = Select; const { Option } = Select;
const { RangePicker } = DatePicker; const { RangePicker } = DatePicker;
@ -83,16 +85,22 @@ const App = () => (
); );
describe('Locale Provider', () => { describe('Locale Provider', () => {
beforeAll(() => {
MockDate.set(moment('2017-09-18T03:30:07.795Z').valueOf() + (new Date().getTimezoneOffset() * 60 * 1000));
});
afterAll(() => {
MockDate.reset();
});
locales.forEach((locale) => { locales.forEach((locale) => {
it(`should display the text as ${locale.locale}`, () => { it(`should display the text as ${locale.locale}`, () => {
MockDate.set(moment('2017-09-18T03:30:07.795Z').valueOf() + (new Date().getTimezoneOffset() * 60 * 1000));
const wrapper = mount( const wrapper = mount(
<LocaleProvider locale={locale}> <LocaleProvider locale={locale}>
<App /> <App />
</LocaleProvider> </LocaleProvider>
); );
expect(wrapper.render()).toMatchSnapshot(); expect(wrapper.render()).toMatchSnapshot();
MockDate.reset();
}); });
}); });
@ -114,10 +122,36 @@ describe('Locale Provider', () => {
</LocaleProvider> </LocaleProvider>
); );
const currentConfirmNode = document.querySelectorAll('.ant-confirm')[document.querySelectorAll('.ant-confirm').length - 1]; const currentConfirmNode = document.querySelectorAll('.ant-confirm')[document.querySelectorAll('.ant-confirm').length - 1];
const cancelButtonText = currentConfirmNode.querySelectorAll('.ant-btn:not(.ant-btn-primary) span')[0].innerHTML; let cancelButtonText = currentConfirmNode.querySelectorAll('.ant-btn:not(.ant-btn-primary) span')[0].innerHTML;
const okButtonText = currentConfirmNode.querySelectorAll('.ant-btn-primary span')[0].innerHTML; let okButtonText = currentConfirmNode.querySelectorAll('.ant-btn-primary span')[0].innerHTML;
if (locale.locale === 'zh-cn') {
cancelButtonText = cancelButtonText.replace(' ', '');
okButtonText = okButtonText.replace(' ', '');
}
expect(cancelButtonText).toBe(locale.Modal.cancelText); expect(cancelButtonText).toBe(locale.Modal.cancelText);
expect(okButtonText).toBe(locale.Modal.okText); expect(okButtonText).toBe(locale.Modal.okText);
}); });
}); });
it('set moment locale when locale changes', () => {
class Test extends React.Component {
state = {
locale: zhCN,
}
render() {
return (
<LocaleProvider locale={this.state.locale}>
<div>
<DatePicker defaultValue={moment()} open />
</div>
</LocaleProvider>
);
}
}
const wrapper = mount(<Test />);
expect(wrapper.render()).toMatchSnapshot();
wrapper.setState({ locale: frFR });
expect(wrapper.render()).toMatchSnapshot();
});
}); });

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('ar');
import Pagination from 'rc-pagination/lib/locale/ar_EG'; import Pagination from 'rc-pagination/lib/locale/ar_EG';
import DatePicker from '../date-picker/locale/ar_EG'; import DatePicker from '../date-picker/locale/ar_EG';
import TimePicker from '../time-picker/locale/ar_EG'; import TimePicker from '../time-picker/locale/ar_EG';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('bg');
import Pagination from 'rc-pagination/lib/locale/bg_BG'; import Pagination from 'rc-pagination/lib/locale/bg_BG';
import DatePicker from '../date-picker/locale/bg_BG'; import DatePicker from '../date-picker/locale/bg_BG';
import TimePicker from '../time-picker/locale/bg_BG'; import TimePicker from '../time-picker/locale/bg_BG';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('ca');
import Pagination from 'rc-pagination/lib/locale/ca_ES'; import Pagination from 'rc-pagination/lib/locale/ca_ES';
import DatePicker from '../date-picker/locale/ca_ES'; import DatePicker from '../date-picker/locale/ca_ES';
import TimePicker from '../time-picker/locale/ca_ES'; import TimePicker from '../time-picker/locale/ca_ES';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('cs');
import Pagination from 'rc-pagination/lib/locale/cs_CZ'; import Pagination from 'rc-pagination/lib/locale/cs_CZ';
import DatePicker from '../date-picker/locale/cs_CZ'; import DatePicker from '../date-picker/locale/cs_CZ';
import TimePicker from '../time-picker/locale/cs_CZ'; import TimePicker from '../time-picker/locale/cs_CZ';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('de');
import Pagination from 'rc-pagination/lib/locale/de_DE'; import Pagination from 'rc-pagination/lib/locale/de_DE';
import DatePicker from '../date-picker/locale/de_DE'; import DatePicker from '../date-picker/locale/de_DE';
import TimePicker from '../time-picker/locale/de_DE'; import TimePicker from '../time-picker/locale/de_DE';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('el');
import Pagination from 'rc-pagination/lib/locale/el_GR'; import Pagination from 'rc-pagination/lib/locale/el_GR';
import DatePicker from '../date-picker/locale/el_GR'; import DatePicker from '../date-picker/locale/el_GR';
import TimePicker from '../time-picker/locale/el_GR'; import TimePicker from '../time-picker/locale/el_GR';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('en-gb');
import Pagination from 'rc-pagination/lib/locale/en_GB'; import Pagination from 'rc-pagination/lib/locale/en_GB';
import DatePicker from '../date-picker/locale/en_GB'; import DatePicker from '../date-picker/locale/en_GB';
import TimePicker from '../time-picker/locale/en_GB'; import TimePicker from '../time-picker/locale/en_GB';

View File

@ -1,5 +1,3 @@
import defaultLocale from './default'; import defaultLocale from './default';
import * as moment from 'moment';
moment.locale('en');
export default defaultLocale; export default defaultLocale;

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('et');
import Pagination from 'rc-pagination/lib/locale/et_EE'; import Pagination from 'rc-pagination/lib/locale/et_EE';
import DatePicker from '../date-picker/locale/et_EE'; import DatePicker from '../date-picker/locale/et_EE';
import TimePicker from '../time-picker/locale/et_EE'; import TimePicker from '../time-picker/locale/et_EE';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('fa');
import Pagination from 'rc-pagination/lib/locale/fa_IR'; import Pagination from 'rc-pagination/lib/locale/fa_IR';
import DatePicker from '../date-picker/locale/fa_IR'; import DatePicker from '../date-picker/locale/fa_IR';
import TimePicker from '../time-picker/locale/fa_IR'; import TimePicker from '../time-picker/locale/fa_IR';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('fi');
import Pagination from 'rc-pagination/lib/locale/fi_FI'; import Pagination from 'rc-pagination/lib/locale/fi_FI';
import DatePicker from '../date-picker/locale/fi_FI'; import DatePicker from '../date-picker/locale/fi_FI';
import TimePicker from '../time-picker/locale/fi_FI'; import TimePicker from '../time-picker/locale/fi_FI';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('fr');
import Pagination from 'rc-pagination/lib/locale/fr_BE'; import Pagination from 'rc-pagination/lib/locale/fr_BE';
import DatePicker from '../date-picker/locale/fr_BE'; import DatePicker from '../date-picker/locale/fr_BE';
import TimePicker from '../time-picker/locale/fr_BE'; import TimePicker from '../time-picker/locale/fr_BE';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('fr');
import Pagination from 'rc-pagination/lib/locale/fr_FR'; import Pagination from 'rc-pagination/lib/locale/fr_FR';
import DatePicker from '../date-picker/locale/fr_FR'; import DatePicker from '../date-picker/locale/fr_FR';
import TimePicker from '../time-picker/locale/fr_FR'; import TimePicker from '../time-picker/locale/fr_FR';

View File

@ -1,28 +1,42 @@
import * as React from 'react'; import * as React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import * as moment from 'moment';
import { ModalLocale, changeConfirmLocale } from '../modal/locale'; 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 { export interface LocaleProviderProps {
locale: { locale: Locale;
Pagination?: Object,
DatePicker?: Object,
TimePicker?: Object,
Calendar?: Object,
Table?: Object,
Modal?: ModalLocale,
Popconfirm?: Object,
Transfer?: Object,
Select?: Object,
Upload?: Object,
};
children?: React.ReactElement<any>; children?: React.ReactElement<any>;
} }
function setMomentLocale(locale: Locale) {
if (locale && locale.locale) {
moment.locale(locale.locale);
}
}
export default class LocaleProvider extends React.Component<LocaleProviderProps, any> { export default class LocaleProvider extends React.Component<LocaleProviderProps, any> {
static propTypes = { static propTypes = {
locale: PropTypes.object, locale: PropTypes.object,
}; };
static defaultProps = {
locale: {},
};
static childContextTypes = { static childContextTypes = {
antLocale: PropTypes.object, antLocale: PropTypes.object,
}; };
@ -37,15 +51,24 @@ export default class LocaleProvider extends React.Component<LocaleProviderProps,
} }
componentWillMount() { componentWillMount() {
setMomentLocale(this.props.locale);
this.componentDidUpdate(); this.componentDidUpdate();
} }
componentWillReceiveProps(nextProps: LocaleProviderProps) {
const { locale } = this.props;
const nextLocale = nextProps.locale;
if (locale.locale !== nextLocale.locale) {
setMomentLocale(nextProps.locale);
}
}
componentDidUpdate() { componentDidUpdate() {
const { locale } = this.props; const { locale } = this.props;
changeConfirmLocale(locale && locale.Modal); changeConfirmLocale(locale && locale.Modal);
} }
componentWillUnMount() { componentWillUnmount() {
changeConfirmLocale(); changeConfirmLocale();
} }

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('is');
import Pagination from 'rc-pagination/lib/locale/is_IS'; import Pagination from 'rc-pagination/lib/locale/is_IS';
import DatePicker from '../date-picker/locale/is_IS'; import DatePicker from '../date-picker/locale/is_IS';
import TimePicker from '../time-picker/locale/is_IS'; import TimePicker from '../time-picker/locale/is_IS';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('it');
import Pagination from 'rc-pagination/lib/locale/it_IT'; import Pagination from 'rc-pagination/lib/locale/it_IT';
import DatePicker from '../date-picker/locale/it_IT'; import DatePicker from '../date-picker/locale/it_IT';
import TimePicker from '../time-picker/locale/it_IT'; import TimePicker from '../time-picker/locale/it_IT';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('ja');
import Pagination from 'rc-pagination/lib/locale/ja_JP'; import Pagination from 'rc-pagination/lib/locale/ja_JP';
import DatePicker from '../date-picker/locale/ja_JP'; import DatePicker from '../date-picker/locale/ja_JP';
import TimePicker from '../time-picker/locale/ja_JP'; import TimePicker from '../time-picker/locale/ja_JP';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('ko');
import Pagination from 'rc-pagination/lib/locale/ko_KR'; import Pagination from 'rc-pagination/lib/locale/ko_KR';
import DatePicker from '../date-picker/locale/ko_KR'; import DatePicker from '../date-picker/locale/ko_KR';
import TimePicker from '../time-picker/locale/ko_KR'; import TimePicker from '../time-picker/locale/ko_KR';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('nb');
import Pagination from 'rc-pagination/lib/locale/nb_NO'; import Pagination from 'rc-pagination/lib/locale/nb_NO';
import DatePicker from '../date-picker/locale/nb_NO'; import DatePicker from '../date-picker/locale/nb_NO';
import TimePicker from '../time-picker/locale/nb_NO'; import TimePicker from '../time-picker/locale/nb_NO';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('nl-be');
import Pagination from 'rc-pagination/lib/locale/nl_BE'; import Pagination from 'rc-pagination/lib/locale/nl_BE';
import DatePicker from '../date-picker/locale/nl_BE'; import DatePicker from '../date-picker/locale/nl_BE';
import TimePicker from '../time-picker/locale/nl_BE'; import TimePicker from '../time-picker/locale/nl_BE';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('nl');
import Pagination from 'rc-pagination/lib/locale/nl_NL'; import Pagination from 'rc-pagination/lib/locale/nl_NL';
import DatePicker from '../date-picker/locale/nl_NL'; import DatePicker from '../date-picker/locale/nl_NL';
import TimePicker from '../time-picker/locale/nl_NL'; import TimePicker from '../time-picker/locale/nl_NL';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('pl');
import Pagination from 'rc-pagination/lib/locale/pl_PL'; import Pagination from 'rc-pagination/lib/locale/pl_PL';
import DatePicker from '../date-picker/locale/pl_PL'; import DatePicker from '../date-picker/locale/pl_PL';
import TimePicker from '../time-picker/locale/pl_PL'; import TimePicker from '../time-picker/locale/pl_PL';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('pt-br');
import Pagination from 'rc-pagination/lib/locale/pt_BR'; import Pagination from 'rc-pagination/lib/locale/pt_BR';
import DatePicker from '../date-picker/locale/pt_BR'; import DatePicker from '../date-picker/locale/pt_BR';
import TimePicker from '../time-picker/locale/pt_BR'; import TimePicker from '../time-picker/locale/pt_BR';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('pt');
import Pagination from 'rc-pagination/lib/locale/pt_PT'; import Pagination from 'rc-pagination/lib/locale/pt_PT';
import DatePicker from '../date-picker/locale/pt_PT'; import DatePicker from '../date-picker/locale/pt_PT';
import TimePicker from '../time-picker/locale/pt_PT'; import TimePicker from '../time-picker/locale/pt_PT';

View File

@ -1,10 +1,3 @@
/**
* Created by Andrey Gayvoronsky on 13/04/16.
*/
import * as moment from 'moment';
moment.locale('ru');
import Pagination from 'rc-pagination/lib/locale/ru_RU'; import Pagination from 'rc-pagination/lib/locale/ru_RU';
import DatePicker from '../date-picker/locale/ru_RU'; import DatePicker from '../date-picker/locale/ru_RU';
import TimePicker from '../time-picker/locale/ru_RU'; import TimePicker from '../time-picker/locale/ru_RU';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('sk');
import Pagination from 'rc-pagination/lib/locale/sk_SK'; import Pagination from 'rc-pagination/lib/locale/sk_SK';
import DatePicker from '../date-picker/locale/sk_SK'; import DatePicker from '../date-picker/locale/sk_SK';
import TimePicker from '../time-picker/locale/sk_SK'; import TimePicker from '../time-picker/locale/sk_SK';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('sr');
import Pagination from 'rc-pagination/lib/locale/sr_RS'; import Pagination from 'rc-pagination/lib/locale/sr_RS';
import DatePicker from '../date-picker/locale/sr_RS'; import DatePicker from '../date-picker/locale/sr_RS';
import TimePicker from '../time-picker/locale/sr_RS'; import TimePicker from '../time-picker/locale/sr_RS';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('sv');
import Pagination from 'rc-pagination/lib/locale/sv_SE'; import Pagination from 'rc-pagination/lib/locale/sv_SE';
import DatePicker from '../date-picker/locale/sv_SE'; import DatePicker from '../date-picker/locale/sv_SE';
import TimePicker from '../time-picker/locale/sv_SE'; import TimePicker from '../time-picker/locale/sv_SE';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('th');
import Pagination from 'rc-pagination/lib/locale/th_TH'; import Pagination from 'rc-pagination/lib/locale/th_TH';
import DatePicker from '../date-picker/locale/th_TH'; import DatePicker from '../date-picker/locale/th_TH';
import TimePicker from '../time-picker/locale/th_TH'; import TimePicker from '../time-picker/locale/th_TH';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('tr');
import Pagination from 'rc-pagination/lib/locale/en_US'; import Pagination from 'rc-pagination/lib/locale/en_US';
import DatePicker from '../date-picker/locale/tr_TR'; import DatePicker from '../date-picker/locale/tr_TR';
import TimePicker from '../time-picker/locale/tr_TR'; import TimePicker from '../time-picker/locale/tr_TR';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('uk');
import Pagination from 'rc-pagination/lib/locale/uk_UA'; import Pagination from 'rc-pagination/lib/locale/uk_UA';
import DatePicker from '../date-picker/locale/uk_UA'; import DatePicker from '../date-picker/locale/uk_UA';
import TimePicker from '../time-picker/locale/uk_UA'; import TimePicker from '../time-picker/locale/uk_UA';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('vi');
import Pagination from 'rc-pagination/lib/locale/vi_VN'; import Pagination from 'rc-pagination/lib/locale/vi_VN';
import DatePicker from '../date-picker/locale/vi_VN'; import DatePicker from '../date-picker/locale/vi_VN';
import TimePicker from '../time-picker/locale/vi_VN'; import TimePicker from '../time-picker/locale/vi_VN';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('zh-cn');
import Pagination from 'rc-pagination/lib/locale/zh_CN'; import Pagination from 'rc-pagination/lib/locale/zh_CN';
import DatePicker from '../date-picker/locale/zh_CN'; import DatePicker from '../date-picker/locale/zh_CN';
import TimePicker from '../time-picker/locale/zh_CN'; import TimePicker from '../time-picker/locale/zh_CN';

View File

@ -1,6 +1,3 @@
import * as moment from 'moment';
moment.locale('zh-tw');
import Pagination from 'rc-pagination/lib/locale/zh_TW'; import Pagination from 'rc-pagination/lib/locale/zh_TW';
import DatePicker from '../date-picker/locale/zh_TW'; import DatePicker from '../date-picker/locale/zh_TW';
import TimePicker from '../time-picker/locale/zh_TW'; import TimePicker from '../time-picker/locale/zh_TW';