qt-public-ui
Version:
新设计规范下业务组件库
228 lines (226 loc) • 10.8 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 _react = _interopRequireWildcard(require("react"));
var _antd = require("antd");
var _classnames = _interopRequireDefault(require("classnames"));
var _moment = _interopRequireDefault(require("moment"));
var _ = require("..");
var _constant = _interopRequireDefault(require("./constant"));
var _qtPublicHooks = require("qt-public-hooks");
var _utils = require("./utils");
require("./style");
var _excluded = ["useShortcuts", "usePannels", "formatTextFn", "formatTabTextFn", "style", "defaultValue", "styleType", "value", "disabledDate", "onChange", "rangeMax", "shortcutsOnly", "radioMax"];
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 = _antd.DatePicker.RangePicker;
var CyclePicker = function CyclePicker(props) {
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,
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];
// 使用场景:点击RangePicker并切换tab后未选择时间
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]; // 记录上一次的datetype用重制
var _useState9 = (0, _react.useState)(false),
_useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
resetType = _useState10[0],
setResetType = _useState10[1]; // 是否重置datetype
var dropdownCls = (0, _qtPublicHooks.useDropdownClickAway)(function () {
setResetType(true);
});
var _useState11 = (0, _react.useState)(dateType),
_useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
onChangeDateType = _useState12[0],
setOnChangeDateType = _useState12[1];
var ref = (0, _react.useRef)();
var _useState13 = (0, _react.useState)(0),
_useState14 = (0, _slicedToArray2["default"])(_useState13, 2),
refreshKey = _useState14[0],
setRefreshKey = _useState14[1]; // 跟新key,用于关闭Calendar
/* 受控组件 */
(0, _react.useEffect)(function () {
if (isControlled) {
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 () {
setRelatedDate(null);
setResetType(false);
if (ref.current && typeof ref.current.blur === 'function') {
ref.current.blur(); // 让自定义选完时blur
}
}, [dateValue]);
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);
};
var onCalendarChange = function onCalendarChange(rangeValue, b, info) {
var _rangeValue = rangeValue;
setOnChangeDateType('unit_custom');
var index = info.range === 'start' ? 0 : 1;
if ((0, _utils.getTempDateType)(dateType, tabOptions) !== 'unit_custom') {
// 非自定义 只需点一下
var range = (0, _utils.getRangeByDate)(_rangeValue[index], dateType, index);
var dtValue = (0, _utils.date2DateType)(range, useShortcuts, _usePannels);
setRelatedDate(null);
setRefreshKey(function (pre) {
return pre + 1;
});
!isControlled && setResetType(false);
!isControlled && setDateValue(range);
!isControlled && setDateType(dtValue);
onChange && onChange(range, dtValue);
} else if (relatedDate === null) {
// 自定义选中范围的其中一个值,但此时先不改变datevalue
setRelatedDate(_rangeValue[index]);
} else {
// 自定义的第二次点击,此时改变datevalue
var _dtValue = (0, _utils.date2DateType)(_rangeValue, useShortcuts, _usePannels);
!isControlled && setResetType(false);
!isControlled && setDateValue(_rangeValue);
!isControlled && setDateType(_dtValue);
onChange && onChange(_rangeValue, _dtValue);
setResetType(false);
}
};
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-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(RangePicker, {
allowClear: false,
value: dateValue,
separator: "\u4E00",
suffixIcon: /*#__PURE__*/_react["default"].createElement(_.IconSlim, {
type: "umicon-calendar",
className: "umui-icon-calendar"
}),
key: refreshKey,
panelRender: function panelRender(panelNode) {
var _tabOptions$find;
var tempDateType = (0, _utils.getTempDateType)(dateType, tabOptions);
var currTips = ((_tabOptions$find = tabOptions.find(function (tab) {
return tab.value === tempDateType;
})) === null || _tabOptions$find === void 0 ? void 0 : _tabOptions$find.tips) || '请选择日期';
return /*#__PURE__*/_react["default"].createElement("div", {
style: {
display: 'flex'
}
}, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("ul", {
className: "umui-cyclePicker-calendar-tabs",
onClick: onTabClick
}, tabOptions.map(function (opt) {
return /*#__PURE__*/_react["default"].createElement("li", {
key: opt.value,
className: (0, _classnames["default"])('umui-cyclePicker-calendar-tab', {
'tab-active': opt.value === tempDateType
}),
"data-value": opt.value
}, formatTabTextFn ? formatTabTextFn(opt) || opt.name : opt.name);
}))), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("div", {
className: "umui-cyclePicker-calendar-tips"
}, currTips), panelNode));
},
ref: ref,
onCalendarChange: onCalendarChange,
disabledDate: mixedDisabledDate,
onOpenChange: function onOpenChange(state) {
if (!state) {
// 关闭时
setRelatedDate(null);
if (resetType) {
setDateType(preDateType);
}
} else {
setPreDateType(dateType);
}
setResetType(false);
},
dropdownClassName: (0, _classnames["default"])('umui-cyclePicker-calendar', dropdownCls, {
'umui-cyclePicker-custom-only': _usePannels && _usePannels.length === 0
})
})));
};
var _default = exports["default"] = CyclePicker;