UNPKG

11.9 kBJavaScriptView Raw
1'use strict';
2
3exports.__esModule = true;
4
5var _extends2 = require('babel-runtime/helpers/extends');
6
7var _extends3 = _interopRequireDefault(_extends2);
8
9var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
10
11var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
12
13var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
14
15var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
16
17var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
18
19var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
20
21var _inherits2 = require('babel-runtime/helpers/inherits');
22
23var _inherits3 = _interopRequireDefault(_inherits2);
24
25var _class, _temp;
26
27var _react = require('react');
28
29var _react2 = _interopRequireDefault(_react);
30
31var _reactLifecyclesCompat = require('react-lifecycles-compat');
32
33var _propTypes = require('prop-types');
34
35var PT = _interopRequireWildcard(_propTypes);
36
37var _classnames3 = require('classnames');
38
39var _classnames4 = _interopRequireDefault(_classnames3);
40
41var _propTypes2 = require('../prop-types');
42
43var _propTypes3 = _interopRequireDefault(_propTypes2);
44
45var _constant = require('../constant');
46
47var _util = require('../../util');
48
49var _util2 = require('../util');
50
51var _input = require('../../input');
52
53var _input2 = _interopRequireDefault(_input);
54
55var _icon = require('../../icon');
56
57var _icon2 = _interopRequireDefault(_icon);
58
59function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
60
61function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
62
63var DATE = _constant.DATE_PICKER_MODE.DATE,
64 WEEK = _constant.DATE_PICKER_MODE.WEEK,
65 MONTH = _constant.DATE_PICKER_MODE.MONTH,
66 QUARTER = _constant.DATE_PICKER_MODE.QUARTER,
67 YEAR = _constant.DATE_PICKER_MODE.YEAR;
68var DateInput = (_temp = _class = function (_React$Component) {
69 (0, _inherits3.default)(DateInput, _React$Component);
70
71 function DateInput(props) {
72 (0, _classCallCheck3.default)(this, DateInput);
73
74 var _this = (0, _possibleConstructorReturn3.default)(this, _React$Component.call(this, props));
75
76 _this.setInputRef = function (el, index) {
77 if (_this.props.isRange) {
78 if (!_this.input) {
79 _this.input = [];
80 }
81 _this.input[index] = el;
82 } else {
83 _this.input = el;
84 }
85 };
86
87 _this.setValue = function (v) {
88 var _this$props = _this.props,
89 isRange = _this$props.isRange,
90 inputType = _this$props.inputType,
91 value = _this$props.value;
92
93 var newVal = v;
94
95 if (isRange) {
96 newVal = [].concat(value);
97 newVal[inputType] = v;
98 }
99
100 return newVal;
101 };
102
103 _this.formatter = function (v) {
104 var format = _this.props.format;
105
106 return typeof format === 'function' ? format(v) : v.format(format);
107 };
108
109 _this.onInput = function (v, e, eventType) {
110 v = _this.setValue(v);
111
112 if (eventType === 'clear') {
113 v = null;
114 e.stopPropagation();
115 }
116
117 _util.func.invoke(_this.props, 'onInput', [v, eventType]);
118 };
119
120 _this.handleTypeChange = function (inputType) {
121 if (inputType !== _this.props.inputType) {
122 _util.func.invoke(_this.props, 'onInputTypeChange', [inputType]);
123 }
124 };
125
126 _this.getPlaceholder = function () {
127 var _mode2placeholder;
128
129 var _this$props2 = _this.props,
130 locale = _this$props2.locale,
131 isRange = _this$props2.isRange,
132 mode = _this$props2.mode;
133 var placeholder = locale.placeholder,
134 selectDate = locale.selectDate,
135 monthPlaceholder = locale.monthPlaceholder,
136 weekPlaceholder = locale.weekPlaceholder,
137 yearPlaceholder = locale.yearPlaceholder,
138 startPlaceholder = locale.startPlaceholder,
139 quarterPlaceholder = locale.quarterPlaceholder,
140 endPlaceholder = locale.endPlaceholder;
141
142 var mode2placeholder = (_mode2placeholder = {}, _mode2placeholder[DATE] = selectDate, _mode2placeholder[WEEK] = weekPlaceholder, _mode2placeholder[MONTH] = monthPlaceholder, _mode2placeholder[QUARTER] = quarterPlaceholder, _mode2placeholder[YEAR] = yearPlaceholder, _mode2placeholder);
143
144 var holder = _this.props.placeholder;
145
146 holder = holder || (isRange ? [startPlaceholder, endPlaceholder] : mode2placeholder[mode] || placeholder);
147
148 if (isRange && !Array.isArray(holder)) {
149 holder = Array(2).fill(holder);
150 }
151
152 return holder;
153 };
154
155 _this.getHtmlSize = function () {
156 var _this$props3 = _this.props,
157 isRange = _this$props3.isRange,
158 format = _this$props3.format,
159 hasBorder = _this$props3.hasBorder;
160
161 var value = '2020-12-12 12:12:12';
162 var size = 0;
163
164 if (isRange) {
165 var fmtStr = (0, _util2.fmtValue)([value, value].map(_util.datejs), format);
166 size = Math.max.apply(Math, fmtStr.map(function (s) {
167 return s && s.length || 0;
168 }));
169 } else {
170 var _fmtStr = (0, _util2.fmtValue)((0, _util.datejs)(value), format);
171 (0, _util2.fmtValue)((0, _util.datejs)(value), format);
172 size = _fmtStr && _fmtStr.length || 0;
173 }
174
175 return String(Math.max(size, hasBorder ? 12 : 8));
176 };
177
178 _this.prefixCls = props.prefix + 'date-picker2-input';
179 return _this;
180 }
181
182 /**
183 * 根据 format 计算输入框 htmlSize
184 */
185
186
187 DateInput.prototype.render = function render() {
188 var _classnames2;
189
190 var onInput = this.onInput,
191 setInputRef = this.setInputRef,
192 handleTypeChange = this.handleTypeChange,
193 prefixCls = this.prefixCls;
194 var _props = this.props,
195 autoFocus = _props.autoFocus,
196 readOnly = _props.readOnly,
197 isRange = _props.isRange,
198 value = _props.value,
199 prefix = _props.prefix,
200 hasClear = _props.hasClear,
201 inputType = _props.inputType,
202 size = _props.size,
203 focus = _props.focus,
204 hasBorder = _props.hasBorder,
205 separator = _props.separator,
206 disabled = _props.disabled,
207 inputProps = _props.inputProps,
208 dateInputAriaLabel = _props.dateInputAriaLabel,
209 state = _props.state,
210 label = _props.label,
211 restProps = (0, _objectWithoutProperties3.default)(_props, ['autoFocus', 'readOnly', 'isRange', 'value', 'prefix', 'hasClear', 'inputType', 'size', 'focus', 'hasBorder', 'separator', 'disabled', 'inputProps', 'dateInputAriaLabel', 'state', 'label']);
212
213
214 var placeholder = this.getPlaceholder();
215 var htmlSize = this.getHtmlSize();
216
217 var sharedProps = (0, _extends3.default)({}, _util.obj.pickProps(restProps, _input2.default), inputProps, {
218 size: size,
219 htmlSize: htmlSize,
220 readOnly: readOnly,
221 hasBorder: false,
222 onChange: onInput
223 });
224
225 var rangeProps = void 0;
226 if (isRange) {
227 rangeProps = [_constant.DATE_INPUT_TYPE.BEGIN, _constant.DATE_INPUT_TYPE.END].map(function (idx) {
228 var _classnames;
229
230 var _disabled = Array.isArray(disabled) ? disabled[idx] : disabled;
231
232 return (0, _extends3.default)({}, sharedProps, {
233 autoFocus: autoFocus,
234 placeholder: placeholder[idx],
235 value: value[idx] || '',
236 'aria-label': Array.isArray(dateInputAriaLabel) ? dateInputAriaLabel[idx] : dateInputAriaLabel,
237 disabled: _disabled,
238 ref: function ref(_ref) {
239 return setInputRef(_ref, idx);
240 },
241 onFocus: _disabled ? undefined : function () {
242 return handleTypeChange(idx);
243 },
244 className: (0, _classnames4.default)((_classnames = {}, _classnames[prefixCls + '-active'] = inputType === idx, _classnames))
245 });
246 });
247 }
248
249 var className = (0, _classnames4.default)([prefixCls, prefixCls + '-' + size, prefixCls + '-' + (isRange ? 'range' : 'date')], (_classnames2 = {}, _classnames2[prefixCls + '-focus'] = focus, _classnames2[prefixCls + '-noborder'] = !hasBorder, _classnames2[prefixCls + '-disabled'] = isRange && Array.isArray(disabled) ? disabled.every(function (v) {
250 return v;
251 }) : disabled, _classnames2));
252
253 var calendarIcon = _react2.default.createElement(_icon2.default, { type: 'calendar', className: prefix + 'date-picker2-symbol-calendar-icon' });
254
255 return _react2.default.createElement(
256 'div',
257 { className: className },
258 isRange ? _react2.default.createElement(
259 _react2.default.Fragment,
260 null,
261 _react2.default.createElement(_input2.default, (0, _extends3.default)({}, rangeProps[0], {
262 label: label,
263 autoFocus: autoFocus // eslint-disable-line jsx-a11y/no-autofocus
264 })),
265 _react2.default.createElement(
266 'div',
267 { className: prefixCls + '-separator' },
268 separator
269 ),
270 _react2.default.createElement(_input2.default, (0, _extends3.default)({}, rangeProps[1], {
271 state: state,
272 hasClear: !state && hasClear,
273 hint: state ? null : calendarIcon
274 }))
275 ) : _react2.default.createElement(_input2.default, (0, _extends3.default)({}, sharedProps, {
276 label: label,
277 state: state,
278 disabled: disabled,
279 hasClear: !state && hasClear,
280 placeholder: placeholder,
281 autoFocus: autoFocus // eslint-disable-line jsx-a11y/no-autofocus
282 , ref: setInputRef,
283 'aria-label': dateInputAriaLabel,
284 value: value || '',
285 hint: state ? null : calendarIcon
286 }))
287 );
288 };
289
290 return DateInput;
291}(_react2.default.Component), _class.propTypes = {
292 prefix: PT.string,
293 rtl: PT.bool,
294 locale: PT.object,
295 value: _propTypes3.default.inputValue,
296 inputType: _propTypes3.default.inputType,
297 format: _propTypes3.default.format,
298 isRange: PT.bool,
299 hasClear: PT.bool,
300 onInputTypeChange: PT.func,
301 autoFocus: PT.bool,
302 readOnly: _propTypes3.default.readOnly,
303 placeholder: _propTypes3.default.placeholder,
304 size: _propTypes3.default.size,
305 focus: PT.bool,
306 hasBorder: PT.bool,
307 separator: PT.node,
308 disabled: _propTypes3.default.disabled,
309 inputProps: PT.object,
310 dateInputAriaLabel: _propTypes3.default.ariaLabel,
311 label: PT.node
312}, _class.defaultProps = {
313 autoFocus: false,
314 readOnly: false,
315 hasClear: true,
316 separator: '-',
317 hasBorder: true,
318 size: 'medium'
319}, _temp);
320DateInput.displayName = 'DateInput';
321exports.default = (0, _reactLifecyclesCompat.polyfill)(DateInput);
322module.exports = exports['default'];
\No newline at end of file