UNPKG

13.4 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
8
9var _rcCalendar = require("./rc-calendar");
10
11var _rcCalendar2 = _interopRequireDefault(_rcCalendar);
12
13var _react = require("react");
14
15var _react2 = _interopRequireDefault(_react);
16
17var _reactDom = require("react-dom");
18
19var _reactDom2 = _interopRequireDefault(_reactDom);
20
21var _classnames = require("classnames");
22
23var _classnames2 = _interopRequireDefault(_classnames);
24
25var _Picker = require("./rc-calendar/Picker");
26
27var _Picker2 = _interopRequireDefault(_Picker);
28
29var _beeFormControl = require("bee-form-control");
30
31var _beeFormControl2 = _interopRequireDefault(_beeFormControl);
32
33var _zh_CN = require("./locale/zh_CN");
34
35var _zh_CN2 = _interopRequireDefault(_zh_CN);
36
37var _en_US = require("./locale/en_US");
38
39var _en_US2 = _interopRequireDefault(_en_US);
40
41var _beeIcon = require("bee-icon");
42
43var _beeIcon2 = _interopRequireDefault(_beeIcon);
44
45var _beeInputGroup = require("bee-input-group");
46
47var _beeInputGroup2 = _interopRequireDefault(_beeInputGroup);
48
49var _moment = require("moment");
50
51var _moment2 = _interopRequireDefault(_moment);
52
53require("moment/locale/zh-cn");
54
55require("moment/locale/en-gb");
56
57var _omit = require("omit.js");
58
59var _omit2 = _interopRequireDefault(_omit);
60
61function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
62
63function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
64
65function _objectDestructuringEmpty(obj) { if (obj == null) throw new TypeError("Cannot destructure undefined"); }
66
67function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
68
69function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
70
71function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
72
73function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); } /**
74 * Created by chief on 17/4/6.
75 */
76
77var cn = typeof window !== 'undefined' ? location.search.indexOf("cn") === -1 : true;
78
79var now = (0, _moment2["default"])();
80if (cn) {
81 now.locale("zh-cn").utcOffset(8);
82} else {
83 now.locale("en-gb").utcOffset(0);
84}
85
86var format = "YYYY-Wo";
87
88var style = "\n.week-calendar .rc-calendar-tbody > tr:hover\n.rc-calendar-date {\n background: #ebfaff;\n}\n\n.week-calendar .rc-calendar-tbody > tr:hover\n.rc-calendar-selected-day .rc-calendar-date {\n background: #3fc7fa;\n}\n.week-calendar .week-calendar-footer {\n position:absolute;\n top:0;\n left:0;\n bottom:0;\n width:100%;\n border-right: 1px solid #ccc;\n}\n";
89
90var WeekPicker = function (_Component) {
91 _inherits(WeekPicker, _Component);
92
93 function WeekPicker(props, context) {
94 _classCallCheck(this, WeekPicker);
95
96 var _this = _possibleConstructorReturn(this, _Component.call(this, props, context));
97
98 _initialiseProps.call(_this);
99
100 _this.state = {
101 value: _this.initValue(props),
102 open: false,
103 showClose: false
104 };
105 return _this;
106 }
107
108 WeekPicker.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {
109 if ("value" in nextProps) {
110 this.setState({
111 value: this.initValue(nextProps)
112 });
113 }
114 };
115
116 // 跨年周显示的转换
117
118
119 WeekPicker.prototype.render = function render() {
120 var _this2 = this;
121
122 var state = this.state;
123 var props = this.props;
124
125 var showClose = props.showClose,
126 others = _objectWithoutProperties(props, ["showClose"]);
127
128 var value = state.value;
129 var calendar = _react2["default"].createElement(_rcCalendar2["default"], {
130 className: "week-calendar",
131 showWeekNumber: true,
132 showMonthInput: false,
133 renderFooter: this.renderFooter,
134 dateRender: this.dateRender,
135 locale: cn ? _zh_CN2["default"] : _en_US2["default"],
136 format: format,
137 dateInputPlaceholder: this.props.placeholder,
138 defaultValue: now,
139 showDateInput: true,
140 onChange: this.handleCalendarChange,
141 showToday: false,
142 onClear: this.onClear
143 });
144 var classes = (0, _classnames2["default"])(props.className, "datepicker-container");
145 var showValue = this.getShowValue();
146 return _react2["default"].createElement(
147 "div",
148 _extends({ className: classes
149 }, (0, _omit2["default"])(others, ['closeIcon', 'renderIcon', 'format', 'locale', 'placeholder'])),
150 _react2["default"].createElement(
151 _Picker2["default"],
152 _extends({
153 animation: "slide-up"
154 }, props, {
155 onOpenChange: this.onOpenChange,
156 open: this.state.open,
157 calendar: calendar,
158 value: showValue
159 }),
160 function (_ref) {
161 _objectDestructuringEmpty(_ref);
162
163 return _react2["default"].createElement(
164 _beeInputGroup2["default"],
165 { simple: true, className: "datepicker-input-group",
166 onMouseEnter: _this2.onMouseEnter,
167 onMouseLeave: _this2.onMouseLeave
168 },
169 _react2["default"].createElement(_beeFormControl2["default"], {
170 placeholder: _this2.props.placeholder,
171 disabled: props.disabled,
172 readOnly: true,
173 tabIndex: "-1",
174 className: _this2.props.className,
175 value: showValue && showValue.format(format) || ""
176 }),
177 showClose && _this2.state.value && _this2.state.showClose && !props.disabled ? _react2["default"].createElement(
178 _beeInputGroup2["default"].Button,
179 { shape: "border",
180 onClick: _this2.onClear },
181 props.closeIcon()
182 ) : _react2["default"].createElement(
183 _beeInputGroup2["default"].Button,
184 { shape: "border" },
185 props.renderIcon()
186 )
187 );
188 }
189 )
190 );
191 };
192
193 return WeekPicker;
194}(_react.Component);
195
196var _initialiseProps = function _initialiseProps() {
197 var _this3 = this;
198
199 this.initValue = function (props) {
200 var value = props.value || props.defaultValue || '';
201 var format = props.format;
202 if (value) {
203 if (typeof value == 'string') {
204 if ((0, _moment2["default"])(value, format).isValid()) {
205 value = (0, _moment2["default"])(value, format);
206 } else {
207 console.error('value is not in the correct format');
208 value = '';
209 }
210 } else if (value.format && value.isValid()) {
211 value = value;
212 } else {
213 console.error('value is not in the correct format');
214 value = '';
215 }
216 }
217
218 return value;
219 };
220
221 this.onChange = function (value) {
222 _this3.setState({
223 value: value
224 });
225 };
226
227 this.onOpenChange = function (open) {
228 _this3.setState({
229 open: open
230 });
231 };
232
233 this.dateRender = function (current) {
234 var selectedValue = _this3.state.value;
235
236 var monday = (0, _moment2["default"])(selectedValue).isoWeekday(1); //周一
237 var sunday = (0, _moment2["default"])(selectedValue).isoWeekday(7); //周日
238 var startYear = monday.format("YYYY");
239 var endYear = sunday.format("YYYY");
240
241 var sundayStr = sunday.format("DD");
242 if (selectedValue && current.year() === selectedValue.year() && current.week() === selectedValue.week() || startYear !== endYear && (parseInt(sundayStr) <= 3 && current.week() == monday.week() && sunday.day() < monday.day() || parseInt(sundayStr) > 3 && current.week() == sunday.week() && sunday.day() < monday.day())
243 // 区分跨年的情况 如果周日小于等于3 就是前一年几十周
244 ) {
245 return _react2["default"].createElement(
246 "div",
247 { className: "rc-calendar-selected-day" },
248 _react2["default"].createElement(
249 "div",
250 { className: "rc-calendar-date" },
251 current.date()
252 )
253 );
254 }
255 return _react2["default"].createElement(
256 "div",
257 { className: "rc-calendar-date" },
258 current.date()
259 );
260 };
261
262 this.lastWeek = function () {
263 var value = _this3.props.value || now;
264 value.add(-1, "weeks");
265 _this3.setState({
266 value: value,
267 open: false
268 });
269 };
270
271 this.nextWeek = function () {
272 var value = _this3.props.value || now;
273 value.add(+1, "weeks");
274 _this3.setState({
275 value: value,
276 open: false
277 });
278 };
279
280 this.nowWeek = function () {
281 var value = now;
282 _this3.setState({
283 value: value,
284 open: false
285 });
286 };
287
288 this.renderFooter = function () {
289 return _react2["default"].createElement(
290 "div",
291 { className: "week-calendar-footer", key: "footer" },
292 _react2["default"].createElement(
293 "span",
294 {
295 className: "week-calendar-footer-button",
296 onClick: _this3.lastWeek.bind(_this3),
297 style: { 'float': 'left' }
298 },
299 _this3.props.locale.lastWeek
300 ),
301 _react2["default"].createElement(
302 "span",
303 {
304 className: "week-calendar-footer-button",
305 onClick: _this3.nowWeek.bind(_this3)
306 },
307 _this3.props.locale.nowWeek
308 ),
309 _react2["default"].createElement(
310 "span",
311 {
312 className: "week-calendar-footer-button",
313 onClick: _this3.nextWeek.bind(_this3),
314 style: { 'float': 'right' }
315 },
316 _this3.props.locale.nextWeek
317 )
318 );
319 };
320
321 this.onTypeChange = function (type) {
322 _this3.setState({
323 type: type
324 });
325 };
326
327 this.handleCalendarChange = function (value) {
328 _this3.setState({
329 value: value && _extends(value, { _type: 'week' }) || value
330 });
331 };
332
333 this.onMouseLeave = function (e) {
334 _this3.setState({
335 showClose: false
336 });
337 };
338
339 this.onMouseEnter = function (e) {
340 _this3.setState({
341 showClose: true
342 });
343 };
344
345 this.onClear = function (e) {
346 e && e.stopPropagation && e.stopPropagation();
347 _this3.setState({
348 value: ''
349 });
350 _this3.props.onChange && _this3.props.onChange('', '');
351 };
352
353 this.getShowValue = function () {
354 var value = _this3.state.value;
355
356
357 var monday = (0, _moment2["default"])(value).isoWeekday(1); //周一
358 var sunday = (0, _moment2["default"])(value).isoWeekday(7); //周日
359
360 var startYear = monday.format("YYYY");
361 var endYear = sunday.format("YYYY");
362
363 var showValue = void 0;
364 if (startYear !== endYear) {
365 // 是跨年周
366 var sundayStr = sunday.format("DD");
367 if (parseInt(sundayStr) <= 3) {
368 // 周一出现在周五之后,取周一的 年-周
369 showValue = monday;
370 } else {
371 showValue = sunday;
372 }
373 } else {
374 showValue = value;
375 }
376 return showValue;
377 };
378};
379
380WeekPicker.defaultProps = {
381 closeIcon: function closeIcon() {
382 return _react2["default"].createElement(_beeIcon2["default"], { type: "uf-close-c" });
383 },
384 renderIcon: function renderIcon() {
385 return _react2["default"].createElement(_beeIcon2["default"], { type: "uf-calendar" });
386 },
387 locale: _zh_CN2["default"],
388 showClose: true,
389 format: "YYYY-Wo"
390};
391
392exports["default"] = WeekPicker;
393module.exports = exports["default"];
\No newline at end of file