UNPKG

@bigbinary/neeto-datepicker

Version:
171 lines (162 loc) 6.94 kB
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; import _extends from "@babel/runtime/helpers/esm/extends"; import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2"; import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray"; import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties"; var _excluded = ["id", "open", "clearIcon", "suffixIcon", "activeHelp", "allHelp", "focused", "onFocus", "onBlur", "onKeyDown", "locale", "generateConfig", "placeholder", "className", "style", "onClick", "onClear", "internalPicker", "value", "onChange", "onSubmit", "onInputChange", "multiple", "maxTagCount", "format", "maskFormat", "preserveInvalidOnBlur", "onInvalid", "disabled", "invalid", "inputReadOnly", "direction", "onOpenChange", "onMouseDown", "required", "aria-required", "autoFocus", "removeIcon"]; import classNames from 'classnames'; import * as React from 'react'; import { isSame } from "../../../utils/dateUtil"; import PickerContext from "../../context"; import useInputProps from "../hooks/useInputProps"; import useRootProps from "../hooks/useRootProps"; import Icon, { ClearIcon } from "../Icon"; import Input from "../Input"; import MultipleDates from "./MultipleDates"; function SingleSelector(props, ref) { var id = props.id, open = props.open, clearIcon = props.clearIcon, suffixIcon = props.suffixIcon, activeHelp = props.activeHelp, allHelp = props.allHelp, focused = props.focused, onFocus = props.onFocus, onBlur = props.onBlur, onKeyDown = props.onKeyDown, locale = props.locale, generateConfig = props.generateConfig, placeholder = props.placeholder, className = props.className, style = props.style, onClick = props.onClick, onClear = props.onClear, internalPicker = props.internalPicker, value = props.value, onChange = props.onChange, onSubmit = props.onSubmit, onInputChange = props.onInputChange, multiple = props.multiple, maxTagCount = props.maxTagCount, format = props.format, maskFormat = props.maskFormat, preserveInvalidOnBlur = props.preserveInvalidOnBlur, onInvalid = props.onInvalid, disabled = props.disabled, invalid = props.invalid, inputReadOnly = props.inputReadOnly, direction = props.direction, onOpenChange = props.onOpenChange, _onMouseDown = props.onMouseDown, required = props.required, ariaRequired = props['aria-required'], autoFocus = props.autoFocus, removeIcon = props.removeIcon, restProps = _objectWithoutProperties(props, _excluded); var rtl = direction === 'rtl'; // ======================== Prefix ======================== var _React$useContext = React.useContext(PickerContext), prefixCls = _React$useContext.prefixCls; // ========================= Refs ========================= var rootRef = React.useRef(); var inputRef = React.useRef(); React.useImperativeHandle(ref, function () { return { nativeElement: rootRef.current, focus: function focus(options) { var _inputRef$current; (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 || _inputRef$current.focus(options); }, blur: function blur() { var _inputRef$current2; (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 || _inputRef$current2.blur(); } }; }); // ======================== Props ========================= var rootProps = useRootProps(restProps); // ======================== Change ======================== var onSingleChange = function onSingleChange(date) { onChange([date]); }; var onMultipleRemove = function onMultipleRemove(date) { var nextValues = value.filter(function (oriDate) { return oriDate && !isSame(generateConfig, locale, oriDate, date, internalPicker); }); onChange(nextValues); // When `open`, it means user is operating the if (!open) { onSubmit(); } }; // ======================== Inputs ======================== var _useInputProps = useInputProps(_objectSpread(_objectSpread({}, props), {}, { onChange: onSingleChange }), function (_ref) { var valueTexts = _ref.valueTexts; return { value: valueTexts[0] || '', active: focused }; }), _useInputProps2 = _slicedToArray(_useInputProps, 2), getInputProps = _useInputProps2[0], getText = _useInputProps2[1]; // ======================== Clear ========================= var showClear = !!(clearIcon && value.length && !disabled); // ======================= Multiple ======================= var selectorNode = multiple ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(MultipleDates, { prefixCls: prefixCls, value: value, onRemove: onMultipleRemove, formatDate: getText, maxTagCount: maxTagCount, disabled: disabled, removeIcon: removeIcon, placeholder: placeholder }), /*#__PURE__*/React.createElement("input", { className: "".concat(prefixCls, "-multiple-input"), value: value.map(getText).join(','), ref: inputRef, readOnly: true, autoFocus: autoFocus }), /*#__PURE__*/React.createElement(Icon, { type: "suffix", icon: suffixIcon }), showClear && /*#__PURE__*/React.createElement(ClearIcon, { icon: clearIcon, onClear: onClear })) : /*#__PURE__*/React.createElement(Input, _extends({ ref: inputRef }, getInputProps(), { autoFocus: autoFocus, suffixIcon: suffixIcon, clearIcon: showClear && /*#__PURE__*/React.createElement(ClearIcon, { icon: clearIcon, onClear: onClear }), showActiveCls: false })); // ======================== Render ======================== return /*#__PURE__*/React.createElement("div", _extends({}, rootProps, { className: classNames(prefixCls, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, "".concat(prefixCls, "-multiple"), multiple), "".concat(prefixCls, "-focused"), focused), "".concat(prefixCls, "-disabled"), disabled), "".concat(prefixCls, "-invalid"), invalid), "".concat(prefixCls, "-rtl"), rtl), className), style: style, ref: rootRef, onClick: onClick // Not lose current input focus , onMouseDown: function onMouseDown(e) { var _inputRef$current3; var target = e.target; if (target !== ((_inputRef$current3 = inputRef.current) === null || _inputRef$current3 === void 0 ? void 0 : _inputRef$current3.inputElement)) { e.preventDefault(); } _onMouseDown === null || _onMouseDown === void 0 || _onMouseDown(e); } }), selectorNode); } var RefSingleSelector = /*#__PURE__*/React.forwardRef(SingleSelector); if (process.env.NODE_ENV !== 'production') { RefSingleSelector.displayName = 'SingleSelector'; } export default RefSingleSelector;