UNPKG

4.52 kBJavaScriptView Raw
1import _classCallCheck from 'babel-runtime/helpers/classCallCheck';
2import _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';
3import _inherits from 'babel-runtime/helpers/inherits';
4import React from 'react';
5import classnames from 'classnames';
6import Icon from '../../icon';
7import { isDisabledDate, YEAR_TABLE_COL_COUNT, YEAR_TABLE_ROW_COUNT } from '../utils';
8
9var YearTable = function (_React$PureComponent) {
10 _inherits(YearTable, _React$PureComponent);
11
12 function YearTable() {
13 _classCallCheck(this, YearTable);
14
15 return _possibleConstructorReturn(this, _React$PureComponent.apply(this, arguments));
16 }
17
18 YearTable.prototype.onYearCellClick = function onYearCellClick(date) {
19 this.props.onSelectYear(date, 'month');
20 };
21
22 YearTable.prototype.render = function render() {
23 var _props = this.props,
24 prefix = _props.prefix,
25 value = _props.value,
26 today = _props.today,
27 visibleMonth = _props.visibleMonth,
28 locale = _props.locale,
29 disabledDate = _props.disabledDate,
30 goPrevDecade = _props.goPrevDecade,
31 goNextDecade = _props.goNextDecade,
32 yearCellRender = _props.yearCellRender;
33
34 var currentYear = today.year();
35 var selectedYear = value ? value.year() : null;
36 var visibleYear = visibleMonth.year();
37 var startYear = Math.floor(visibleYear / 10) * 10;
38
39 var yearElements = [];
40 var counter = 0;
41
42 var lastRowIndex = YEAR_TABLE_ROW_COUNT - 1;
43 var lastColIndex = YEAR_TABLE_COL_COUNT - 1;
44
45 for (var i = 0; i < YEAR_TABLE_ROW_COUNT; i++) {
46 var rowElements = [];
47 for (var j = 0; j < YEAR_TABLE_COL_COUNT; j++) {
48 var _classnames;
49
50 var content = void 0;
51 var year = void 0;
52 var isDisabled = false;
53 var onClick = void 0;
54 var title = void 0;
55
56 if (i === 0 && j === 0) {
57 title = locale.prevDecade;
58 onClick = goPrevDecade;
59 content = React.createElement(Icon, { type: 'arrow-left', size: 'xs' });
60 } else if (i === lastRowIndex && j === lastColIndex) {
61 title = locale.nextDecade;
62 onClick = goNextDecade;
63 content = React.createElement(Icon, { type: 'arrow-right', size: 'xs' });
64 } else {
65 year = startYear + counter++;
66 title = year;
67 var yearDate = visibleMonth.clone().year(year);
68 isDisabled = isDisabledDate(yearDate, disabledDate, 'year');
69
70 !isDisabled && (onClick = this.onYearCellClick.bind(this, yearDate));
71
72 content = yearCellRender ? yearCellRender(yearDate) : year;
73 }
74
75 var isSelected = year === selectedYear;
76
77 var classNames = classnames((_classnames = {}, _classnames[prefix + 'calendar-cell'] = true, _classnames[prefix + 'calendar-cell-current'] = year === currentYear, _classnames[prefix + 'selected'] = isSelected, _classnames[prefix + 'disabled'] = isDisabled, _classnames));
78
79 rowElements.push(React.createElement(
80 'td',
81 { key: i + '-' + j, className: classNames, role: 'cell' },
82 React.createElement(
83 'div',
84 {
85 className: prefix + 'calendar-year',
86 onClick: onClick,
87 title: title,
88 'aria-disabled': isDisabled ? 'true' : 'false',
89 'aria-selected': isSelected ? 'true' : 'false'
90 },
91 content
92 )
93 ));
94 }
95 yearElements.push(React.createElement(
96 'tr',
97 { key: i, role: 'row' },
98 rowElements
99 ));
100 }
101 return React.createElement(
102 'table',
103 { className: prefix + 'calendar-table', role: 'grid' },
104 React.createElement(
105 'tbody',
106 { className: prefix + 'calendar-tbody', role: 'rowgroup' },
107 yearElements
108 )
109 );
110 };
111
112 return YearTable;
113}(React.PureComponent);
114
115export default YearTable;
\No newline at end of file