UNPKG

zarm

Version:

基于 React 的移动端UI库

132 lines (120 loc) 5.29 kB
import _extends from "@babel/runtime/helpers/extends"; import _slicedToArray from "@babel/runtime/helpers/slicedToArray"; import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties"; import { createBEM } from '@zarm-design/bem'; import clamp from 'lodash/clamp'; import isEqual from 'lodash/isEqual'; import * as React from 'react'; import { unstable_batchedUpdates as batchedUpdates } from 'react-dom'; import { ConfigContext } from '../config-provider'; import DatePicker from '../date-picker'; import { COLUMN_TYPE } from '../date-picker-view/interface'; import { dateToNumberArray, generateDatePickerColumns, useRenderLabel } from '../date-picker-view/utils'; import { resolved } from '../picker-view/utils'; import { useSafeState } from '../utils/hooks'; 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 ? [COLUMN_TYPE.YEAR, COLUMN_TYPE.MONTH, 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 = _objectWithoutProperties(props, ["className", "style", "placeholder", "disabled", "hasArrow", "value", "defaultValue", "min", "max", "columnType", "filter", "renderLabel", "displayRender", "onCancel", "onConfirm"]); var _useSafeState = useSafeState(value || defaultValue), _useSafeState2 = _slicedToArray(_useSafeState, 2), innerValue = _useSafeState2[0], setInnerValue = _useSafeState2[1]; var _useSafeState3 = useSafeState(false), _useSafeState4 = _slicedToArray(_useSafeState3, 2), visible = _useSafeState4[0], setVisible = _useSafeState4[1]; var _React$useContext = React.useContext(ConfigContext), globalLocal = _React$useContext.locale, prefixCls = _React$useContext.prefixCls; var defaultRenderLabel = useRenderLabel(renderLabel); var locale = globalLocal.DateSelect; var bem = createBEM('date-select', { prefixCls: prefixCls }); React.useEffect(function () { if (isEqual(value, innerValue)) return; setInnerValue(value); }, [value]); var handleClick = function handleClick() { if (disabled) return; setVisible(true); }; var handleConfirm = function handleConfirm(changedValue, changedItems) { 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(clamp(date.getTime(), min.getTime(), max.getTime())); }, [innerValue, min, max, columnType]); var pickerValue = React.useMemo(function () { return dateToNumberArray(currentValue, columnType); }, [currentValue, columnType]); var _resolved = resolved({ dataSource: 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, _extends({}, rest, { visible: visible, columnType: columnType, value: innerValue, min: min, max: max, filter: filter, renderLabel: renderLabel, onConfirm: handleConfirm, onCancel: handleCancel }))); }; export default DateSelect;