diff --git a/src/composables/useOptions.js b/src/composables/useOptions.js index 8757392..769065b 100644 --- a/src/composables/useOptions.js +++ b/src/composables/useOptions.js @@ -24,6 +24,7 @@ export default function useOptions (props, context, dep) const clearSearch = dep.clearSearch const update = dep.update const pointer = dep.pointer + const setPointer = dep.setPointer const clearPointer = dep.clearPointer const focus = dep.focus const deactivate = dep.deactivate @@ -496,6 +497,11 @@ export default function useOptions (props, context, dep) .filter((o, k) => iv.value.length + 1 + k <= max.value || max.value === -1) ) } + + if (hideSelected.value && pointer.value) { + // Refresh pointer because pointer.__VISIBLE__ are not reactive #354 + setPointer(fg.value.filter(g => !g[disabledProp.value])[pointer.value.index]) + } break } diff --git a/tests/unit/composables/usePointerAction.spec.js b/tests/unit/composables/usePointerAction.spec.js index bf4217d..253c6ea 100644 --- a/tests/unit/composables/usePointerAction.spec.js +++ b/tests/unit/composables/usePointerAction.spec.js @@ -639,6 +639,35 @@ describe('usePointer Action', () => { expect(select.vm.pointer.label).toBe('11') }) + + it('should point at next group after full group is selected when hideSelected=true', async () => { + let select = createSelect({ + mode: 'multiple', + value: [], + hideSelected: true, + closeOnSelect: false, + options: [ + { + label: 'First', + options: [1,2,3], + }, + { + label: 'Second', + options: [4,5,6], + }, + ], + groups: true + }) + + select.vm.pointer = select.vm.fg[0] + select.vm.selectPointer() + + await nextTick() + + select.vm.forwardPointer() + + expect(select.vm.pointer.label).toBe('Second') + }) }) describe('backwardPointer', () => {