@seafile/seafile-calendar 0.0.29-alpha15 → 0.0.29-alpha19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/assets/index.css +1177 -0
  2. package/dist/rc-calendar.js +1 -0
  3. package/dist/rc-calendar.js.map +1 -1
  4. package/dist/rc-calendar.min.js +1 -1
  5. package/es/Calendar.js +445 -0
  6. package/es/FullCalendar.js +182 -0
  7. package/es/MonthCalendar.js +135 -0
  8. package/es/Picker.js +246 -0
  9. package/es/RangeCalendar.js +876 -0
  10. package/es/calendar/CalendarFooter.js +93 -0
  11. package/es/calendar/CalendarHeader.js +257 -0
  12. package/es/calendar/CalendarRightPanel.js +135 -0
  13. package/es/calendar/OkButton.js +22 -0
  14. package/es/calendar/TimePickerButton.js +28 -0
  15. package/es/calendar/TodayButton.js +28 -0
  16. package/es/date/DateConstants.js +19 -0
  17. package/es/date/DateInput.js +249 -0
  18. package/es/date/DateTBody.js +280 -0
  19. package/es/date/DateTHead.js +86 -0
  20. package/es/date/DateTable.js +32 -0
  21. package/es/decade/DecadePanel.js +181 -0
  22. package/es/full-calendar/CalendarHeader.js +180 -0
  23. package/es/index.js +3 -0
  24. package/es/locale/ar_EG.js +27 -0
  25. package/es/locale/bg_BG.js +27 -0
  26. package/es/locale/ca_ES.js +27 -0
  27. package/es/locale/cs_CZ.js +27 -0
  28. package/es/locale/da_DK.js +27 -0
  29. package/es/locale/de_DE.js +27 -0
  30. package/es/locale/el_GR.js +27 -0
  31. package/es/locale/en_GB.js +27 -0
  32. package/es/locale/en_US.js +28 -0
  33. package/es/locale/es_ES.js +27 -0
  34. package/es/locale/et_EE.js +27 -0
  35. package/es/locale/fa_IR.js +27 -0
  36. package/es/locale/fi_FI.js +27 -0
  37. package/es/locale/fr_BE.js +27 -0
  38. package/es/locale/fr_FR.js +27 -0
  39. package/es/locale/he_IL.js +28 -0
  40. package/es/locale/hi_IN.js +28 -0
  41. package/es/locale/hr_HR.js +28 -0
  42. package/es/locale/hu_HU.js +27 -0
  43. package/es/locale/id_ID.js +28 -0
  44. package/es/locale/is_IS.js +27 -0
  45. package/es/locale/it_IT.js +27 -0
  46. package/es/locale/ja_JP.js +26 -0
  47. package/es/locale/kn_IN.js +28 -0
  48. package/es/locale/ko_KR.js +27 -0
  49. package/es/locale/ku_IQ.js +27 -0
  50. package/es/locale/lv_LV.js +27 -0
  51. package/es/locale/mm_MM.js +28 -0
  52. package/es/locale/mn_MN.js +28 -0
  53. package/es/locale/ms_MY.js +27 -0
  54. package/es/locale/nb_NO.js +27 -0
  55. package/es/locale/nl_BE.js +27 -0
  56. package/es/locale/nl_NL.js +27 -0
  57. package/es/locale/pl_PL.js +27 -0
  58. package/es/locale/pt_BR.js +27 -0
  59. package/es/locale/pt_PT.js +27 -0
  60. package/es/locale/ro_RO.js +28 -0
  61. package/es/locale/ru_RU.js +27 -0
  62. package/es/locale/sk_SK.js +27 -0
  63. package/es/locale/sl_SI.js +27 -0
  64. package/es/locale/sr_RS.js +27 -0
  65. package/es/locale/sv_SE.js +27 -0
  66. package/es/locale/ta_IN.js +28 -0
  67. package/es/locale/th_TH.js +27 -0
  68. package/es/locale/tr_TR.js +27 -0
  69. package/es/locale/ug_CN.js +26 -0
  70. package/es/locale/uk_UA.js +27 -0
  71. package/es/locale/vi_VN.js +28 -0
  72. package/es/locale/zh_CN.js +27 -0
  73. package/es/locale/zh_TW.js +26 -0
  74. package/es/mixin/CalendarMixin.js +123 -0
  75. package/es/mixin/CommonMixin.js +85 -0
  76. package/es/month/MonthPanel.js +154 -0
  77. package/es/month/MonthTable.js +156 -0
  78. package/es/picker/placements.js +35 -0
  79. package/es/range-calendar/CalendarPart.js +151 -0
  80. package/es/util/dayjs.js +17 -0
  81. package/es/util/index.js +564 -0
  82. package/es/util/toTime.js +21 -0
  83. package/es/year/YearPanel.js +194 -0
  84. package/lib/Calendar.js +508 -0
  85. package/lib/FullCalendar.js +221 -0
  86. package/lib/MonthCalendar.js +172 -0
  87. package/lib/Picker.js +283 -0
  88. package/lib/RangeCalendar.js +925 -0
  89. package/lib/calendar/CalendarFooter.js +134 -0
  90. package/lib/calendar/CalendarHeader.js +290 -0
  91. package/lib/calendar/CalendarRightPanel.js +160 -0
  92. package/lib/calendar/OkButton.js +32 -0
  93. package/lib/calendar/TimePickerButton.js +41 -0
  94. package/lib/calendar/TodayButton.js +39 -0
  95. package/lib/date/DateConstants.js +23 -0
  96. package/lib/date/DateInput.js +281 -0
  97. package/lib/date/DateTBody.js +307 -0
  98. package/lib/date/DateTHead.js +106 -0
  99. package/lib/date/DateTable.js +54 -0
  100. package/lib/decade/DecadePanel.js +207 -0
  101. package/lib/full-calendar/CalendarHeader.js +201 -0
  102. package/lib/index.js +12 -0
  103. package/lib/locale/ar_EG.js +31 -0
  104. package/lib/locale/bg_BG.js +31 -0
  105. package/lib/locale/ca_ES.js +31 -0
  106. package/lib/locale/cs_CZ.js +31 -0
  107. package/lib/locale/da_DK.js +31 -0
  108. package/lib/locale/de_DE.js +31 -0
  109. package/lib/locale/el_GR.js +31 -0
  110. package/lib/locale/en_GB.js +31 -0
  111. package/lib/locale/en_US.js +32 -0
  112. package/lib/locale/es_ES.js +31 -0
  113. package/lib/locale/et_EE.js +31 -0
  114. package/lib/locale/fa_IR.js +31 -0
  115. package/lib/locale/fi_FI.js +31 -0
  116. package/lib/locale/fr_BE.js +31 -0
  117. package/lib/locale/fr_FR.js +31 -0
  118. package/lib/locale/he_IL.js +32 -0
  119. package/lib/locale/hi_IN.js +32 -0
  120. package/lib/locale/hr_HR.js +32 -0
  121. package/lib/locale/hu_HU.js +31 -0
  122. package/lib/locale/id_ID.js +32 -0
  123. package/lib/locale/is_IS.js +31 -0
  124. package/lib/locale/it_IT.js +31 -0
  125. package/lib/locale/ja_JP.js +30 -0
  126. package/lib/locale/kn_IN.js +32 -0
  127. package/lib/locale/ko_KR.js +31 -0
  128. package/lib/locale/ku_IQ.js +31 -0
  129. package/lib/locale/lv_LV.js +31 -0
  130. package/lib/locale/mm_MM.js +32 -0
  131. package/lib/locale/mn_MN.js +32 -0
  132. package/lib/locale/ms_MY.js +31 -0
  133. package/lib/locale/nb_NO.js +31 -0
  134. package/lib/locale/nl_BE.js +31 -0
  135. package/lib/locale/nl_NL.js +31 -0
  136. package/lib/locale/pl_PL.js +31 -0
  137. package/lib/locale/pt_BR.js +31 -0
  138. package/lib/locale/pt_PT.js +31 -0
  139. package/lib/locale/ro_RO.js +32 -0
  140. package/lib/locale/ru_RU.js +31 -0
  141. package/lib/locale/sk_SK.js +31 -0
  142. package/lib/locale/sl_SI.js +31 -0
  143. package/lib/locale/sr_RS.js +31 -0
  144. package/lib/locale/sv_SE.js +31 -0
  145. package/lib/locale/ta_IN.js +32 -0
  146. package/lib/locale/th_TH.js +31 -0
  147. package/lib/locale/tr_TR.js +31 -0
  148. package/lib/locale/ug_CN.js +30 -0
  149. package/lib/locale/uk_UA.js +31 -0
  150. package/lib/locale/vi_VN.js +32 -0
  151. package/lib/locale/zh_CN.js +31 -0
  152. package/lib/locale/zh_TW.js +30 -0
  153. package/lib/mixin/CalendarMixin.js +153 -0
  154. package/lib/mixin/CommonMixin.js +106 -0
  155. package/lib/month/MonthPanel.js +179 -0
  156. package/lib/month/MonthTable.js +181 -0
  157. package/lib/picker/placements.js +39 -0
  158. package/lib/range-calendar/CalendarPart.js +184 -0
  159. package/lib/util/dayjs.js +46 -0
  160. package/lib/util/index.js +601 -0
  161. package/lib/util/toTime.js +28 -0
  162. package/lib/year/YearPanel.js +219 -0
  163. package/package.json +1 -1
