UNPKG

shineout

Version:

Shein 前端组件库

317 lines (250 loc) 12.2 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _immer = _interopRequireDefault(require("immer")); var _component = require("../component"); var _shallowEqual = _interopRequireDefault(require("../utils/shallowEqual")); var _utils = _interopRequireDefault(require("./utils")); var _locale = require("../locale"); var _paramUtils = _interopRequireDefault(require("./paramUtils")); var _Picker = _interopRequireDefault(require("./Picker")); var _styles = require("./styles"); var _Quick = _interopRequireDefault(require("./Quick")); var DefaultValue = { value: [] }; var Range = /*#__PURE__*/ function (_PureComponent) { (0, _inheritsLoose2.default)(Range, _PureComponent); function Range(props) { var _this; _this = _PureComponent.call(this, props) || this; (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "pickers", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "handleFirstChange", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "handleSecondChange", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "bindFirstPicker", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "bindSecondPicker", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "handleDisabledStart", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "handleDisabledEnd", void 0); _this.state = { rangeDate: props.value }; _this.pickers = []; _this.handleChange = _this.handleChange.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.handleFirstChange = _this.handleChange.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 0); _this.handleSecondChange = _this.handleChange.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 1); _this.handleDayHover = _this.handleDayHover.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.bindFirstPicker = _this.bindPicker.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 0); _this.bindSecondPicker = _this.bindPicker.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 1); _this.handleDisabledStart = _this.handleDisabled.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'start'); _this.handleDisabledEnd = _this.handleDisabled.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'end'); _this.changeDateSmart = _this.changeDateSmart.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.handleQuick = _this.handleQuick.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); return _this; } var _proto = Range.prototype; _proto.componentDidUpdate = function componentDidUpdate(prevProps) { var rangeDate = this.state.rangeDate; if (rangeDate.length !== 1 && !(0, _shallowEqual.default)(prevProps.value, this.props.value) && !(0, _shallowEqual.default)(this.state.rangeDate, this.props.value)) { // eslint-disable-next-line this.setState({ rangeDate: this.props.value }); } }; _proto.getOptions = function getOptions() { var timeZone = this.props.timeZone; return { timeZone: timeZone, weekStartsOn: (0, _locale.getLocale)('startOfWeek') }; }; _proto.bindPicker = function bindPicker(index, el) { this.pickers[index] = el; }; _proto.resetRange = function resetRange(rangeDate) { this.setState({ rangeDate: rangeDate }); }; _proto.handleDayHover = function handleDayHover(date) { // will never in if (this.state.rangeDate.length === 1) { _utils.default.cloneTime(date, this.props.value[1], this.props.format, this.getOptions()); // this.setState({ hover: date }) } }; _proto.changeDateSmart = function changeDateSmart(rangeDate) { if (!rangeDate[0] || !rangeDate[1]) return; var s = rangeDate[0], e = rangeDate[1]; var range = this.props.range; if (typeof range === 'number') { if (_utils.default.compareAsc(s, _utils.default.addSeconds(e, -range, this.getOptions())) < 0) rangeDate[1] = _utils.default.addSeconds(s, range, this.getOptions()); } if (_utils.default.compareAsc(s, e) > 0) { var sWitheTime = _utils.default.toDate(s, this.getOptions()); sWitheTime = _utils.default.setTime(sWitheTime, e, this.getOptions()); rangeDate[1] = _utils.default.compareAsc(s, sWitheTime) > 0 ? s : sWitheTime; } } // Be consistent with the parent onChange, expand first params: index ; _proto.handleChange = function handleChange(index, date, change, _blur, _isEnd, _isQuickSelect, areaType) { var _this2 = this; var newDate = date ? _utils.default.toDate(date, this.getOptions()) : ''; var _this$props = this.props, type = _this$props.type, range = _this$props.range, min = _this$props.min, max = _this$props.max; var handleOnChangeParams = _paramUtils.default.handleOnChangeParams(areaType); if (!change) { var _this$props2; var current = (0, _immer.default)(this.props.current, function (draft) { draft[index] = newDate; }); (_this$props2 = this.props).onChange.apply(_this$props2, handleOnChangeParams(current)); return; } if (areaType === 'time') { var endChangedDate; this.setState((0, _immer.default)(function (draft) { draft.rangeDate[index] = newDate; var _draft$rangeDate = draft.rangeDate, s = _draft$rangeDate[0], e = _draft$rangeDate[1]; if (index !== 0) { if (s && s.getHours() === e.getHours()) { if (_utils.default.compareAsc(s, e) === 1) { e.setMinutes(s.getMinutes()); } } return; } if (range && _utils.default.compareAsc(s, e) === 1) { endChangedDate = newDate; draft.rangeDate[1] = endChangedDate; } if (typeof range === 'number' && _utils.default.compareAsc(s, _utils.default.addSeconds(e, -range, _this2.getOptions())) < 0) { endChangedDate = _utils.default.addSeconds(s, range, _this2.getOptions()); draft.rangeDate[1] = endChangedDate; } }), function () { var _this2$props; var current = (0, _immer.default)(_this2.props.value, function (draft) { draft[index] = newDate; if (endChangedDate) draft[1] = endChangedDate; draft[1 - index] = draft[1 - index] || ''; }); (_this2$props = _this2.props).onChange.apply(_this2$props, handleOnChangeParams(current, true)); }); return; } if (type === 'month') { var _this$props3; // eslint-disable-next-line var rangeDate = [].concat(this.state.rangeDate); rangeDate[index] = newDate; rangeDate[1 - index] = rangeDate[1 - index] || ''; this.changeDateSmart(rangeDate); this.setState({ rangeDate: rangeDate }); (_this$props3 = this.props).onChange.apply(_this$props3, handleOnChangeParams(rangeDate, true, true, index === 1)); return; } newDate = _utils.default.cloneTime(newDate, this.props.value[index], undefined, this.getOptions()); if (min && _utils.default.compareAsc(newDate, min) <= 0) { newDate = _utils.default.setTime(newDate, min, this.getOptions()); } if (max && _utils.default.compareAsc(newDate, max) >= 0) { newDate = _utils.default.setTime(newDate, max, this.getOptions()); } this.setState((0, _immer.default)(function (draft) { draft.rangeDate[index] = newDate; draft.rangeDate[1 - index] = draft.rangeDate[1 - index] || ''; _this2.changeDateSmart(draft.rangeDate); draft.hover = undefined; }), function () { var _this2$props2; // only 'datetime' don not need close, 'time is up' (_this2$props2 = _this2.props).onChange.apply(_this2$props2, handleOnChangeParams(_this2.state.rangeDate, true, type !== 'datetime', index === 1)); }); }; _proto.handleDisabled = function handleDisabled(type, date) { var disabled = this.props.disabled; var rangeDate = this.state.rangeDate; if (disabled) { return disabled.apply(void 0, [date, type].concat(rangeDate)); } return false; }; _proto.handleQuick = function handleQuick(quick) { var _this$props4; this.setState({ rangeDate: quick.value }); (_this$props4 = this.props).onChange.apply(_this$props4, _paramUtils.default.quickHandleChangeParams(quick.value, true, false, false, quick)); }; _proto.render = function render() { // min & max can not to child var _this$props5 = this.props, current = _this$props5.current, value = _this$props5.value, range = _this$props5.range, children = _this$props5.children, min = _this$props5.min, max = _this$props5.max, quicks = _this$props5.quicks, props = (0, _objectWithoutPropertiesLoose2.default)(_this$props5, ["current", "value", "range", "children", "min", "max", "quicks"]); var rangeDate = [].concat(this.state.rangeDate); return _react.default.createElement("div", { className: (0, _styles.datepickerClass)('range-picker') }, _react.default.createElement(_Quick.default, (0, _extends2.default)({}, this.props, { current: this.state.rangeDate, onChange: this.handleQuick })), _react.default.createElement(_Picker.default, (0, _extends2.default)({}, props, { pos: "start", disabled: this.handleDisabledStart, index: 0, min: min, max: max, current: current[0], range: typeof range === 'number' ? range : undefined, rangeDate: rangeDate, rangeTemp: rangeDate[0], onChange: this.handleFirstChange, onChangeSync: this.handleChange, onDayHover: this.handleDayHover, ref: this.bindFirstPicker, value: _utils.default.toDateWithFormat(value[0], props.format, undefined, this.getOptions()), showTimePicker: value.length === 2 })), _react.default.createElement(_Picker.default, (0, _extends2.default)({}, props, { disabled: this.handleDisabledEnd, index: 1, min: rangeDate[0] ? rangeDate[0] : min, max: max, current: current[1], range: typeof range === 'number' ? range : undefined, rangeDate: rangeDate, rangeTemp: rangeDate[0], onChange: this.handleSecondChange, onChangeSync: this.handleChange, onDayHover: this.handleDayHover, ref: this.bindSecondPicker, value: _utils.default.toDateWithFormat(value[1], props.format, undefined, this.getOptions()), showTimePicker: value.length === 2 }))); }; return Range; }(_component.PureComponent); (0, _defineProperty2.default)(Range, "defaultProps", DefaultValue); var _default = Range; exports.default = _default;