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 @@
]"
>
-
+
+
+