Commit aa21cdf9c3ef6c2bfe529796687049bfbef5f1a9
1 parent
523e2c81
Process also shallow children and not only nested
Showing
1 changed file
with
20 additions
and
13 deletions
Show diff stats
src/components/select/select.vue
| ... | ... | @@ -107,6 +107,19 @@ |
| 107 | 107 | return options.concat(findOptionsInVNode(slotEntry)); |
| 108 | 108 | }, []); |
| 109 | 109 | |
| 110 | + const applyProp = (node, propName, value) => { | |
| 111 | + return { | |
| 112 | + ...node, | |
| 113 | + componentOptions: { | |
| 114 | + ...node.componentOptions, | |
| 115 | + propsData: { | |
| 116 | + ...node.componentOptions.propsData, | |
| 117 | + [propName]: value, | |
| 118 | + } | |
| 119 | + } | |
| 120 | + }; | |
| 121 | + }; | |
| 122 | + | |
| 110 | 123 | export default { |
| 111 | 124 | name: 'iSelect', |
| 112 | 125 | mixins: [ Emitter, Locale ], |
| ... | ... | @@ -304,19 +317,13 @@ |
| 304 | 317 | const autoCompleteOptions = extractOptions(slotOptions); |
| 305 | 318 | const selectedSlotOption = autoCompleteOptions[currentIndex]; |
| 306 | 319 | |
| 307 | - return slotOptions.map(node => copyChildren(node, (child) => { | |
| 308 | - if (child !== selectedSlotOption) return child; | |
| 309 | - return { | |
| 310 | - ...child, | |
| 311 | - componentOptions: { | |
| 312 | - ...child.componentOptions, | |
| 313 | - propsData: { | |
| 314 | - ...child.componentOptions.propsData, | |
| 315 | - isFocused: true, | |
| 316 | - } | |
| 317 | - } | |
| 318 | - }; | |
| 319 | - })); | |
| 320 | + return slotOptions.map(node => { | |
| 321 | + if (node === selectedSlotOption) return applyProp(node, 'isFocused', true); | |
| 322 | + return copyChildren(node, (child) => { | |
| 323 | + if (child !== selectedSlotOption) return child; | |
| 324 | + return applyProp(child, 'isFocused', true); | |
| 325 | + }); | |
| 326 | + }); | |
| 320 | 327 | } |
| 321 | 328 | |
| 322 | 329 | for (let option of slotOptions) { | ... | ... |