UNPKG

5.33 kBJavaScriptView Raw
1import _extends from 'babel-runtime/helpers/extends';
2import _classCallCheck from 'babel-runtime/helpers/classCallCheck';
3import _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';
4import _inherits from 'babel-runtime/helpers/inherits';
5import React from 'react';
6import PropTypes from 'prop-types';
7import { polyfill } from 'react-lifecycles-compat';
8import DateTable from './date/DateTable';
9import MonthTable from './month/MonthTable';
10import { calendarMixinWrapper, calendarMixinPropTypes, calendarMixinDefaultProps, getNowByCurrentStateValue } from './mixin/CalendarMixin';
11import { commonMixinWrapper, propType, defaultProp } from './mixin/CommonMixin';
12import CalendarHeader from './full-calendar/CalendarHeader';
13import moment from 'moment';
14
15var 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
132FullCalendar.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, // The whole header component
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});
153FullCalendar.defaultProps = _extends({}, calendarMixinDefaultProps, defaultProp, {
154 defaultType: 'date',
155 fullscreen: false,
156 showTypeSwitch: true,
157 showHeader: true,
158 onTypeChange: function onTypeChange() {}
159});
160
161var _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
180polyfill(FullCalendar);
181
182export default calendarMixinWrapper(commonMixinWrapper(FullCalendar));
\No newline at end of file