UNPKG

tdesign-react

Version:
197 lines (191 loc) 7.36 kB
/** * tdesign v1.16.6 * (c) 2026 tdesign * @license MIT */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var slicedToArray = require('../../_chunks/dep-3281986a.js'); var React = require('react'); var hooks_useConfig = require('../../hooks/useConfig.js'); var select_base_Option = require('../../_chunks/dep-c846b0cb.js'); require('../../_chunks/dep-54373955.js'); require('../../_chunks/dep-ef5bfcf1.js'); require('../../config-provider/ConfigContext.js'); require('../../_chunks/dep-1f6c39e3.js'); require('../../_chunks/dep-90a93885.js'); require('../../_chunks/dep-875a5344.js'); require('../../_chunks/dep-20f09a63.js'); require('dayjs'); require('../../_chunks/dep-e691746e.js'); require('../../_chunks/dep-9d3b1a05.js'); require('../../_chunks/dep-1f8c969d.js'); require('../../_chunks/dep-615c149d.js'); require('../../_chunks/dep-0173c82c.js'); require('../../_chunks/dep-a8d5081a.js'); require('../../_chunks/dep-403f5edf.js'); require('../../_chunks/dep-d24b94bc.js'); require('../../_chunks/dep-6478e7e3.js'); require('../../_chunks/dep-c9025587.js'); require('../../_chunks/dep-8663a5c9.js'); require('../../_chunks/dep-50349518.js'); require('../../_chunks/dep-8c9795f9.js'); require('../../_chunks/dep-723e29d6.js'); require('../../_chunks/dep-0bd8b970.js'); require('../../_chunks/dep-73ef2133.js'); require('../../_chunks/dep-cae1e5aa.js'); require('../../_chunks/dep-0b97e212.js'); require('../../_chunks/dep-0652d2a6.js'); require('../../_chunks/dep-1a7ce20e.js'); require('../../_chunks/dep-116af952.js'); require('../../_chunks/dep-f6a777ad.js'); require('../../_chunks/dep-ff301423.js'); require('../../_chunks/dep-33be2db8.js'); require('../../_chunks/dep-989c8b4a.js'); require('classnames'); require('../../hooks/useDomRefCallback.js'); require('../../hooks/useRipple.js'); require('../../_chunks/dep-4cca69f7.js'); require('../../hooks/useAnimation.js'); require('../../_chunks/dep-2bbded38.js'); require('../../_chunks/dep-202d6c73.js'); require('../base/OptionGroup.js'); require('../defaultProps.js'); require('../../hooks/useDefaultProps.js'); require('../../_chunks/dep-d1f369bc.js'); require('../../_chunks/dep-adec3cbe.js'); require('../../_chunks/dep-4748ebeb.js'); require('../../_chunks/dep-d7d7df54.js'); require('../../_chunks/dep-4c4d8eee.js'); function useKeyboardControl(_ref) { var max = _ref.max, multiple = _ref.multiple, keys = _ref.keys, value = _ref.value, valueType = _ref.valueType, handleChange = _ref.handleChange, innerPopupVisible = _ref.innerPopupVisible, handlePopupVisibleChange = _ref.handlePopupVisibleChange, displayOptions = _ref.displayOptions, onCheckAllChange = _ref.onCheckAllChange, selectInputRef = _ref.selectInputRef, toggleIsScrolling = _ref.toggleIsScrolling; var _useConfig = hooks_useConfig["default"](), classPrefix = _useConfig.classPrefix; var isCheckAll = React.useRef(false); var _useState = React.useState(-1), _useState2 = slicedToArray._slicedToArray(_useState, 2), hoverIndex = _useState2[0], changeHoverIndex = _useState2[1]; var isObjectType = React.useMemo(function () { return valueType === "object"; }, [valueType]); var _useMemo = React.useMemo(function () { return select_base_Option.getKeyMapping(keys); }, [keys]), valueKey = _useMemo.valueKey, disabledKey = _useMemo.disabledKey; React.useEffect(function () { if (!innerPopupVisible) { changeHoverIndex(-1); } else if (!multiple) { var index = displayOptions.findIndex(function (option) { return option.value === value; }); changeHoverIndex(index >= 0 ? index : -1); } else { changeHoverIndex(-1); } }, [innerPopupVisible, displayOptions]); React.useEffect(function () { if (!Array.isArray(value)) return; isCheckAll.current = value.length === displayOptions.filter(function (v) { return !((v.disabled || v.checkAll) && !value.includes(v.value)); }).length; }, [value, displayOptions]); var handleKeyboardScroll = function handleKeyboardScroll(hoverIndex2) { var popupContent = selectInputRef.current.getPopupContentElement(); var optionSelector = ".".concat(classPrefix, "-select-option"); var selector = ".".concat(classPrefix, "-select-option__hover"); var firstSelectedNode = popupContent.querySelector(selector); if (firstSelectedNode) { toggleIsScrolling(true); var scrollHeight = popupContent.querySelector(optionSelector).clientHeight * hoverIndex2; popupContent.scrollTo({ top: scrollHeight, behavior: "smooth" }); } }; var handleKeyDown = function handleKeyDown(_value, _ref2) { var _displayOptions$newIn, _displayOptions$newIn2; var e = _ref2.e; var optionsListLength = displayOptions.length; var newIndex = hoverIndex; switch (e.code) { case "ArrowUp": e.preventDefault(); if (hoverIndex === -1) newIndex = 0;else if (hoverIndex === 0 || hoverIndex > optionsListLength - 1) newIndex = optionsListLength - 1;else newIndex -= 1; if ((_displayOptions$newIn = displayOptions[newIndex]) !== null && _displayOptions$newIn !== void 0 && _displayOptions$newIn[disabledKey]) newIndex -= 1; changeHoverIndex(newIndex); handleKeyboardScroll(newIndex); break; case "ArrowDown": e.preventDefault(); if (hoverIndex === -1 || hoverIndex >= optionsListLength - 1) newIndex = 0;else newIndex += 1; if ((_displayOptions$newIn2 = displayOptions[newIndex]) !== null && _displayOptions$newIn2 !== void 0 && _displayOptions$newIn2.disabled) newIndex += 1; changeHoverIndex(newIndex); handleKeyboardScroll(newIndex); break; case "Enter": { if (!innerPopupVisible) { handlePopupVisibleChange(true, { e: e }); break; } if (hoverIndex === -1) return; if (displayOptions[hoverIndex].checkAll) { onCheckAllChange(!isCheckAll.current, e); return; } var selectedOptions = displayOptions[hoverIndex]; var optionValue = isObjectType ? selectedOptions : selectedOptions[valueKey]; if (!multiple) { handleChange(optionValue, { trigger: "check", e: e }); handlePopupVisibleChange(false, { e: e }); changeHoverIndex(-1); handleKeyboardScroll(0); } else { var valueIndex = value.indexOf(optionValue); var isSelected = valueIndex > -1; var values = select_base_Option.getSelectValueArr(value, optionValue, isSelected, valueType, keys, selectedOptions); if (max > 0 && values.length > max) return; handleChange(values, { trigger: !isSelected ? "check" : "uncheck", e: e }); } break; } case "Escape": handlePopupVisibleChange(false, { e: e }); changeHoverIndex(-1); handleKeyboardScroll(0); } }; return { hoverIndex: hoverIndex, handleKeyDown: handleKeyDown }; } exports["default"] = useKeyboardControl; //# sourceMappingURL=useKeyboardControl.js.map