tdesign-vue-next
Version:
TDesign Component for vue-next
177 lines (171 loc) • 6.96 kB
JavaScript
/**
* tdesign v1.15.2
* (c) 2025 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-040b3cbb.js');
var index = require('../../_chunks/dep-ac087407.js');
require('@babel/runtime/helpers/slicedToArray');
require('../../_chunks/dep-682444b3.js');
require('@babel/runtime/helpers/defineProperty');
var select_utils_index = require('../utils/index.js');
require('../../_chunks/dep-0f5dd876.js');
require('../../config-provider/hooks/useConfig.js');
require('../../_chunks/dep-ee4f84a5.js');
require('../../_chunks/dep-66f974a3.js');
require('dayjs');
require('../../_chunks/dep-5e94db90.js');
require('../../_chunks/dep-2f309208.js');
require('../../_chunks/dep-7154c044.js');
require('../../_chunks/dep-3e1aa2e0.js');
require('../../_chunks/dep-79f734cc.js');
require('../../_chunks/dep-63ff6e12.js');
require('../../_chunks/dep-020c2a7e.js');
require('../../_chunks/dep-79cd6be1.js');
require('../../_chunks/dep-41b6fe49.js');
require('../../_chunks/dep-ce0157af.js');
require('../../_chunks/dep-06f7d92f.js');
require('../../_chunks/dep-0c415789.js');
require('../../_chunks/dep-57045e93.js');
require('../../_chunks/dep-c66679ef.js');
require('../../_chunks/dep-3df90229.js');
require('../../_chunks/dep-93426c60.js');
require('../../_chunks/dep-c6c5ec69.js');
require('../../_chunks/dep-1ec17e27.js');
require('../../_chunks/dep-15b276e6.js');
require('../../_chunks/dep-4d3ddec0.js');
require('../../_chunks/dep-d0f125b5.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":
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