From 4b73dd2889a7b9b34b141a70247dbf50f8a16ad7 Mon Sep 17 00:00:00 2001 From: Kael Date: Fri, 11 Oct 2019 04:28:32 +1100 Subject: [PATCH] fix(activatable): get activator element from event or nested component (#9294) * fix(activatable): get activator element from event or nested component fixes #8846 * fix: un-break activator prop * chore: comments --- .../activatable/__tests__/activatable.spec.ts | 9 ++--- .../vuetify/src/mixins/activatable/index.ts | 36 ++++++++++++------- 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/packages/vuetify/src/mixins/activatable/__tests__/activatable.spec.ts b/packages/vuetify/src/mixins/activatable/__tests__/activatable.spec.ts index 0ddd5724671..dac3bfe7286 100644 --- a/packages/vuetify/src/mixins/activatable/__tests__/activatable.spec.ts +++ b/packages/vuetify/src/mixins/activatable/__tests__/activatable.spec.ts @@ -127,13 +127,10 @@ describe('activatable.ts', () => { }, }) - const activatorElement = wrapper.vm.activatorElement as any - await wrapper.vm.$nextTick() expect(wrapper.vm.isActive).toBe(false) - expect(el).toEqual(activatorElement) - activatorElement.dispatchEvent(new Event('click')) + el.dispatchEvent(new Event('click')) expect(wrapper.vm.isActive).toBe(true) wrapper.setProps({ openOnHover: true, value: false }) @@ -141,13 +138,13 @@ describe('activatable.ts', () => { await wrapper.vm.$nextTick() expect(wrapper.vm.isActive).toBe(false) - activatorElement.dispatchEvent(new Event('mouseenter')) + el.dispatchEvent(new Event('mouseenter')) await new Promise(resolve => setTimeout(resolve, wrapper.vm.openDelay)) expect(wrapper.vm.isActive).toBe(true) - activatorElement.dispatchEvent(new Event('mouseleave')) + el.dispatchEvent(new Event('mouseleave')) await new Promise(resolve => setTimeout(resolve, wrapper.vm.leaveDelay)) expect(wrapper.vm.isActive).toBe(false) diff --git a/packages/vuetify/src/mixins/activatable/index.ts b/packages/vuetify/src/mixins/activatable/index.ts index 601ff68bdc3..4a95860fe43 100644 --- a/packages/vuetify/src/mixins/activatable/index.ts +++ b/packages/vuetify/src/mixins/activatable/index.ts @@ -33,6 +33,7 @@ export default baseMixins.extend({ }, data: () => ({ + // Do not use this directly, call getActivator() instead activatorElement: null as HTMLElement | null, activatorNode: [] as VNode[], events: ['click', 'mouseenter', 'mouseleave'], @@ -41,11 +42,6 @@ export default baseMixins.extend({ watch: { activator: 'resetActivator', - activatorElement (val) { - if (!val) return - - this.addActivatorEvents() - }, openOnHover: 'resetActivator', }, @@ -56,7 +52,7 @@ export default baseMixins.extend({ consoleError(`The activator slot must be bound, try '