tdesign-vue-next
Version:
TDesign Component for vue-next
180 lines (174 loc) • 7.18 kB
JavaScript
/**
* tdesign v1.19.2
* (c) 2026 tdesign
* @license MIT
*/
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var Vue = require('vue');
require('@babel/runtime/helpers/toConsumableArray');
require('@babel/runtime/helpers/typeof');
require('../../_chunks/dep-35e23c2b.js');
var index = require('../../_chunks/dep-0238ed9a.js');
require('@babel/runtime/helpers/slicedToArray');
require('../../_chunks/dep-0989c3be.js');
require('@babel/runtime/helpers/defineProperty');
var select_utils_index = require('../utils/index.js');
require('../../_chunks/dep-4a7162e7.js');
require('../../config-provider/hooks/useConfig.js');
require('../../_chunks/dep-be1af85d.js');
require('../../_chunks/dep-db9c85b1.js');
require('dayjs');
require('../../_chunks/dep-82fe2026.js');
require('../../_chunks/dep-33b46a52.js');
require('../../_chunks/dep-930a2de5.js');
require('../../_chunks/dep-2dcf9237.js');
require('../../_chunks/dep-22dc294c.js');
require('../../_chunks/dep-bf76dead.js');
require('../../_chunks/dep-c3bbd06c.js');
require('../../_chunks/dep-6d87f74d.js');
require('../../_chunks/dep-4cb26289.js');
require('../../_chunks/dep-281f7eb2.js');
require('../../_chunks/dep-f8f7b1af.js');
require('../../_chunks/dep-66d3f30f.js');
require('../../_chunks/dep-e1d22111.js');
require('../../_chunks/dep-754c0523.js');
require('../../_chunks/dep-7076a08a.js');
require('../../_chunks/dep-631750cd.js');
require('../../_chunks/dep-2fc884aa.js');
require('../../_chunks/dep-75d6da05.js');
require('../../_chunks/dep-274369eb.js');
require('../../_chunks/dep-df6e14a0.js');
require('@babel/runtime/helpers/createClass');
require('@babel/runtime/helpers/classCallCheck');
function useKeyboardControl(_ref) {
var displayOptions = _ref.displayOptions,
optionsList = _ref.optionsList,
innerPopupVisible = _ref.innerPopupVisible,
setInnerPopupVisible = _ref.setInnerPopupVisible,
selectPanelRef = _ref.selectPanelRef,
isFilterable = _ref.isFilterable,
isRemoteSearch = _ref.isRemoteSearch,
getSelectedOptions = _ref.getSelectedOptions,
setInnerValue = _ref.setInnerValue,
onCheckAllChange = _ref.onCheckAllChange,
innerValue = _ref.innerValue,
popupContentRef = _ref.popupContentRef,
multiple = _ref.multiple,
max = _ref.max,
isCheckAll = _ref.isCheckAll;
var hoverIndex = Vue.ref(-1);
var filteredOptions = Vue.ref([]);
var virtualFilteredOptions = Vue.ref([]);
var classPrefix = index.usePrefixClass();
var handleKeyDown = function handleKeyDown(e) {
var _optionsList$value$ne, _optionsList$value$ne2;
var optionsListLength = displayOptions.value.length;
var newIndex = hoverIndex.value;
switch (e.code) {
case "ArrowUp":
e.preventDefault();
if (hoverIndex.value === -1) {
newIndex = 0;
} else if (hoverIndex.value === 0 || hoverIndex.value > displayOptions.value.length - 1) {
newIndex = optionsListLength - 1;
} else {
newIndex--;
}
if ((_optionsList$value$ne = optionsList.value[newIndex]) !== null && _optionsList$value$ne !== void 0 && _optionsList$value$ne.disabled) {
newIndex--;
}
hoverIndex.value = newIndex;
break;
case "ArrowDown":
e.preventDefault();
if (hoverIndex.value === -1 || hoverIndex.value >= optionsListLength - 1) {
newIndex = 0;
} else {
newIndex++;
}
if ((_optionsList$value$ne2 = optionsList.value[newIndex]) !== null && _optionsList$value$ne2 !== void 0 && _optionsList$value$ne2.disabled) {
newIndex++;
}
hoverIndex.value = newIndex;
break;
case "Enter":
if (hoverIndex.value === -1) break;
var finalOptions = selectPanelRef.value.isVirtual && isFilterable.value && virtualFilteredOptions.value.length ? virtualFilteredOptions.value : isRemoteSearch.value ? optionsList.value : filteredOptions.value;
if (!finalOptions.length) finalOptions = optionsList.value;
if (!innerPopupVisible.value) {
setInnerPopupVisible(true, {
e: e
});
break;
}
if (!multiple) {
var selectedOptions = getSelectedOptions(finalOptions[hoverIndex.value].value);
setInnerValue(finalOptions[hoverIndex.value].value, {
option: selectedOptions === null || selectedOptions === void 0 ? void 0 : selectedOptions[0],
selectedOptions: getSelectedOptions(finalOptions[hoverIndex.value].value),
trigger: "check",
e: e
});
setInnerPopupVisible(false, {
e: e
});
} else {
var _finalOptions$hoverIn;
if (hoverIndex.value === -1) return;
if (finalOptions[hoverIndex.value].checkAll) {
onCheckAllChange(!isCheckAll.value);
return;
}
var optionValue = (_finalOptions$hoverIn = finalOptions[hoverIndex.value]) === null || _finalOptions$hoverIn === void 0 ? void 0 : _finalOptions$hoverIn.value;
if (!optionValue) return;
var newValue = select_utils_index.getNewMultipleValue(innerValue.value, optionValue);
if (max > 0 && newValue.value.length > max) return;
var _selectedOptions = getSelectedOptions(newValue.value);
setInnerValue(newValue.value, {
option: _selectedOptions.find(function (v) {
return v.value == optionValue;
}),
selectedOptions: _selectedOptions,
trigger: newValue.isCheck ? "check" : "uncheck",
e: e
});
filteredOptions.value = [];
}
break;
case "Escape":
if (innerPopupVisible.value) {
var _e$stopImmediatePropa;
e === null || e === void 0 || (_e$stopImmediatePropa = e.stopImmediatePropagation) === null || _e$stopImmediatePropa === void 0 || _e$stopImmediatePropa.call(e);
}
setInnerPopupVisible(false, {
e: e
});
break;
}
};
Vue.watch(innerPopupVisible, function (value) {
if (value) {
hoverIndex.value = -1;
virtualFilteredOptions.value = [];
filteredOptions.value = [];
}
});
Vue.watch(hoverIndex, function (index) {
var _selectPanelRef$value;
var optionHeight = (_selectPanelRef$value = selectPanelRef.value) === null || _selectPanelRef$value === void 0 || (_selectPanelRef$value = _selectPanelRef$value.innerRef) === null || _selectPanelRef$value === void 0 || (_selectPanelRef$value = _selectPanelRef$value.querySelector(".".concat(classPrefix.value, "-select-option"))) === null || _selectPanelRef$value === void 0 ? void 0 : _selectPanelRef$value.clientHeight;
var scrollHeight = optionHeight * index;
popupContentRef.value.scrollTo({
top: scrollHeight,
behavior: "smooth"
});
});
return {
hoverIndex: hoverIndex,
handleKeyDown: handleKeyDown,
virtualFilteredOptions: virtualFilteredOptions,
filteredOptions: filteredOptions
};
}
exports.useKeyboardControl = useKeyboardControl;
//# sourceMappingURL=useKeyboardControl.js.map