zarm
Version:
基于 React 的移动端UI库
162 lines (130 loc) • 6.73 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _bem = require("@zarm-design/bem");
var _clamp = _interopRequireDefault(require("lodash/clamp"));
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
var React = _interopRequireWildcard(require("react"));
var _reactDom = require("react-dom");
var _configProvider = require("../config-provider");
var _datePicker = _interopRequireDefault(require("../date-picker"));
var _interface = require("../date-picker-view/interface");
var _utils = require("../date-picker-view/utils");
var _utils2 = require("../picker-view/utils");
var _hooks = require("../utils/hooks");
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) { if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } } return n.default = e, t && t.set(e, n), n; }
var currentYear = new Date().getFullYear();
var DateSelect = function DateSelect(props) {
var className = props.className,
style = props.style,
placeholder = props.placeholder,
_props$disabled = props.disabled,
disabled = _props$disabled === void 0 ? false : _props$disabled,
_props$hasArrow = props.hasArrow,
hasArrow = _props$hasArrow === void 0 ? true : _props$hasArrow,
value = props.value,
defaultValue = props.defaultValue,
_props$min = props.min,
min = _props$min === void 0 ? new Date(new Date().setFullYear(currentYear - 10)) : _props$min,
_props$max = props.max,
max = _props$max === void 0 ? new Date(new Date().setFullYear(currentYear + 10)) : _props$max,
_props$columnType = props.columnType,
columnType = _props$columnType === void 0 ? [_interface.COLUMN_TYPE.YEAR, _interface.COLUMN_TYPE.MONTH, _interface.COLUMN_TYPE.DAY] : _props$columnType,
filter = props.filter,
renderLabel = props.renderLabel,
_props$displayRender = props.displayRender,
displayRender = _props$displayRender === void 0 ? function (items) {
return items === null || items === void 0 ? void 0 : items.map(function (item) {
return item && item.label;
});
} : _props$displayRender,
onCancel = props.onCancel,
onConfirm = props.onConfirm,
rest = (0, _objectWithoutProperties2.default)(props, ["className", "style", "placeholder", "disabled", "hasArrow", "value", "defaultValue", "min", "max", "columnType", "filter", "renderLabel", "displayRender", "onCancel", "onConfirm"]);
var _useSafeState = (0, _hooks.useSafeState)(value || defaultValue),
_useSafeState2 = (0, _slicedToArray2.default)(_useSafeState, 2),
innerValue = _useSafeState2[0],
setInnerValue = _useSafeState2[1];
var _useSafeState3 = (0, _hooks.useSafeState)(false),
_useSafeState4 = (0, _slicedToArray2.default)(_useSafeState3, 2),
visible = _useSafeState4[0],
setVisible = _useSafeState4[1];
var _React$useContext = React.useContext(_configProvider.ConfigContext),
globalLocal = _React$useContext.locale,
prefixCls = _React$useContext.prefixCls;
var defaultRenderLabel = (0, _utils.useRenderLabel)(renderLabel);
var locale = globalLocal.DateSelect;
var bem = (0, _bem.createBEM)('date-select', {
prefixCls: prefixCls
});
React.useEffect(function () {
if ((0, _isEqual.default)(value, innerValue)) return;
setInnerValue(value);
}, [value]);
var handleClick = function handleClick() {
if (disabled) return;
setVisible(true);
};
var handleConfirm = function handleConfirm(changedValue, changedItems) {
(0, _reactDom.unstable_batchedUpdates)(function () {
setInnerValue(changedValue);
setVisible(false);
});
onConfirm === null || onConfirm === void 0 ? void 0 : onConfirm(changedValue, changedItems);
};
var handleCancel = function handleCancel() {
setVisible(false);
onCancel === null || onCancel === void 0 ? void 0 : onCancel();
};
var now = React.useMemo(function () {
return new Date();
}, []);
var currentValue = React.useMemo(function () {
var date = innerValue || now;
return new Date((0, _clamp.default)(date.getTime(), min.getTime(), max.getTime()));
}, [innerValue, min, max, columnType]);
var pickerValue = React.useMemo(function () {
return (0, _utils.dateToNumberArray)(currentValue, columnType);
}, [currentValue, columnType]);
var _resolved = (0, _utils2.resolved)({
dataSource: (0, _utils.generateDatePickerColumns)(currentValue, min, max, columnType, defaultRenderLabel, filter),
value: pickerValue
}),
items = _resolved.items;
var arrowRender = /*#__PURE__*/React.createElement("div", {
className: bem('arrow')
});
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
className: bem([{
placeholder: !innerValue,
disabled: disabled,
visible: visible
}, className]),
style: style,
onClick: handleClick
}, /*#__PURE__*/React.createElement("div", {
className: bem('input')
}, /*#__PURE__*/React.createElement("div", {
className: bem('value')
}, innerValue && (displayRender === null || displayRender === void 0 ? void 0 : displayRender(items)) || placeholder || locale.placeholder)), hasArrow ? arrowRender : null), /*#__PURE__*/React.createElement(_datePicker.default, (0, _extends2.default)({}, rest, {
visible: visible,
columnType: columnType,
value: innerValue,
min: min,
max: max,
filter: filter,
renderLabel: renderLabel,
onConfirm: handleConfirm,
onCancel: handleCancel
})));
};
var _default = DateSelect;
exports.default = _default;