tdesign-react
Version:
TDesign Component for React
193 lines (187 loc) • 7.2 kB
JavaScript
/**
* tdesign v1.16.2
* (c) 2025 tdesign
* @license MIT
*/
;
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