package/es/Calendar.js ADDED
@@ -0,0 +1,445 @@
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 ReactDOM from 'react-dom';
7
+ import PropTypes from 'prop-types';
8
+ import KeyCode from 'rc-util/es/KeyCode';
9
+ import { polyfill } from 'react-lifecycles-compat';
10
+ import dayjs from 'dayjs';
11
+ import DateTable from './date/DateTable';
12
+ import CalendarHeader from './calendar/CalendarHeader';
13
+ import CalendarFooter from './calendar/CalendarFooter';
14
+ import CalendarRightPanel from './calendar/CalendarRightPanel';
15
+ import { calendarMixinWrapper, calendarMixinPropTypes, calendarMixinDefaultProps, getNowByCurrentStateValue } from './mixin/CalendarMixin';
16
+ import { commonMixinWrapper, propType, defaultProp } from './mixin/CommonMixin';
17
+ import DateInput from './date/DateInput';
18
+ import { getTimeConfig, getTodayTime, syncTime } from './util';
19
+ import { goStartMonth, goEndMonth, goTime } from './util/toTime';
20
+ import localeData from 'dayjs/plugin/localeData';
21
+ import utc from 'dayjs/plugin/utc';
22
+ import weekOfYear from 'dayjs/plugin/weekOfYear';
23
+ dayjs.extend(utc);
24
+ dayjs.extend(localeData);
25
+ dayjs.extend(weekOfYear);
26
+
27
+ function noop() {}
28
+
29
+ var getMomentObjectIfValid = function getMomentObjectIfValid(date) {
30
+ if (dayjs.isDayjs(date) && date.isValid()) {
31
+ return date;
32
+ }
33
+ return false;
34
+ };
35
+
36
+ var Calendar = function (_React$Component) {
37
+ _inherits(Calendar, _React$Component);
38
+
39
+ function Calendar(props) {
40
+ _classCallCheck(this, Calendar);
41
+
42
+ var _this = _possibleConstructorReturn(this, _React$Component.call(this, props));
43
+
44
+ _initialiseProps.call(_this);
45
+
46
+ _this.state = {
47
+ mode: _this.props.mode || 'date',
48
+ value: getMomentObjectIfValid(props.value) || getMomentObjectIfValid(props.defaultValue) || dayjs(),
49
+ selectedValue: props.selectedValue || props.defaultSelectedValue
50
+ };
51
+ return _this;
52
+ }
53
+
54
+ Calendar.prototype.componentDidMount = function componentDidMount() {
55
+ if (this.props.showDateInput) {
56
+ this.saveFocusElement(DateInput.getInstance());
57
+ }
58
+ };
59
+
60
+ Calendar.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, state) {
61
+ var value = nextProps.value,
62
+ selectedValue = nextProps.selectedValue;
63
+
64
+ var newState = {};
65
+
66
+ if ('mode' in nextProps && state.mode !== nextProps.mode) {
67
+ newState = { mode: nextProps.mode };
68
+ }
69
+ if ('value' in nextProps) {
70
+ newState.value = getMomentObjectIfValid(value) || getMomentObjectIfValid(nextProps.defaultValue) || getNowByCurrentStateValue(state.value);
71
+ }
72
+ if ('selectedValue' in nextProps) {
73
+ newState.selectedValue = selectedValue;
74
+ }
75
+
76
+ return newState;
77
+ };
78
+
79
+ Calendar.prototype.render = function render() {
80
+ var props = this.props,
81
+ state = this.state;
82
+ var locale = props.locale,
83
+ prefixCls = props.prefixCls,
84
+ disabledDate = props.disabledDate,
85
+ dateInputPlaceholder = props.dateInputPlaceholder,
86
+ timePicker = props.timePicker,
87
+ onClickRightPanelTime = props.onClickRightPanelTime,
88
+ disabledTime = props.disabledTime,
89
+ clearIcon = props.clearIcon,
90
+ renderFooter = props.renderFooter,
91
+ inputMode = props.inputMode,
92
+ showHourAndMinute = props.showHourAndMinute,
93
+ firstDayOfWeek = props.firstDayOfWeek,
94
+ showWeekNumber = props.showWeekNumber;
95
+ var value = state.value,
96
+ selectedValue = state.selectedValue,
97
+ mode = state.mode;
98
+
99
+ var showTimePicker = mode === 'time';
100
+ var disabledTimeConfig = showTimePicker && disabledTime && timePicker ? getTimeConfig(selectedValue, disabledTime) : null;
101
+
102
+ var timePickerEle = null;
103
+
104
+ if (timePicker && showTimePicker) {
105
+ var timePickerProps = _extends({
106
+ showHour: true,
107
+ showSecond: true,
108
+ showMinute: true
109
+ }, timePicker.props, disabledTimeConfig, {
110
+ onChange: this.onDateInputChange,
111
+ value: selectedValue,
112
+ disabledTime: disabledTime
113
+ });
114
+
115
+ if (timePicker.props.defaultValue !== undefined) {
116
+ timePickerProps.defaultOpenValue = timePicker.props.defaultValue;
117
+ }
118
+
119
+ timePickerEle = React.cloneElement(timePicker, timePickerProps);
120
+ }
121
+
122
+ var dateInputElement = props.showDateInput ? React.createElement(DateInput, {
123
+ format: this.getFormat(),
124
+ key: 'date-input',
125
+ value: value,
126
+ locale: locale,
127
+ placeholder: dateInputPlaceholder || this.getFormat()[0],
128
+ showClear: true,
129
+ disabledTime: disabledTime,
130
+ disabledDate: disabledDate,
131
+ onClear: this.onClear,
132
+ prefixCls: prefixCls,
133
+ selectedValue: selectedValue,
134
+ onChange: this.onDateInputChange,
135
+ onSelect: this.onDateInputSelect,
136
+ clearIcon: clearIcon,
137
+ inputMode: inputMode,
138
+ showHourAndMinute: showHourAndMinute
139
+ }) : null;
140
+
141
+ var children = [];
142
+ if (props.renderSidebar) {
143
+ children.push(props.renderSidebar());
144
+ }
145
+ children.push(React.createElement(
146
+ 'div',
147
+ { className: prefixCls + '-panel', key: 'panel' },
148
+ dateInputElement,
149
+ React.createElement(
150
+ 'div',
151
+ { className: prefixCls + '-date-panel-container' },
152
+ React.createElement(
153
+ 'div',
154
+ {
155
+ tabIndex: this.props.focusablePanel ? 0 : undefined,
156
+ className: prefixCls + '-date-panel'
157
+ },
158
+ React.createElement(CalendarHeader, {
159
+ locale: locale,
160
+ mode: mode,
161
+ value: value,
162
+ onValueChange: this.setValue,
163
+ onPanelChange: this.onPanelChange,
164
+ renderFooter: renderFooter,
165
+ showTimePicker: showTimePicker,
166
+ prefixCls: prefixCls
167
+ }),
168
+ timePicker && showTimePicker ? React.createElement(
169
+ 'div',
170
+ { className: prefixCls + '-time-picker' },
171
+ React.createElement(
172
+ 'div',
173
+ { className: prefixCls + '-time-picker-panel' },
174
+ timePickerEle
175
+ )
176
+ ) : null,
177
+ React.createElement(
178
+ 'div',
179
+ { className: prefixCls + '-body' },
180
+ React.createElement(DateTable, {
181
+ locale: locale,
182
+ value: value,
183
+ selectedValue: selectedValue,
184
+ prefixCls: prefixCls,
185
+ dateRender: props.dateRender,
186
+ onSelect: this.onDateTableSelect,
187
+ disabledDate: disabledDate,
188
+ showWeekNumber: showWeekNumber,
189
+ firstDayOfWeek: firstDayOfWeek
190
+ })
191
+ ),
192
+ React.createElement(CalendarFooter, {
193
+ showOk: props.showOk,
194
+ mode: mode,
195
+ renderFooter: props.renderFooter,
196
+ locale: locale,
197
+ prefixCls: prefixCls,
198
+ showToday: props.showToday,
199
+ disabledTime: disabledTime,
200
+ showTimePicker: showTimePicker,
201
+ showDateInput: props.showDateInput,
202
+ timePicker: timePicker,
203
+ selectedValue: selectedValue,
204
+ value: value,
205
+ disabledDate: disabledDate,
206
+ okDisabled: props.showOk !== false && (!selectedValue || !this.isAllowedDate(selectedValue)),
207
+ onOk: this.onOk,
208
+ onSelect: this.onSelect,
209
+ onToday: this.onToday,
210
+ onOpenTimePicker: this.openTimePicker,
211
+ onCloseTimePicker: this.closeTimePicker
212
+ })
213
+ ),
214
+ showHourAndMinute && React.createElement(CalendarRightPanel, {
215
+ prefixCls: prefixCls,
216
+ value: value,
217
+ locale: locale,
218
+ onSelect: this.onDateTableSelect,
219
+ onClickRightPanelTime: onClickRightPanelTime,
220
+ defaultMinutesTime: this.props.defaultMinutesTime,
221
+ showHourAndMinute: showHourAndMinute,
222
+ format: this.getFormat()
223
+ })
224
+ )
225
+ ));
226
+
227
+ return this.renderRoot({
228
+ children: children,
229
+ className: props.showWeekNumber ? prefixCls + '-week-number' : ''
230
+ });
231
+ };
232
+
233
+ return Calendar;
234
+ }(React.Component);
235
+
236
+ Calendar.propTypes = _extends({}, calendarMixinPropTypes, propType, {
237
+ prefixCls: PropTypes.string,
238
+ className: PropTypes.string,
239
+ style: PropTypes.object,
240
+ defaultValue: PropTypes.object,
241
+ value: PropTypes.object,
242
+ selectedValue: PropTypes.object,
243
+ defaultSelectedValue: PropTypes.object,
244
+ mode: PropTypes.oneOf(['time', 'date', 'month', 'year', 'decade']),
245
+ locale: PropTypes.object,
246
+ showDateInput: PropTypes.bool,
247
+ showWeekNumber: PropTypes.bool,
248
+ showToday: PropTypes.bool,
249
+ showOk: PropTypes.bool,
250
+ showHourAndMinute: PropTypes.bool,
251
+ defaultMinutesTime: PropTypes.string,
252
+ onSelect: PropTypes.func,
253
+ onOk: PropTypes.func,
254
+ onKeyDown: PropTypes.func,
255
+ timePicker: PropTypes.element,
256
+ dateInputPlaceholder: PropTypes.any,
257
+ onClear: PropTypes.func,
258
+ onChange: PropTypes.func,
259
+ onPanelChange: PropTypes.func,
260
+ disabledDate: PropTypes.func,
261
+ disabledTime: PropTypes.any,
262
+ dateRender: PropTypes.func,
263
+ renderFooter: PropTypes.func,
264
+ renderSidebar: PropTypes.func,
265
+ clearIcon: PropTypes.node,
266
+ focusablePanel: PropTypes.bool,
267
+ inputMode: PropTypes.string,
268
+ onBlur: PropTypes.func,
269
+ onClickRightPanelTime: PropTypes.func,
270
+ firstDayOfWeek: PropTypes.string
271
+ });
272
+ Calendar.defaultProps = _extends({}, calendarMixinDefaultProps, defaultProp, {
273
+ showToday: true,
274
+ showDateInput: true,
275
+ showHourAndMinute: false,
276
+ timePicker: null,
277
+ onOk: noop,
278
+ onPanelChange: noop,
279
+ onClickRightPanelTime: noop,
280
+ focusablePanel: true,
281
+ firstDayOfWeek: 'Sunday'
282
+ });
283
+
284
+ var _initialiseProps = function _initialiseProps() {
285
+ var _this2 = this;
286
+
287
+ this.onPanelChange = function (value, mode) {
288
+ var props = _this2.props,
289
+ state = _this2.state;
290
+
291
+ if (!('mode' in props)) {
292
+ _this2.setState({ mode: mode });
293
+ }
294
+ props.onPanelChange(value || state.value, mode);
295
+ };
296
+
297
+ this.onKeyDown = function (event) {
298
+ if (event.target.nodeName.toLowerCase() === 'input') {
299
+ return undefined;
300
+ }
301
+ var keyCode = event.keyCode;
302
+ // mac
303
+ var ctrlKey = event.ctrlKey || event.metaKey;
304
+ var disabledDate = _this2.props.disabledDate;
305
+ var value = _this2.state.value;
306
+
307
+ switch (keyCode) {
308
+ case KeyCode.DOWN:
309
+ _this2.goTime(1, 'weeks');
310
+ event.preventDefault();
311
+ return 1;
312
+ case KeyCode.UP:
313
+ _this2.goTime(-1, 'weeks');
314
+ event.preventDefault();
315
+ return 1;
316
+ case KeyCode.LEFT:
317
+ if (ctrlKey) {
318
+ _this2.goTime(-1, 'years');
319
+ } else {
320
+ _this2.goTime(-1, 'days');
321
+ }
322
+ event.preventDefault();
323
+ return 1;
324
+ case KeyCode.RIGHT:
325
+ if (ctrlKey) {
326
+ _this2.goTime(1, 'years');
327
+ } else {
328
+ _this2.goTime(1, 'days');
329
+ }
330
+ event.preventDefault();
331
+ return 1;
332
+ case KeyCode.HOME:
333
+ _this2.setValue(goStartMonth(_this2.state.value));
334
+ event.preventDefault();
335
+ return 1;
336
+ case KeyCode.END:
337
+ _this2.setValue(goEndMonth(_this2.state.value));
338
+ event.preventDefault();
339
+ return 1;
340
+ case KeyCode.PAGE_DOWN:
341
+ _this2.goTime(1, 'month');
342
+ event.preventDefault();
343
+ return 1;
344
+ case KeyCode.PAGE_UP:
345
+ _this2.goTime(-1, 'month');
346
+ event.preventDefault();
347
+ return 1;
348
+ case KeyCode.ENTER:
349
+ if (!disabledDate || !disabledDate(value)) {
350
+ _this2.onSelect(value, {
351
+ source: 'keyboard'
352
+ });
353
+ }
354
+ event.preventDefault();
355
+ return 1;
356
+ default:
357
+ _this2.props.onKeyDown(event);
358
+ return 1;
359
+ }
360
+ };
361
+
362
+ this.onClear = function () {
363
+ _this2.onSelect(null);
364
+ _this2.props.onClear();
365
+ };
366
+
367
+ this.onOk = function () {
368
+ var selectedValue = _this2.state.selectedValue;
369
+
370
+ if (_this2.isAllowedDate(selectedValue)) {
371
+ _this2.props.onOk(selectedValue);
372
+ }
373
+ };
374
+
375
+ this.onDateInputChange = function (value) {
376
+ console.log('onDateInputChange', value);
377
+ _this2.onSelect(value, {
378
+ source: 'dateInput'
379
+ });
380
+ };
381
+
382
+ this.onDateInputSelect = function (value) {
383
+ _this2.onSelect(value, {
384
+ source: 'dateInputSelect'
385
+ });
386
+ };
387
+
388
+ this.onDateTableSelect = function (value) {
389
+ var timePicker = _this2.props.timePicker;
390
+ var selectedValue = _this2.state.selectedValue;
391
+
392
+ if (!selectedValue && timePicker) {
393
+ var timePickerDefaultValue = timePicker.props.defaultValue;
394
+ if (timePickerDefaultValue) {
395
+ syncTime(timePickerDefaultValue, value);
396
+ }
397
+ }
398
+ _this2.onSelect(value);
399
+ };
400
+
401
+ this.onToday = function () {
402
+ var value = _this2.state.value;
403
+
404
+ var now = getTodayTime(value);
405
+ _this2.onSelect(now, {
406
+ source: 'todayButton'
407
+ });
408
+ };
409
+
410
+ this.onBlur = function (event) {
411
+ setTimeout(function () {
412
+ var dateInput = DateInput.getInstance();
413
+ var rootInstance = _this2.rootInstance;
414
+
415
+ if (!rootInstance || rootInstance.contains(document.activeElement) || dateInput && dateInput.contains(document.activeElement)) {
416
+ // focused element is still part of Calendar
417
+ return;
418
+ }
419
+
420
+ if (_this2.props.onBlur) {
421
+ _this2.props.onBlur(event);
422
+ }
423
+ }, 0);
424
+ };
425
+
426
+ this.getRootDOMNode = function () {
427
+ return ReactDOM.findDOMNode(_this2);
428
+ };
429
+
430
+ this.openTimePicker = function () {
431
+ _this2.onPanelChange(null, 'time');
432
+ };
433
+
434
+ this.closeTimePicker = function () {
435
+ _this2.onPanelChange(null, 'date');
436
+ };
437
+
438
+ this.goTime = function (direction, unit) {
439
+ _this2.setValue(goTime(_this2.state.value, direction, unit));
440
+ };
441
+ };
442
+
443
+ polyfill(Calendar);
444
+
445
+ export default calendarMixinWrapper(commonMixinWrapper(Calendar));
@@ -0,0 +1,182 @@
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 dayjs from './util/dayjs';
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 || dayjs(),
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, // 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
+ });
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));