tdesign-react
Version:
TDesign Component for React
197 lines (191 loc) • 7.36 kB
JavaScript
/**
* tdesign v1.16.6
* (c) 2026 tdesign
* @license MIT
*/
;
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