UNPKG

tdesign-vue-next

Version:
177 lines (171 loc) 6.96 kB
/** * 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