UNPKG

qt-public-ui

Version:

新设计规范下业务组件库

292 lines (290 loc) 13.9 kB
"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 _react = _interopRequireWildcard(require("react")); var _classnames = _interopRequireDefault(require("classnames")); var _moment = _interopRequireDefault(require("moment")); var _lodash = require("lodash"); var _ = require(".."); var _constant = _interopRequireDefault(require("./constant")); var _qtPublicHooks = require("qt-public-hooks"); var _utils = require("./utils"); require("./style.v3.less"); var _excluded = ["useShortcuts", "usePannels", "formatTextFn", "formatTabTextFn", "style", "defaultValue", "styleType", "value", "disabledDate", "onChange", "rangeMax", "shortcutsOnly", "radioMax", "isShowDetermine"]; 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 getRadioOptions = _constant["default"].getRadioOptions, getTabOptions = _constant["default"].getTabOptions; var RangePicker = _.DatePickerAntd3.RangePicker; var DATE_FORMAT = 'YYYY-MM-DD'; var CyclePickerV3 = function CyclePickerV3(props) { var _tabOptions$find2; var useShortcuts = props.useShortcuts, usePannels = props.usePannels, formatTextFn = props.formatTextFn, formatTabTextFn = props.formatTabTextFn, style = props.style, defaultValue = props.defaultValue, _props$styleType = props.styleType, styleType = _props$styleType === void 0 ? 'default' : _props$styleType, value = props.value, disabledDate = props.disabledDate, onChange = props.onChange, _props$rangeMax = props.rangeMax, rangeMax = _props$rangeMax === void 0 ? 0 : _props$rangeMax, shortcutsOnly = props.shortcutsOnly, radioMax = props.radioMax, isShowDetermine = props.isShowDetermine, divProps = (0, _objectWithoutProperties2["default"])(props, _excluded); var isControlled = ('value' in props); var _usePannels = (0, _utils.getValidUsePannels)(usePannels); var tabOptions = getTabOptions(_usePannels); var _useState = (0, _react.useState)((0, _utils.date2DateType)(isControlled ? value : defaultValue, useShortcuts, _usePannels)), _useState2 = (0, _slicedToArray2["default"])(_useState, 2), dateType = _useState2[0], setDateType = _useState2[1]; var _useState3 = (0, _react.useState)((0, _utils.dateType2Date)(isControlled ? value : defaultValue)), _useState4 = (0, _slicedToArray2["default"])(_useState3, 2), dateValue = _useState4[0], setDateValue = _useState4[1]; var _useState5 = (0, _react.useState)(null), _useState6 = (0, _slicedToArray2["default"])(_useState5, 2), relatedDate = _useState6[0], setRelatedDate = _useState6[1]; var _useState7 = (0, _react.useState)(dateType), _useState8 = (0, _slicedToArray2["default"])(_useState7, 2), preDateType = _useState8[0], setPreDateType = _useState8[1]; var _useState9 = (0, _react.useState)(false), _useState10 = (0, _slicedToArray2["default"])(_useState9, 2), resetType = _useState10[0], setResetType = _useState10[1]; var _useState11 = (0, _react.useState)(false), _useState12 = (0, _slicedToArray2["default"])(_useState11, 2), dropdownVisible = _useState12[0], setDropdownVisible = _useState12[1]; // eslint-disable-next-line @typescript-eslint/no-unused-vars var _useState13 = (0, _react.useState)((0, _utils.dateType2Date)(isControlled ? value : defaultValue)), _useState14 = (0, _slicedToArray2["default"])(_useState13, 2), showDetermineDateValue = _useState14[0], setShowDetermineDateValue = _useState14[1]; var _useState15 = (0, _react.useState)(false), _useState16 = (0, _slicedToArray2["default"])(_useState15, 2), isDisabled = _useState16[0], setIsDisabled = _useState16[1]; var dropdownCls = (0, _qtPublicHooks.useDropdownClickAway)(function () { setResetType(true); setDropdownVisible(false); setIsDisabled(true); }); var _useState17 = (0, _react.useState)(dateType), _useState18 = (0, _slicedToArray2["default"])(_useState17, 2), onChangeDateType = _useState18[0], setOnChangeDateType = _useState18[1]; /* 受控组件 */ (0, _react.useEffect)(function () { if (isControlled && !isShowDetermine) { var dtValue = (0, _utils.date2DateType)(value, useShortcuts, _usePannels); if (onChangeDateType === 'unit_custom') { setDateType(dtValue); } else { setDateType(onChangeDateType); } setPreDateType(dtValue); setDateValue((0, _utils.dateType2Date)(value)); } }, [value]); (0, _react.useEffect)(function () { if (!dropdownVisible && resetType) { setDateType(preDateType); setResetType(false); // setDateValue(showDetermineDateValue); // fix onblur issue } }, [dropdownVisible]); var onRadioChange = function onRadioChange(e) { var rValue = e.target.value; !isControlled && setDateType(rValue); !isControlled && setDateValue((0, _utils.getValueByStatus)(rValue)); setOnChangeDateType(rValue); onChange && onChange((0, _utils.dateType2Date)(rValue), rValue); }; var onTabClick = function onTabClick(e) { var tValue = e.target && e.target.getAttribute('data-value'); tValue && tValue !== dateType && setDateType(tValue); if (isShowDetermine && tValue !== 'unit_custom') { !isControlled && setDateType(tValue); setDateValue((0, _utils.dateType2Date)(tValue)); setOnChangeDateType(tValue); setDropdownVisible(false); onChange && onChange((0, _utils.dateType2Date)(tValue), tValue); } }; var onCalendarChange = function onCalendarChange(rangeValue) { var _rangeValue = rangeValue; !isShowDetermine && setOnChangeDateType('unit_custom'); (0, _lodash.isFunction)(props.onCalendarChange) && props.onCalendarChange(rangeValue, dateType); if (dateType !== 'unit_custom') { var range = (0, _utils.getRangeByDate)(_rangeValue[0], dateType); var dtValue = (0, _utils.date2DateType)(range, useShortcuts, _usePannels); setRelatedDate(null); !isControlled && setResetType(false); !isShowDetermine && setDropdownVisible(false); (!isControlled || isShowDetermine) && setDateValue(range); !isControlled && !isShowDetermine && setDateType(dtValue); isShowDetermine && setDateType('unit_custom'); isShowDetermine && setIsDisabled(false); !isShowDetermine && onChange && onChange(range, dtValue); } else if (_rangeValue.length === 1) { setRelatedDate(_rangeValue[0]); isShowDetermine && setDateType('unit_custom'); isShowDetermine && setIsDisabled(false); } else { isShowDetermine && setDateType('unit_custom'); setRelatedDate(null); isShowDetermine && setIsDisabled(false); } }; var onRangeChange = function onRangeChange(rangeValue) { var _rangeValue = rangeValue; var dtValue = (0, _utils.date2DateType)(_rangeValue, useShortcuts, _usePannels); !isShowDetermine && setDropdownVisible(false); (!isControlled || isShowDetermine) && setDateValue(_rangeValue); !isControlled && setResetType(false); !isControlled && setDateType(dtValue); isShowDetermine && setIsDisabled(true); !isShowDetermine && onChange && onChange(_rangeValue, dtValue); }; var onDateInputClick = function onDateInputClick(e) { e.stopPropagation(); if (!dropdownVisible) { setResetType(false); setDropdownVisible(true); setPreDateType(dateType); } setDateType((0, _utils.getTempDateType)(dateType, tabOptions)); }; var onClickDetermine = function onClickDetermine() { var date = dateValue; onChange && onChange(dateValue, dateType); setShowDetermineDateValue(date); setDropdownVisible(false); }; var getTabPannel = function getTabPannel() { var _tabOptions$find; var currTips = ((_tabOptions$find = tabOptions.find(function (tab) { return tab.value === dateType; })) === null || _tabOptions$find === void 0 ? void 0 : _tabOptions$find.tips) || '请选择日期'; return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, !isShowDetermine && /*#__PURE__*/_react["default"].createElement("div", { className: "umui-v3-cyclePicker-calendar-tips" }, currTips), /*#__PURE__*/_react["default"].createElement("ul", { className: "umui-v3-cyclePicker-calendar-tabs", onClick: onTabClick }, tabOptions.map(function (opt) { return /*#__PURE__*/_react["default"].createElement("li", { key: opt.value, className: (0, _classnames["default"])('umui-v3-cyclePicker-calendar-tab', { 'tab-active': opt.value === dateType }), "data-value": opt.value }, formatTabTextFn ? formatTabTextFn(opt) || opt.name : opt.name); })), isShowDetermine && /*#__PURE__*/_react["default"].createElement("div", { className: "umui-v3-cyclePicker-calendar-footer" }, /*#__PURE__*/_react["default"].createElement("div", { className: "umui-v3-cyclePicker-calendar-footer-determine", onClick: onClickDetermine, style: { backgroundColor: isDisabled ? '#3B82FE' : '#d9d9d9' } }, "\u786E\u5B9A"), /*#__PURE__*/_react["default"].createElement("div", { className: "umui-v3-cyclePicker-calendar-footer-tip" }, /*#__PURE__*/_react["default"].createElement(_.Icon, { type: "umicon-hint", className: "icon" }), "\u9009\u62E9\u4E00\u4E2A\u65F6\u95F4\u5468\u671F"))); }; var mixedDisabledDate = function mixedDisabledDate(date) { if (!date) return false; var userDisabled = !!disabledDate && disabledDate(date); if (rangeMax > 1 && relatedDate) { var end = (0, _moment["default"])(relatedDate).add(rangeMax, 'days'); var start = (0, _moment["default"])(relatedDate).subtract(rangeMax, 'days'); return date.isBefore(start) || date.isAfter(end) || userDisabled; } return userDisabled; }; return /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({ style: { display: 'inline-block' } }, divProps), /*#__PURE__*/_react["default"].createElement("div", { className: "umui-v3-cyclePicker", style: style }, /*#__PURE__*/_react["default"].createElement(_.Radio.Group, { onChange: onRadioChange, max: radioMax, value: dateType, style: { marginRight: 8 }, styleType: styleType }, getRadioOptions(useShortcuts).map(function (opt) { var dateRange = (0, _utils.dateType2Date)(opt.value); var disabled = dateRange[1].isBefore(dateRange[0]); // 若是本周/本月第一天则disable return /*#__PURE__*/_react["default"].createElement(_.Radio.Button, { disabled: disabled, value: opt.value, key: opt.value }, formatTextFn ? formatTextFn(opt) || opt.name : opt.name); })), !shortcutsOnly && /*#__PURE__*/_react["default"].createElement("div", { className: "umui-v3-cyclePicker-input-wrap" }, /*#__PURE__*/_react["default"].createElement(_.Input, { styleType: styleType === 'borderless' ? 'underline' : 'default', value: dateValue.map(function (date) { return date ? date.format(DATE_FORMAT) : ''; }).join(' ~ '), suffix: /*#__PURE__*/_react["default"].createElement(_.Icon, { type: "umicon-calendar", onClick: onDateInputClick }), prefix: isShowDetermine ? /*#__PURE__*/_react["default"].createElement("span", { className: "umicon-calendar-prefix", onClick: onDateInputClick }, (_tabOptions$find2 = tabOptions.find(function (item) { return item.value === dateType; })) === null || _tabOptions$find2 === void 0 ? void 0 : _tabOptions$find2.name) : null, placeholder: "\u5F00\u59CB\u65E5\u671F ~ \u7ED3\u675F\u65E5\u671F", className: (0, _classnames["default"])({ 'umicon-calendar-input-prefix': isShowDetermine }), onClick: onDateInputClick, style: { width: styleType === 'borderless' ? 168 : 194, textAlign: styleType === 'borderless' ? 'left' : 'center' }, readOnly: true }), /*#__PURE__*/_react["default"].createElement(RangePicker, { allowClear: false, value: dateValue, open: dropdownVisible, renderExtraFooter: getTabPannel, onCalendarChange: onCalendarChange, onChange: onRangeChange, disabledDate: mixedDisabledDate, className: "umui-v3-cyclePicker-hidden", style: { width: styleType === 'borderless' ? 168 : 194 }, dropdownClassName: (0, _classnames["default"])('umui-v3-cyclePicker-calendar', dropdownCls, { 'umui-v3-cyclePicker-custom-only': _usePannels && _usePannels.length === 0, 'umui-v3-cyclePicker-calendar-determine': isShowDetermine }) })))); }; var _default = exports["default"] = CyclePickerV3;