From 5ca063628a0c61899b2cbd3edc779023c5403be2 Mon Sep 17 00:00:00 2001 From: Jeremy <15975785+jw-foss@users.noreply.github.com> Date: Tue, 7 Mar 2023 20:00:55 +0800 Subject: [PATCH] fix(components): [select] console warning (#11868) * fix(components): [select] console warning * Move rendering related logic into render functions. * chore: fix warnings * fix: keyboard navigation issue --- packages/components/select/src/options.ts | 29 +++++++++++++++++++++ packages/components/select/src/select.vue | 12 ++++++++- packages/components/select/src/useSelect.ts | 14 +--------- 3 files changed, 41 insertions(+), 14 deletions(-) create mode 100644 packages/components/select/src/options.ts diff --git a/packages/components/select/src/options.ts b/packages/components/select/src/options.ts new file mode 100644 index 0000000000..8cbda10c38 --- /dev/null +++ b/packages/components/select/src/options.ts @@ -0,0 +1,29 @@ +import { defineComponent } from 'vue' + +import type { Component, VNode } from 'vue' + +export default defineComponent({ + name: 'ElOptions', + emits: ['update-options'], + setup(_, { slots, emit }) { + return () => { + const children = slots.default?.()! + + if (children.length) { + const options = (children![0]?.children as VNode[])?.[0]?.children || [] + if (options && options.length) { + const filteredOptions = (options as VNode[]) + .filter( + (item: VNode) => + ((item?.type || {}) as Component)?.name === 'ElOption' + ) + .map((item: VNode) => item.props?.label) + + emit('update-options', filteredOptions) + } + } + + return children + } + }, +}) diff --git a/packages/components/select/src/select.vue b/packages/components/select/src/select.vue index 43738074ef..e14be246b4 100644 --- a/packages/components/select/src/select.vue +++ b/packages/components/select/src/select.vue @@ -247,7 +247,9 @@ ]" > - + + +