element-plus
Version:
A Component Library for Vue 3
1 lines • 6.82 kB
Source Map (JSON)
{"version":3,"file":"select.mjs","sources":["../../../../../../packages/components/tree-select/src/select.ts"],"sourcesContent":["// @ts-nocheck\nimport { computed, nextTick, onMounted, toRefs, watch } from 'vue'\nimport { useEventListener } from '@vueuse/core'\nimport { pick } from 'lodash-unified'\nimport ElSelect from '@element-plus/components/select'\nimport { useNamespace } from '@element-plus/hooks'\nimport { EVENT_CODE, UPDATE_MODEL_EVENT } from '@element-plus/constants'\nimport { getEventCode } from '@element-plus/utils'\n\nimport type { Ref } from 'vue'\nimport type { SelectInstance } from '@element-plus/components/select'\nimport type { TreeInstance } from '@element-plus/components/tree'\n\nexport const useSelect = (\n props,\n { attrs, emit },\n {\n select,\n tree,\n key,\n }: {\n select: Ref<SelectInstance | undefined>\n tree: Ref<TreeInstance | undefined>\n key: Ref<string>\n }\n) => {\n const ns = useNamespace('tree-select')\n\n // update tree data when use filterMethod/remoteMethod\n watch(\n () => props.data,\n () => {\n if (props.filterable) {\n nextTick(() => {\n // let tree node expand only, same with tree filter\n tree.value?.filter(select.value?.states.inputValue)\n })\n }\n },\n { flush: 'post' }\n )\n\n const focusLastNode = (listNode) => {\n const lastNode = listNode.at(-1)\n if (lastNode.expanded && lastNode.childNodes.at(-1)) {\n focusLastNode([lastNode.childNodes.at(-1)])\n } else {\n const el = tree.value.el$?.querySelector(\n `[data-key=\"${listNode.at(-1).key}\"]`\n )\n el?.focus({ preventScroll: true })\n return\n }\n }\n\n onMounted(() => {\n useEventListener(\n () => select.value?.$el,\n 'keydown',\n async (evt) => {\n const code = getEventCode(evt)\n const { dropdownMenuVisible } = select.value!\n if (\n [EVENT_CODE.down, EVENT_CODE.up].includes(code) &&\n dropdownMenuVisible\n ) {\n await nextTick()\n // wait navigateOption to finish\n setTimeout(() => {\n if (EVENT_CODE.up === code) {\n const listNode = tree.value.store.root.childNodes\n focusLastNode(listNode)\n return\n }\n // el-select-dropdown__item => el-tree-node__content => el-tree-node__content\n select.value.optionsArray[\n select.value.states.hoveringIndex\n ].$el?.parentNode?.parentNode?.focus({ preventScroll: true })\n })\n }\n },\n {\n capture: true,\n }\n )\n })\n\n const result = {\n ...pick(toRefs(props), Object.keys(ElSelect.props)),\n ...attrs,\n class: computed(() => attrs.class),\n style: computed(() => attrs.style),\n // attrs is not reactive, when v-model binding source changes,\n // this listener is still old, see the bug(or test 'v-model source change'):\n // https://github.com/element-plus/element-plus/issues/14204\n 'onUpdate:modelValue': (value) => emit(UPDATE_MODEL_EVENT, value),\n valueKey: key,\n popperClass: computed(() => {\n const classes = [ns.e('popper')]\n if (props.popperClass) classes.push(props.popperClass)\n return classes.join(' ')\n }),\n filterMethod: (keyword = '') => {\n if (props.filterMethod) {\n props.filterMethod(keyword)\n } else if (props.remoteMethod) {\n props.remoteMethod(keyword)\n } else {\n // let tree node expand only, same with tree filter\n tree.value?.filter(keyword)\n }\n },\n }\n\n return result\n}\n"],"names":[],"mappings":";;;;;;;;;AAaO,MAAM,YAAY,CACvB,KAAA,EACA,EAAE,KAAA,EAAO,MAAK,EACd;AAAA,EACE,MAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,KAKG;AACH,EAAA,MAAM,EAAA,GAAK,aAAa,aAAa,CAAA;AAGrC,EAAA,KAAA;AAAA,IACE,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,MAAM;AACJ,MAAA,IAAI,MAAM,UAAA,EAAY;AACpB,QAAA,QAAA,CAAS,MAAM;AAjCvB,UAAA,IAAA,EAAA,EAAA,EAAA;AAmCU,UAAA,CAAA,EAAA,GAAA,IAAA,CAAK,UAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,MAAA,CAAA,CAAO,EAAA,GAAA,MAAA,CAAO,KAAA,KAAP,mBAAc,MAAA,CAAO,UAAA,CAAA;AAAA,QAC1C,CAAC,CAAA;AAAA,MACH;AAAA,IACF,CAAA;AAAA,IACA,EAAE,OAAO,MAAA;AAAO,GAClB;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,QAAA,KAAa;AA1CtC,IAAA,IAAA,EAAA;AA2CI,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,EAAA,CAAG,EAAE,CAAA;AAC/B,IAAA,IAAI,SAAS,QAAA,IAAY,QAAA,CAAS,UAAA,CAAW,EAAA,CAAG,EAAE,CAAA,EAAG;AACnD,MAAA,aAAA,CAAc,CAAC,QAAA,CAAS,UAAA,CAAW,EAAA,CAAG,EAAE,CAAC,CAAC,CAAA;AAAA,IAC5C,CAAA,MAAO;AACL,MAAA,MAAM,EAAA,GAAA,CAAK,EAAA,GAAA,IAAA,CAAK,KAAA,CAAM,GAAA,KAAX,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgB,aAAA;AAAA,QACzB,CAAA,WAAA,EAAc,QAAA,CAAS,EAAA,CAAG,EAAE,EAAE,GAAG,CAAA,EAAA;AAAA,OAAA;AAEnC,MAAA,EAAA,IAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAI,KAAA,CAAM,EAAE,aAAA,EAAe,IAAA,EAAK,CAAA;AAChC,MAAA;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,gBAAA;AAAA,MACE,MAAG;AAzDT,QAAA,IAAA,EAAA;AAyDY,QAAA,OAAA,CAAA,EAAA,GAAA,MAAA,CAAO,UAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAc,GAAA;AAAA,MAAA,CAAA;AAAA,MACpB,SAAA;AAAA,MACA,OAAO,GAAA,KAAQ;AACb,QAAA,MAAM,IAAA,GAAO,aAAa,GAAG,CAAA;AAC7B,QAAA,MAAM,EAAE,mBAAA,EAAoB,GAAI,MAAA,CAAO,KAAA;AACvC,QAAA,IACE,CAAC,WAAW,IAAA,EAAM,UAAA,CAAW,EAAE,CAAA,CAAE,QAAA,CAAS,IAAI,CAAA,IAC9C,mBAAA,EACA;AACA,UAAA,MAAM,QAAA,EAAS;AAEf,UAAA,UAAA,CAAW,MAAM;AApE3B,YAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAqEY,YAAA,IAAI,UAAA,CAAW,OAAO,IAAA,EAAM;AAC1B,cAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,UAAA;AACvC,cAAA,aAAA,CAAc,QAAQ,CAAA;AACtB,cAAA;AAAA,YACF;AAEA,YAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,MAAM,YAAA,CACX,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,aACtB,CAAA,CAAE,GAAA,KAFF,IAAA,GAAA,MAAA,GAAA,EAAA,CAEO,UAAA,KAFP,mBAEmB,UAAA,KAFnB,IAAA,GAAA,MAAA,GAAA,EAAA,CAE+B,KAAA,CAAM,EAAE,eAAe,IAAA,EAAK,CAAA;AAAA,UAC7D,CAAC,CAAA;AAAA,QACH;AAAA,MACF,CAAA;AAAA,MACA;AAAA,QACE,OAAA,EAAS;AAAA;AACX,KACF;AAAA,EACF,CAAC,CAAA;AAED,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,GAAG,KAAK,MAAA,CAAO,KAAK,GAAG,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,KAAK,CAAC,CAAA;AAAA,IAClD,GAAG,KAAA;AAAA,IACH,KAAA,EAAO,QAAA,CAAS,MAAM,KAAA,CAAM,KAAK,CAAA;AAAA,IACjC,KAAA,EAAO,QAAA,CAAS,MAAM,KAAA,CAAM,KAAK,CAAA;AAAA;AAAA;AAAA;AAAA,IAIjC,qBAAA,EAAuB,CAAC,KAAA,KAAU,IAAA,CAAK,oBAAoB,KAAK,CAAA;AAAA,IAChE,QAAA,EAAU,GAAA;AAAA,IACV,WAAA,EAAa,SAAS,MAAM;AAC1B,MAAA,MAAM,OAAA,GAAU,CAAC,EAAA,CAAG,CAAA,CAAE,QAAQ,CAAC,CAAA;AAC/B,MAAA,IAAI,KAAA,CAAM,WAAA,EAAa,OAAA,CAAQ,IAAA,CAAK,MAAM,WAAW,CAAA;AACrD,MAAA,OAAO,OAAA,CAAQ,KAAK,GAAG,CAAA;AAAA,IACzB,CAAC,CAAA;AAAA,IACD,YAAA,EAAc,CAAC,OAAA,GAAU,EAAA,KAAO;AAtGpC,MAAA,IAAA,EAAA;AAuGM,MAAA,IAAI,MAAM,YAAA,EAAc;AACtB,QAAA,KAAA,CAAM,aAAa,OAAO,CAAA;AAAA,MAC5B,CAAA,MAAA,IAAW,MAAM,YAAA,EAAc;AAC7B,QAAA,KAAA,CAAM,aAAa,OAAO,CAAA;AAAA,MAC5B,CAAA,MAAO;AAEL,QAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,mBAAY,MAAA,CAAO,OAAA,CAAA;AAAA,MACrB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,OAAO,MAAA;AACT;;;;"}