1 | import _extends from 'babel-runtime/helpers/extends';
|
2 | import _classCallCheck from 'babel-runtime/helpers/classCallCheck';
|
3 | import _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';
|
4 | import _inherits from 'babel-runtime/helpers/inherits';
|
5 | import React from 'react';
|
6 | import PropTypes from 'prop-types';
|
7 | import { polyfill } from 'react-lifecycles-compat';
|
8 | import DateTable from './date/DateTable';
|
9 | import MonthTable from './month/MonthTable';
|
10 | import { calendarMixinWrapper, calendarMixinPropTypes, calendarMixinDefaultProps, getNowByCurrentStateValue } from './mixin/CalendarMixin';
|
11 | import { commonMixinWrapper, propType, defaultProp } from './mixin/CommonMixin';
|
12 | import CalendarHeader from './full-calendar/CalendarHeader';
|
13 | import moment from 'moment';
|
14 |
|
15 | var FullCalendar = function (_React$Component) {
|
16 | _inherits(FullCalendar, _React$Component);
|
17 |
|
18 | function FullCalendar(props) {
|
19 | _classCallCheck(this, FullCalendar);
|
20 |
|
21 | var _this = _possibleConstructorReturn(this, _React$Component.call(this, props));
|
22 |
|
23 | _initialiseProps.call(_this);
|
24 |
|
25 | var type = void 0;
|
26 | if ('type' in props) {
|
27 | type = props.type;
|
28 | } else {
|
29 | type = props.defaultType;
|
30 | }
|
31 |
|
32 | _this.state = {
|
33 | type: type,
|
34 | value: props.value || props.defaultValue || moment(),
|
35 | selectedValue: props.selectedValue || props.defaultSelectedValue
|
36 | };
|
37 | return _this;
|
38 | }
|
39 |
|
40 | FullCalendar.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, state) {
|
41 | var newState = {};
|
42 | var value = nextProps.value,
|
43 | selectedValue = nextProps.selectedValue;
|
44 |
|
45 |
|
46 | if ('type' in nextProps) {
|
47 | newState = {
|
48 | type: nextProps.type
|
49 | };
|
50 | }
|
51 | if ('value' in nextProps) {
|
52 | newState.value = value || nextProps.defaultValue || getNowByCurrentStateValue(state.value);
|
53 | }
|
54 | if ('selectedValue' in nextProps) {
|
55 | newState.selectedValue = selectedValue;
|
56 | }
|
57 |
|
58 | return newState;
|
59 | };
|
60 |
|
61 | FullCalendar.prototype.render = function render() {
|
62 | var props = this.props;
|
63 | var locale = props.locale,
|
64 | prefixCls = props.prefixCls,
|
65 | fullscreen = props.fullscreen,
|
66 | showHeader = props.showHeader,
|
67 | headerComponent = props.headerComponent,
|
68 | headerRender = props.headerRender,
|
69 | disabledDate = props.disabledDate;
|
70 | var _state = this.state,
|
71 | value = _state.value,
|
72 | type = _state.type;
|
73 |
|
74 |
|
75 | var header = null;
|
76 | if (showHeader) {
|
77 | if (headerRender) {
|
78 | header = headerRender(value, type, locale);
|
79 | } else {
|
80 | var TheHeader = headerComponent || CalendarHeader;
|
81 | header = React.createElement(TheHeader, _extends({
|
82 | key: 'calendar-header'
|
83 | }, props, {
|
84 | prefixCls: prefixCls + '-full',
|
85 | type: type,
|
86 | value: value,
|
87 | onTypeChange: this.setType,
|
88 | onValueChange: this.setValue
|
89 | }));
|
90 | }
|
91 | }
|
92 |
|
93 | var table = type === 'date' ? React.createElement(DateTable, {
|
94 | dateRender: props.dateCellRender,
|
95 | contentRender: props.dateCellContentRender,
|
96 | locale: locale,
|
97 | prefixCls: prefixCls,
|
98 | onSelect: this.onSelect,
|
99 | value: value,
|
100 | disabledDate: disabledDate
|
101 | }) : React.createElement(MonthTable, {
|
102 | cellRender: props.monthCellRender,
|
103 | contentRender: props.monthCellContentRender,
|
104 | locale: locale,
|
105 | onSelect: this.onMonthSelect,
|
106 | prefixCls: prefixCls + '-month-panel',
|
107 | value: value,
|
108 | disabledDate: disabledDate
|
109 | });
|
110 |
|
111 | var children = [header, React.createElement(
|
112 | 'div',
|
113 | { key: 'calendar-body', className: prefixCls + '-calendar-body' },
|
114 | table
|
115 | )];
|
116 |
|
117 | var className = [prefixCls + '-full'];
|
118 |
|
119 | if (fullscreen) {
|
120 | className.push(prefixCls + '-fullscreen');
|
121 | }
|
122 |
|
123 | return this.renderRoot({
|
124 | children: children,
|
125 | className: className.join(' ')
|
126 | });
|
127 | };
|
128 |
|
129 | return FullCalendar;
|
130 | }(React.Component);
|
131 |
|
132 | FullCalendar.propTypes = _extends({}, calendarMixinPropTypes, propType, {
|
133 | defaultType: PropTypes.string,
|
134 | type: PropTypes.string,
|
135 | prefixCls: PropTypes.string,
|
136 | locale: PropTypes.object,
|
137 | onTypeChange: PropTypes.func,
|
138 | fullscreen: PropTypes.bool,
|
139 | monthCellRender: PropTypes.func,
|
140 | dateCellRender: PropTypes.func,
|
141 | showTypeSwitch: PropTypes.bool,
|
142 | Select: PropTypes.func.isRequired,
|
143 | headerComponents: PropTypes.array,
|
144 | headerComponent: PropTypes.object,
|
145 | headerRender: PropTypes.func,
|
146 | showHeader: PropTypes.bool,
|
147 | disabledDate: PropTypes.func,
|
148 | value: PropTypes.object,
|
149 | defaultValue: PropTypes.object,
|
150 | selectedValue: PropTypes.object,
|
151 | defaultSelectedValue: PropTypes.object
|
152 | });
|
153 | FullCalendar.defaultProps = _extends({}, calendarMixinDefaultProps, defaultProp, {
|
154 | defaultType: 'date',
|
155 | fullscreen: false,
|
156 | showTypeSwitch: true,
|
157 | showHeader: true,
|
158 | onTypeChange: function onTypeChange() {}
|
159 | });
|
160 |
|
161 | var _initialiseProps = function _initialiseProps() {
|
162 | var _this2 = this;
|
163 |
|
164 | this.onMonthSelect = function (value) {
|
165 | _this2.onSelect(value, {
|
166 | target: 'month'
|
167 | });
|
168 | };
|
169 |
|
170 | this.setType = function (type) {
|
171 | if (!('type' in _this2.props)) {
|
172 | _this2.setState({
|
173 | type: type
|
174 | });
|
175 | }
|
176 | _this2.props.onTypeChange(type);
|
177 | };
|
178 | };
|
179 |
|
180 | polyfill(FullCalendar);
|
181 |
|
182 | export default calendarMixinWrapper(commonMixinWrapper(FullCalendar)); |
\ | No newline at end of file |