UNPKG

12.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 _MonthCalendar = require("./rc-calendar/MonthCalendar");
10
11var _MonthCalendar2 = _interopRequireDefault(_MonthCalendar);
12
13var _tinperBeeCore = require("tinper-bee-core");
14
15var _react = require("react");
16
17var _react2 = _interopRequireDefault(_react);
18
19var _reactDom = require("react-dom");
20
21var _reactDom2 = _interopRequireDefault(_reactDom);
22
23var _Picker = require("./rc-calendar/Picker");
24
25var _Picker2 = _interopRequireDefault(_Picker);
26
27var _beeFormControl = require("bee-form-control");
28
29var _beeFormControl2 = _interopRequireDefault(_beeFormControl);
30
31var _beeIcon = require("bee-icon");
32
33var _beeIcon2 = _interopRequireDefault(_beeIcon);
34
35var _beeInputGroup = require("bee-input-group");
36
37var _beeInputGroup2 = _interopRequireDefault(_beeInputGroup);
38
39var _classnames = require("classnames");
40
41var _classnames2 = _interopRequireDefault(_classnames);
42
43var _zh_CN = require("./locale/zh_CN");
44
45var _zh_CN2 = _interopRequireDefault(_zh_CN);
46
47var _omit = require("omit.js");
48
49var _omit2 = _interopRequireDefault(_omit);
50
51var _moment = require("moment");
52
53var _moment2 = _interopRequireDefault(_moment);
54
55var _util = require("./rc-calendar/util");
56
57function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
58
59function _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; }
60
61function _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; }
62
63function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
64
65function _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; }
66
67function _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); } /**
68 * Created by chief on 17/4/6.
69 */
70
71var MonthPicker = function (_Component) {
72 _inherits(MonthPicker, _Component);
73
74 function MonthPicker(props, context) {
75 _classCallCheck(this, MonthPicker);
76
77 var _this = _possibleConstructorReturn(this, _Component.call(this, props, context));
78
79 _initialiseProps.call(_this);
80
81 _this.state = {
82 type: "month",
83 value: props.value || props.defaultValue,
84 open: false,
85 showClose: false
86 };
87 return _this;
88 }
89
90 MonthPicker.prototype.componentDidMount = function componentDidMount() {
91 var value = this.props.value || this.props.defaultValue;
92 var format = this.props.format;
93 if (value) {
94 if (typeof value == 'string') {
95 if ((0, _moment2["default"])(value, format).isValid()) {
96 value = (0, _moment2["default"])(value, format);
97 } else {
98 console.error('value is not in the correct format');
99 value = '';
100 }
101 } else if (value.format && value.isValid()) {
102 value = value;
103 } else {
104 console.error('value is not in the correct format');
105 value = '';
106 }
107 }
108 this.setState({
109 value: value
110 });
111 };
112
113 MonthPicker.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {
114 if ('value' in nextProps) {
115 var value = nextProps.value;
116 if (value) {
117 if (value.format && value.isValid()) {} else {
118 value = (0, _moment2["default"])(value, this.props.format);
119 }
120 } else {
121 value = '';
122 }
123 this.setState({
124 value: value
125 });
126 }
127 };
128
129 MonthPicker.prototype.render = function render() {
130 var _this2 = this;
131
132 var state = this.state;
133 var props = this.props;
134
135 var showClose = props.showClose,
136 value = props.value,
137 others = _objectWithoutProperties(props, ["showClose", "value"]);
138
139 var monthCalendar = _react2["default"].createElement(_MonthCalendar2["default"], _extends({}, props, {
140 value: state.value,
141 onChange: this.handleCalendarChange
142 }));
143 var classes = (0, _classnames2["default"])(props.className, "datepicker-container");
144 return _react2["default"].createElement(
145 "div",
146 _extends({ className: classes
147 }, (0, _omit2["default"])(others, ['closeIcon', 'renderIcon', 'format', 'showDateInput', 'showMonthInput', 'locale', 'placeholder', 'onClear', 'renderFooter', 'renderError', 'disabledDate', 'disabledTime'])),
148 _react2["default"].createElement(
149 _Picker2["default"],
150 _extends({}, props, {
151 onOpenChange: this.onOpenChange,
152 animation: 'animation' in props ? props.animation : "slide-up",
153 calendar: monthCalendar,
154 open: this.state.open,
155 value: state.value,
156 onChange: this.onChange,
157 dropdownClassName: props.dropdownClassName,
158 selectedValue: state.value,
159 renderError: props.renderError
160 }),
161 function (_ref) {
162 var value = _ref.value;
163
164 var propsValStr = void 0;
165 if (value && value.format && value.isValid()) {
166 value = typeof value != 'string' ? (0, _util.formatDate)(value, props.format) : value;
167 propsValStr = typeof props.value != 'string' ? (0, _util.formatDate)(props.value, props.format) : props.value;
168 // 为了避免在输入框内输入月份的过程中显示invalid date
169 if (value != propsValStr && propsValStr.length != 0) {
170 value = props.value;
171 }
172 } else {
173 value = props.value;
174 }
175 return _react2["default"].createElement(
176 _beeInputGroup2["default"],
177 { simple: true, className: "datepicker-input-group",
178 onMouseEnter: _this2.onMouseEnter,
179 onMouseLeave: _this2.onMouseLeave
180 },
181 _react2["default"].createElement(_beeFormControl2["default"], {
182 ref: function ref(_ref2) {
183 return _this2.outInput = _ref2;
184 },
185 placeholder: _this2.props.placeholder,
186 className: _this2.props.className,
187 value: value,
188 disabled: props.disabled
189 }),
190 showClose && _this2.state.value && _this2.state.showClose && !props.disabled ? _react2["default"].createElement(
191 _beeInputGroup2["default"].Button,
192 { shape: "border",
193 onClick: _this2.clear },
194 props.closeIcon()
195 ) : _react2["default"].createElement(
196 _beeInputGroup2["default"].Button,
197 { shape: "border" },
198 props.renderIcon()
199 )
200 );
201 }
202 )
203 );
204 };
205
206 return MonthPicker;
207}(_react.Component);
208
209var _initialiseProps = function _initialiseProps() {
210 var _this3 = this;
211
212 this.handleCalendarChange = function (value) {
213 _this3.setState({
214 value: value && _extends(value, { _type: 'month' }) || value
215 });
216 };
217
218 this.onChange = function (value) {
219 var _props = _this3.props,
220 onChange = _props.onChange,
221 onClear = _props.onClear,
222 onSelect = _props.onSelect,
223 format = _props.format;
224
225
226 _this3.setState({
227 value: value && _extends(value, { _type: 'month' }) || value
228 });
229 onChange && onChange(value, value ? (0, _util.formatDate)(value, format) : '');
230 };
231
232 this.inputFocus = function () {
233 var self = _this3;
234 var format = self.props.format;
235
236 var input = document.querySelector('.rc-calendar-input');
237 if (input) {
238 if (input.value) {
239 input.select();
240 } else {
241 input.focus();
242 }
243 input.onkeydown = function (e) {
244 if (e.keyCode == _tinperBeeCore.KeyCode.DELETE) {
245 input.value = '';
246 self.props.onChange && self.props.onChange('', '');
247 } else if (e.keyCode == _tinperBeeCore.KeyCode.ESC) {
248 self.setState({
249 open: false
250 });
251 var v = self.state.value;
252 self.props.onOpenChange && self.props.onOpenChange(false, v, v && (0, _util.formatDate)(v, self.props.format) || '');
253 _reactDom2["default"].findDOMNode(self.outInput).focus(); // 按esc时候焦点回到input输入框
254 } else if (e.keyCode == _tinperBeeCore.KeyCode.ENTER) {
255 var parsed = (0, _moment2["default"])(input.value, format, true);
256 if (parsed.isValid()) {
257 self.setState({
258 open: false
259 });
260 var _v = self.state.value;
261 self.props.onOpenChange && self.props.onOpenChange(false, _v, _v && (0, _util.formatDate)(_v, format) || '');
262 _reactDom2["default"].findDOMNode(self.outInput).focus();
263 }
264 }
265 };
266 }
267 };
268
269 this.onOpenChange = function (open) {
270 var props = _this3.props;
271 var self = _this3;
272 _this3.setState({
273 open: open
274 }, function () {
275 if (open) {
276 setTimeout(function () {
277 self.inputFocus();
278 }, 0);
279 }
280 });
281 var value = self.state.value;
282 props.onOpenChange && props.onOpenChange(open, value, value && (0, _util.formatDate)(value, self.props.format) || '');
283 if (open) {
284 setTimeout(function () {
285 self.inputFocus();
286 }, 200);
287 }
288 };
289
290 this.onTypeChange = function (type) {
291 _this3.setState({
292 type: type
293 });
294 };
295
296 this.onMouseLeave = function (e) {
297 _this3.setState({
298 showClose: false
299 });
300 };
301
302 this.onMouseEnter = function (e) {
303 _this3.setState({
304 showClose: true
305 });
306 };
307
308 this.clear = function (e) {
309 e.stopPropagation();
310 _this3.setState({
311 value: ''
312 });
313 _this3.props.onChange && _this3.props.onChange('', '');
314 };
315};
316
317MonthPicker.defaultProps = {
318 closeIcon: function closeIcon() {
319 return _react2["default"].createElement(_beeIcon2["default"], { type: "uf-close-c" });
320 },
321 renderIcon: function renderIcon() {
322 return _react2["default"].createElement(_beeIcon2["default"], { type: "uf-calendar" });
323 },
324 format: 'YYYY-MM',
325 renderError: function renderError() {},
326 showDateInput: true,
327 showMonthInput: true,
328 locale: _zh_CN2["default"],
329 showClose: true,
330 autoTriggerChange: true,
331 validatorFunc: function validatorFunc() {
332 return true;
333 }
334};
335
336exports["default"] = MonthPicker;
337module.exports = exports["default"];
\No newline at end of file