Skip to content

Commit b32e39c

Browse files
authored
feat(Calendar): add support of LocaleProvider
now can use LocaleProvider to control locale of Calendar re #43 close #44
1 parent 873c052 commit b32e39c

File tree

14 files changed

+3667
-20
lines changed

14 files changed

+3667
-20
lines changed

.styleguide/style.css

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,11 @@ form.demo-form:before {
7474
.clear-fixed:after {
7575
clear: both;
7676
}
77+
78+
.noeditor-wrap {
79+
padding: 16px;
80+
border: 1px #e8e8e8 solid;
81+
border-radius: 3px;
82+
width: 100%;
83+
display: inline-block;
84+
}

src/components/Calendar/Calendar.jsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,18 @@ import React, { Component } from 'react';
22
import PropTypes from 'prop-types';
33
import moment from 'moment';
44

5-
import { isDateDisabled, getValidDate } from './utils';
5+
import localeConsumerDecorator from 'src/components/LocaleProvider/localeConsumerDecorator';
66

7+
import { isDateDisabled, getValidDate } from './utils';
78
import { CalendarWrap, prefixCls } from './style';
9+
import LOCALE from './locale/zh_CN';
810

911
import 'moment/locale/zh-cn';
10-
import locale from 'rc-calendar/lib/locale/zh_CN';
1112
moment()
1213
.locale('zh-cn')
1314
.utcOffset(8);
1415

16+
@localeConsumerDecorator({ defaultLocale: LOCALE, localeName: 'Calendar' })
1517
class Calendar extends Component {
1618
static propTypes = {
1719
/** 选中的时间,受控,Moment 类型 */
@@ -55,7 +57,6 @@ const calCalendarProps = ({ rules }) => {
5557
prefixCls: prefixCls,
5658
showDateInput: false,
5759
showToday: false,
58-
locale: locale,
5960
disabledDate: (date, currentValue) => {
6061
return isDateDisabled(date, currentValue, rules);
6162
}
@@ -64,4 +65,4 @@ const calCalendarProps = ({ rules }) => {
6465

6566
export default Calendar;
6667

67-
export { locale, calCalendarProps };
68+
export { calCalendarProps };
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
export default {
2+
today: 'Today',
3+
now: 'Now',
4+
backToToday: 'Back to today',
5+
ok: 'Ok',
6+
clear: 'Clear',
7+
month: 'Month',
8+
year: 'Year',
9+
timeSelect: 'select time',
10+
dateSelect: 'select date',
11+
weekSelect: 'Choose a week',
12+
monthSelect: 'Choose a month',
13+
yearSelect: 'Choose a year',
14+
decadeSelect: 'Choose a decade',
15+
yearFormat: 'YYYY',
16+
dateFormat: 'M/D/YYYY',
17+
dayFormat: 'D',
18+
dateTimeFormat: 'M/D/YYYY HH:mm:ss',
19+
monthBeforeYear: true,
20+
previousMonth: 'Previous month (PageUp)',
21+
nextMonth: 'Next month (PageDown)',
22+
previousYear: 'Last year (Control + left)',
23+
nextYear: 'Next year (Control + right)',
24+
previousDecade: 'Last decade',
25+
nextDecade: 'Next decade',
26+
previousCentury: 'Last century',
27+
nextCentury: 'Next century'
28+
};
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
export default {
2+
today: '今天',
3+
now: '此刻',
4+
backToToday: '返回今天',
5+
ok: '确定',
6+
timeSelect: '选择时间',
7+
dateSelect: '选择日期',
8+
weekSelect: '选择周',
9+
clear: '清除',
10+
month: '月',
11+
year: '年',
12+
previousMonth: '上个月 (翻页上键)',
13+
nextMonth: '下个月 (翻页下键)',
14+
monthSelect: '选择月份',
15+
yearSelect: '选择年份',
16+
decadeSelect: '选择年代',
17+
yearFormat: 'YYYY年',
18+
dayFormat: 'D日',
19+
dateFormat: 'YYYY年M月D日',
20+
dateTimeFormat: 'YYYY年M月D日 HH时mm分ss秒',
21+
previousYear: '上一年 (Control键加左方向键)',
22+
nextYear: '下一年 (Control键加右方向键)',
23+
previousDecade: '上一年代',
24+
nextDecade: '下一年代',
25+
previousCentury: '上一世纪',
26+
nextCentury: '下一世纪'
27+
};

src/components/LocaleProvider/LocaleProvider.md

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,15 @@ const Demo = () => (
3434
效果:
3535

3636
```js noeditor
37-
const locale = require('src/components/LocaleProvider/locale/en_US').default;
38-
const Demo = () => (
39-
<div>
40-
<LocaleProvider locale={locale}>
41-
<Pagination total={100} showSizeChanger showQuickJumper={{ goButton: true }} />
42-
</LocaleProvider>
43-
</div>
44-
);
37+
const Demo = require('./__demo__/localefile').default;
38+
39+
<Demo />;
40+
```
41+
42+
* 全语言列表
43+
44+
```js noeditor
45+
const Demo = require('./__demo__/list').default;
46+
4547
<Demo />;
4648
```
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import React, { Component } from 'react';
2+
import moment from 'moment';
3+
4+
import Radio from 'src/components/Radio';
5+
import Form from 'src/components/Form';
6+
import LocaleProvider from 'src/components/LocaleProvider';
7+
import Pagination from 'src/components/Pagination';
8+
import Calendar from 'src/components/Calendar';
9+
import DatePicker from 'src/components/DatePicker';
10+
import zh_CN from 'src/components/LocaleProvider/locale/zh_CN';
11+
import en_US from 'src/components/LocaleProvider/locale/en_US';
12+
13+
import 'moment/locale/zh-cn';
14+
const localeMap = {
15+
zh_CN,
16+
en_US
17+
};
18+
const momentLocaleMap = {
19+
zh_CN: 'zh-cn',
20+
en_US: 'en'
21+
};
22+
const defaultLocale = 'zh_CN';
23+
class Demo extends Component {
24+
state = {
25+
localeStr: defaultLocale,
26+
momentLocale: momentLocaleMap[defaultLocale],
27+
locale: localeMap[defaultLocale]
28+
};
29+
setLocale = locale => {
30+
moment.locale(momentLocaleMap[locale]);
31+
this.setState({
32+
localeStr: locale,
33+
momentLocale: momentLocaleMap[locale],
34+
locale: localeMap[locale]
35+
});
36+
};
37+
componentWillUnmount = () => {
38+
moment.locale(momentLocaleMap[defaultLocale]);
39+
};
40+
render() {
41+
const itemLayout = {
42+
labelCol: {
43+
span: 3
44+
},
45+
controllerCol: {
46+
span: 9
47+
}
48+
};
49+
const list = (
50+
<div>
51+
<div className="demo-wrap">
52+
<Pagination total={100} showSizeChanger showQuickJumper={{ goButton: true }} />
53+
</div>
54+
<div className="demo-wrap">
55+
<Calendar value={moment()} />
56+
</div>
57+
</div>
58+
);
59+
const { localeStr, locale } = this.state;
60+
61+
return (
62+
<div className="noeditor-wrap">
63+
<Form className="demo-wrap">
64+
<Form.Item label="locale" {...itemLayout}>
65+
<Radio.Group
66+
styleType="button"
67+
value={localeStr}
68+
onChange={this.setLocale}
69+
options={['zh_CN', 'en_US'].map(v => ({ value: v }))}
70+
/>
71+
</Form.Item>
72+
</Form>
73+
<div>
74+
<LocaleProvider locale={locale}>{list}</LocaleProvider>
75+
</div>
76+
</div>
77+
);
78+
}
79+
}
80+
81+
export default Demo;

src/components/LocaleProvider/__demo__/localefile.jsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
// only for snap test
21
import React from 'react';
2+
33
import LocaleProvider from 'src/components/LocaleProvider';
44
import Pagination from 'src/components/Pagination';
5-
65
import locale from 'src/components/LocaleProvider/locale/en_US';
76

87
const Demo = () => (

0 commit comments

Comments
 (0)