UNPKG

tdesign-react

Version:
193 lines (187 loc) 7.2 kB
/** * tdesign v1.16.2 * (c) 2025 tdesign * @license MIT */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var slicedToArray = require('../../_chunks/dep-5cb0d66d.js'); var React = require('react'); var hooks_useConfig = require('../../hooks/useConfig.js'); var select_base_Option = require('../../_chunks/dep-c28741f7.js'); require('../../_chunks/dep-737b8bd8.js'); require('../../config-provider/ConfigContext.js'); require('../../_chunks/dep-0fe55884.js'); require('../../_chunks/dep-b325182b.js'); require('../../_chunks/dep-17dea53e.js'); require('../../_chunks/dep-a0cbf081.js'); require('dayjs'); require('../../_chunks/dep-481a1ecc.js'); require('../../_chunks/dep-474eb386.js'); require('../../_chunks/dep-3b256bc0.js'); require('../../_chunks/dep-4ce0670e.js'); require('../../_chunks/dep-3448f35f.js'); require('../../_chunks/dep-b6a3ada9.js'); require('../../_chunks/dep-967e785f.js'); require('../../_chunks/dep-5c8525ea.js'); require('../../_chunks/dep-735cd5b9.js'); require('../../_chunks/dep-bdafd287.js'); require('../../_chunks/dep-4d300b8f.js'); require('../../_chunks/dep-3332ad6f.js'); require('../../_chunks/dep-98783318.js'); require('../../_chunks/dep-fc884a8e.js'); require('../../_chunks/dep-008b21d4.js'); require('../../_chunks/dep-9193eded.js'); require('../../_chunks/dep-afe817f9.js'); require('../../_chunks/dep-0b70c7ec.js'); require('../../_chunks/dep-a1e3e59b.js'); require('../../_chunks/dep-24ab8f68.js'); require('../../_chunks/dep-753b7d52.js'); require('../../_chunks/dep-a7fe58de.js'); require('classnames'); require('../../hooks/useDomRefCallback.js'); require('../../hooks/useRipple.js'); require('../../_chunks/dep-1ff6cacd.js'); require('../../hooks/useAnimation.js'); require('../../_chunks/dep-e0735b5f.js'); require('../../_chunks/dep-b304bc94.js'); require('../base/OptionGroup.js'); require('../defaultProps.js'); require('../../hooks/useDefaultProps.js'); require('../../_chunks/dep-b7bd245a.js'); require('../../_chunks/dep-5dd1b13c.js'); require('../../_chunks/dep-eb2203ae.js'); require('../../_chunks/dep-7659797a.js'); require('../../_chunks/dep-bb3e9667.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