select.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
  2. const require_runtime = require('../../../_virtual/_rolldown/runtime.js');
  3. const require_aria = require('../../../constants/aria.js');
  4. const require_event = require('../../../constants/event.js');
  5. const require_event$1 = require('../../../utils/dom/event.js');
  6. const require_index = require('../../../hooks/use-namespace/index.js');
  7. const require_index$1 = require('../../select/index.js');
  8. let _vueuse_core = require("@vueuse/core");
  9. let lodash_unified = require("lodash-unified");
  10. let vue = require("vue");
  11. //#region ../../packages/components/tree-select/src/select.ts
  12. const useSelect = (props, { attrs, emit }, { select, tree, key }) => {
  13. const ns = require_index.useNamespace("tree-select");
  14. (0, vue.watch)(() => props.data, () => {
  15. if (props.filterable) (0, vue.nextTick)(() => {
  16. tree.value?.filter(select.value?.states.inputValue);
  17. });
  18. }, { flush: "post" });
  19. const focusLastNode = (listNode) => {
  20. const lastNode = listNode.at(-1);
  21. if (lastNode.expanded && lastNode.childNodes.at(-1)) focusLastNode([lastNode.childNodes.at(-1)]);
  22. else {
  23. (tree.value.el$?.querySelector(`[data-key="${listNode.at(-1).key}"]`))?.focus({ preventScroll: true });
  24. return;
  25. }
  26. };
  27. (0, vue.onMounted)(() => {
  28. (0, _vueuse_core.useEventListener)(() => select.value?.$el, "keydown", async (evt) => {
  29. const code = require_event$1.getEventCode(evt);
  30. const { dropdownMenuVisible } = select.value;
  31. if ([require_aria.EVENT_CODE.down, require_aria.EVENT_CODE.up].includes(code) && dropdownMenuVisible) {
  32. await (0, vue.nextTick)();
  33. setTimeout(() => {
  34. if (require_aria.EVENT_CODE.up === code) {
  35. const listNode = tree.value.store.root.childNodes;
  36. focusLastNode(listNode);
  37. return;
  38. }
  39. select.value.optionsArray[select.value.states.hoveringIndex].$el?.parentNode?.parentNode?.focus({ preventScroll: true });
  40. });
  41. }
  42. }, { capture: true });
  43. });
  44. return {
  45. ...(0, lodash_unified.pick)((0, vue.toRefs)(props), Object.keys(require_index$1.ElSelect.props)),
  46. ...attrs,
  47. class: (0, vue.computed)(() => attrs.class),
  48. style: (0, vue.computed)(() => attrs.style),
  49. "onUpdate:modelValue": (value) => emit(require_event.UPDATE_MODEL_EVENT, value),
  50. valueKey: key,
  51. popperClass: (0, vue.computed)(() => {
  52. const classes = [ns.e("popper")];
  53. if (props.popperClass) classes.push(props.popperClass);
  54. return classes.join(" ");
  55. }),
  56. filterMethod: (keyword = "") => {
  57. if (props.filterMethod) props.filterMethod(keyword);
  58. else if (props.remoteMethod) props.remoteMethod(keyword);
  59. else tree.value?.filter(keyword);
  60. }
  61. };
  62. };
  63. //#endregion
  64. exports.useSelect = useSelect;
  65. //# sourceMappingURL=select.js.map