UNPKG

tdesign-react

Version:
396 lines (392 loc) 14.9 kB
/** * tdesign v1.15.1 * (c) 2025 tdesign * @license MIT */ import { _ as _toConsumableArray } from '../../_chunks/dep-87d110df.js'; import { _ as _slicedToArray } from '../../_chunks/dep-48805ab8.js'; import React, { useRef, useCallback, useState, useMemo, useEffect } from 'react'; import { useLocaleReceiver } from '../../locale/LocalReceiver.js'; import useConfig from '../../hooks/useConfig.js'; import { Select } from '../../select/index.js'; import { PaginationMini } from '../../pagination/index.js'; import '../../_chunks/dep-026a4c6b.js'; import '../../_chunks/dep-cb0a3966.js'; import '../../_chunks/dep-eca3a3de.js'; import 'lodash-es'; import '../../config-provider/index.js'; import '../../config-provider/ConfigProvider.js'; import '../../config-provider/ConfigContext.js'; import '../../locale/zh_CN.js'; import '../../_chunks/dep-e29214cb.js'; import 'dayjs'; import '../../_chunks/dep-3c9ab31a.js'; import '../../config-provider/type.js'; import '../../select/base/Select.js'; import '../../_chunks/dep-6b660ef0.js'; import 'classnames'; import '../../_util/composeRefs.js'; import '../../_util/forwardRefWithStatics.js'; import 'hoist-non-react-statics'; import '../../_util/helper.js'; import '../../_util/noop.js'; import '../../_util/parseTNode.js'; import '../../_chunks/dep-f53c91cd.js'; import '../../_chunks/dep-b908e1fe.js'; import '../../common/FakeArrow.js'; import '../../hooks/useControlled.js'; import '../../hooks/useDefaultProps.js'; import '../../loading/index.js'; import '../../loading/Loading.js'; import '../../_chunks/dep-3a09424a.js'; import '../../common/Portal.js'; import 'react-dom'; import '../../hooks/useLayoutEffect.js'; import '../../loading/gradient.js'; import '../../_chunks/dep-c48e2ca1.js'; import '../../_chunks/dep-1630b9b4.js'; import '../../hooks/useDomRefCallback.js'; import '../../loading/defaultProps.js'; import '../../loading/plugin.js'; import '../../_util/react-render.js'; import '../../_chunks/dep-a74cc5e4.js'; import '../../common/PluginContainer.js'; import '../../loading/style/css.js'; import '../../loading/type.js'; import '../../select-input/index.js'; import '../../select-input/SelectInput.js'; import '../../popup/index.js'; import '../../popup/Popup.js'; import 'react-transition-group'; import '../../_util/ref.js'; import 'react-is'; import '../../_util/isFragment.js'; import '../../hooks/useAnimation.js'; import '../../hooks/useAttach.js'; import '../../hooks/useMutationObserver.js'; import '../../hooks/useLatest.js'; import '../../hooks/usePopper.js'; import '@popperjs/core'; import 'react-fast-compare'; import '../../hooks/useWindowSize.js'; import '../../popup/defaultProps.js'; import '../../popup/hooks/useTrigger.js'; import '../../_util/listener.js'; import '../../popup/utils/transition.js'; import '../../popup/PopupPlugin.js'; import '../../popup/style/css.js'; import '../../popup/type.js'; import '../../select-input/useSingle.js'; import '../../input/index.js'; import '../../input/Input.js'; import 'tdesign-icons-react'; import '../../hooks/useGlobalIcon.js'; import '../../input/InputGroup.js'; import '../../input/defaultProps.js'; import '../../input/useLengthLimit.js'; import '../../input/style/css.js'; import '../../input/type.js'; import '../../select-input/useMultiple.js'; import '../../tag-input/index.js'; import '../../tag-input/TagInput.js'; import '../../hooks/useDragSorter.js'; import '../../hooks/useEventCallback.js'; import '../../tag-input/defaultProps.js'; import '../../tag-input/useHover.js'; import '../../tag-input/useTagList.js'; import '../../tag/index.js'; import '../../tag/Tag.js'; import '../../_chunks/dep-3c3d29db.js'; import '../../tag/defaultProps.js'; import '../../tag/CheckTag.js'; import '../../_chunks/dep-55732ade.js'; import '../../tag/CheckTagGroup.js'; import '../../tag/style/css.js'; import '../../tag/type.js'; import '../../tag-input/useTagScroll.js'; import '../../tag-input/style/css.js'; import '../../tag-input/type.js'; import '../../select-input/useOverlayInnerStyle.js'; import '../../select-input/defaultProps.js'; import '../../select-input/style/css.js'; import '../../select-input/type.js'; import '../../select/defaultProps.js'; import '../../_chunks/dep-c7ed701c.js'; import '../../select/base/OptionGroup.js'; import '../../select/base/Option.js'; import '../../hooks/useRipple.js'; import '../../select/base/PopupContent.js'; import '../../select/hooks/usePanelVirtualScroll.js'; import '../../hooks/useVirtualScroll.js'; import '../../select/style/css.js'; import '../../select/type.js'; import '../../pagination/Pagination.js'; import '../../input-number/index.js'; import '../../input-number/InputNumber.js'; import '../../button/index.js'; import '../../button/Button.js'; import '../../button/defaultProps.js'; import '../../button/style/css.js'; import '../../button/type.js'; import '../../input-number/useInputNumber.js'; import '../../_chunks/dep-46c9e4f5.js'; import '../../hooks/useCommonClassName.js'; import '../../input-number/defaultProps.js'; import '../../input-number/style/css.js'; import '../../input-number/type.js'; import '../../input-adornment/index.js'; import '../../input-adornment/InputAdornment.js'; import '../../input-adornment/style/css.js'; import '../../input-adornment/type.js'; import '../../pagination/hooks/useBoundaryJumper.js'; import '../../pagination/hooks/usePrevNextJumper.js'; import '../../pagination/hooks/usePageNumber.js'; import '../../pagination/hooks/useTotal.js'; import '../../pagination/validators.js'; import '../../pagination/defaultProps.js'; import '../../pagination/PaginationMini.js'; import '../../pagination/style/css.js'; import '../../pagination/type.js'; var useDatePickerLocalConfig = function useDatePickerLocalConfig() { var _useLocaleReceiver = useLocaleReceiver("datePicker"), _useLocaleReceiver2 = _slicedToArray(_useLocaleReceiver, 2), local = _useLocaleReceiver2[0], t = _useLocaleReceiver2[1]; return { months: t(local.months), nextYear: t(local.nextYear), preYear: t(local.preYear), nextMonth: t(local.nextMonth), preMonth: t(local.preMonth), preDecade: t(local.preDecade), nextDecade: t(local.nextDecade), now: t(local.now) }; }; var DatePickerHeader = function DatePickerHeader(props) { var _useConfig = useConfig(), classPrefix = _useConfig.classPrefix; var mode = props.mode, year = props.year, month = props.month, onMonthChange = props.onMonthChange, onYearChange = props.onYearChange, onJumperClick = props.onJumperClick, partial = props.partial, _props$internalYear = props.internalYear, internalYear = _props$internalYear === void 0 ? [] : _props$internalYear; var _useDatePickerLocalCo = useDatePickerLocalConfig(), now = _useDatePickerLocalCo.now, months = _useDatePickerLocalCo.months, preMonth = _useDatePickerLocalCo.preMonth, preYear = _useDatePickerLocalCo.preYear, nextMonth = _useDatePickerLocalCo.nextMonth, nextYear = _useDatePickerLocalCo.nextYear, preDecade = _useDatePickerLocalCo.preDecade, nextDecade = _useDatePickerLocalCo.nextDecade; var scrollAnchorRef = useRef("default"); var monthOptions = months.map(function (item, index) { return { label: item, value: index }; }); var initOptions = useCallback(function (year2) { var options = []; if (mode === "year") { var extraYear = year2 % 10; var minYear = year2 - extraYear - 100; var maxYear = year2 - extraYear + 100; for (var i = minYear; i <= maxYear; i += 10) { options.push({ label: "".concat(i, " - ").concat(i + 9), value: i + 9 }); } } else { options.push({ label: "".concat(year2), value: year2 }); for (var _i = 1; _i <= 10; _i++) { options.push({ label: "".concat(year2 + _i), value: year2 + _i }); options.unshift({ label: "".concat(year2 - _i), value: year2 - _i }); } } return options; }, [mode]); var _useState = useState(function () { return initOptions(year); }), _useState2 = _slicedToArray(_useState, 2), yearOptions = _useState2[0], setYearOptions = _useState2[1]; var nearestYear = useMemo(function () { var _yearOptions$find; var extraYear = partial === "end" && mode === "year" && internalYear[1] - internalYear[0] <= 9 ? 9 : 0; return ((_yearOptions$find = yearOptions.find(function (option) { return option.value - (year + extraYear) <= 9 && option.value - (year + extraYear) >= 0; })) === null || _yearOptions$find === void 0 ? void 0 : _yearOptions$find.value) || year; }, [yearOptions, year, mode, partial, internalYear]); useEffect(function () { var yearRange = initOptions(year); setYearOptions(yearRange); }, [initOptions, year]); function loadMoreYear(year2, type) { var options = []; if (mode === "year") { var extraYear = year2 % 10; if (type === "add") { for (var i = year2 - extraYear + 10; i <= year2 - extraYear + 50; i += 10) { options.push({ label: "".concat(i, " - ").concat(i + 9), value: i }); } } else { for (var _i2 = year2 - extraYear - 1; _i2 > year2 - extraYear - 50; _i2 -= 10) { options.unshift({ label: "".concat(_i2 - 9, " - ").concat(_i2), value: _i2 }); } } } else if (type === "add") { for (var _i3 = year2 + 1; _i3 <= year2 + 10; _i3++) { options.push({ label: "".concat(_i3), value: _i3 }); } } else { for (var _i4 = year2 - 1; _i4 > year2 - 10; _i4--) { options.unshift({ label: "".concat(_i4), value: _i4 }); } } return options; } var labelMap = { year: { prev: preDecade, current: now, next: nextDecade }, month: { prev: preYear, current: now, next: nextYear }, date: { prev: preMonth, current: now, next: nextMonth } }; var headerClassName = "".concat(classPrefix, "-date-picker__header"); var showMonthPicker = mode === "date" || mode === "week"; function handlePanelTopClick(e) { var _e$stopPropagation, _e$nativeEvent, _e$nativeEvent$stopIm; e === null || e === void 0 || (_e$stopPropagation = e.stopPropagation) === null || _e$stopPropagation === void 0 || _e$stopPropagation.call(e); e === null || e === void 0 || (_e$nativeEvent = e.nativeEvent) === null || _e$nativeEvent === void 0 || (_e$nativeEvent$stopIm = _e$nativeEvent.stopImmediatePropagation) === null || _e$nativeEvent$stopIm === void 0 || _e$nativeEvent$stopIm.call(_e$nativeEvent); var firstYear = yearOptions[0].value; var options = loadMoreYear(firstYear, "reduce"); setYearOptions([].concat(_toConsumableArray(options), _toConsumableArray(yearOptions))); } function handlePanelBottomClick(e) { var _e$stopPropagation2, _e$nativeEvent2; e === null || e === void 0 || (_e$stopPropagation2 = e.stopPropagation) === null || _e$stopPropagation2 === void 0 || _e$stopPropagation2.call(e); e === null || e === void 0 || (_e$nativeEvent2 = e.nativeEvent) === null || _e$nativeEvent2 === void 0 || _e$nativeEvent2.stopImmediatePropagation(); var lastYear = yearOptions.slice(-1)[0].value; var options = loadMoreYear(lastYear, "add"); setYearOptions([].concat(_toConsumableArray(yearOptions), _toConsumableArray(options))); } function handleScroll(_ref) { var e = _ref.e; if (e.target.scrollTop === 0) { handlePanelTopClick(); scrollAnchorRef.current = "top"; } else if (e.target.scrollTop === e.target.scrollHeight - e.target.clientHeight) { handlePanelBottomClick(); scrollAnchorRef.current = "bottom"; } } function handleUpdateScrollTop(content) { if (scrollAnchorRef.current === "top") { content.scrollTop = 30 * 10; } else if (scrollAnchorRef.current === "bottom") { content.scrollTop = content.scrollHeight - 30 * 10; } else { var firstSelectedNode = content.querySelector(".".concat(classPrefix, "-is-selected")); if (firstSelectedNode) { var _getComputedStyle = getComputedStyle(firstSelectedNode), paddingBottom = _getComputedStyle.paddingBottom; var _getComputedStyle2 = getComputedStyle(content), marginBottom = _getComputedStyle2.marginBottom; var elementBottomHeight = parseInt(paddingBottom, 10) + parseInt(marginBottom, 10); var updateValue = firstSelectedNode.offsetTop - content.offsetTop - (content.clientHeight - firstSelectedNode.clientHeight) + elementBottomHeight; content.scrollTop = updateValue; } } } return /* @__PURE__ */React.createElement("div", { className: headerClassName }, /* @__PURE__ */React.createElement("div", { className: "".concat(headerClassName, "-controller") }, showMonthPicker && /* @__PURE__ */React.createElement(Select, { className: "".concat(headerClassName, "-controller-month"), value: month, options: monthOptions, onChange: function onChange(val) { return onMonthChange(val); }, popupProps: { attach: function attach(triggerElement) { return triggerElement.parentNode; }, overlayClassName: "".concat(headerClassName, "-controller-month-popup") } }), /* @__PURE__ */React.createElement(Select, { className: "".concat(headerClassName, "-controller-year"), value: mode === "year" ? nearestYear : year, options: yearOptions, onChange: function onChange(val) { return onYearChange(val); }, onPopupVisibleChange: function onPopupVisibleChange(visible) { if (!visible) scrollAnchorRef.current = "default"; }, popupProps: { onScroll: handleScroll, updateScrollTop: handleUpdateScrollTop, attach: function attach(triggerElement) { return triggerElement.parentNode; }, overlayClassName: "".concat(headerClassName, "-controller-year-popup") }, panelTopContent: /* @__PURE__ */React.createElement("div", { className: "".concat(classPrefix, "-select-option"), onClick: handlePanelTopClick }, "..."), panelBottomContent: /* @__PURE__ */React.createElement("div", { className: "".concat(classPrefix, "-select-option"), onClick: handlePanelBottomClick }, "...") })), /* @__PURE__ */React.createElement(PaginationMini, { tips: labelMap[mode], size: "small", onChange: onJumperClick })); }; DatePickerHeader.displayName = "DatePickerHeader"; var DateHeader = /*#__PURE__*/React.memo(DatePickerHeader); export { DateHeader as default }; //# sourceMappingURL=Header.js.map