From 5b9dda84b2e0f18f5a34213bb293b4f832de866e Mon Sep 17 00:00:00 2001 From: a11delavar Date: Fri, 7 Jun 2024 22:03:20 +0200 Subject: [PATCH] chore(Lit): Reuse event listener targets for disconnection --- package-lock.json | 2 +- .../eventListener/EventListenerController.ts | 17 +++++++++-------- packages/Lit/package.json | 2 +- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 164f012..6b3905c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8385,7 +8385,7 @@ }, "packages/Lit": { "name": "@a11d/lit", - "version": "0.9.3", + "version": "0.9.4", "license": "MIT", "dependencies": { "@a11d/constructor": "x", diff --git a/packages/Lit/eventListener/EventListenerController.ts b/packages/Lit/eventListener/EventListenerController.ts index 6c779da..058a5c1 100644 --- a/packages/Lit/eventListener/EventListenerController.ts +++ b/packages/Lit/eventListener/EventListenerController.ts @@ -28,6 +28,7 @@ function extractOptions(options: EventListenerControllerOptions): FullEventListe export class EventListenerController extends Controller { protected readonly options: FullEventListenerControllerOptions + private targets?: Array constructor( protected override readonly host: ReactiveElement, @@ -42,15 +43,15 @@ export class EventListenerController extends Controller { } async subscribe() { - const targets = await extractEventTargets.call(this.context, this.host, this.options.target) - for (const target of targets) { + this.targets = await extractEventTargets.call(this.context, this.host, this.options.target) + for (const target of this.targets) { target.addEventListener(this.options.type, this.options.listener, this.options.options) } } async unsubscribe() { - const targets = await extractEventTargets.call(this.context, this.host, this.options.target) - for (const target of targets) { + this.targets ??= await extractEventTargets.call(this.context, this.host, this.options.target) + for (const target of this.targets) { target?.removeEventListener(this.options.type, this.options.listener, this.options.options) } } @@ -60,11 +61,11 @@ export class EventListenerController extends Controller { await this.subscribe() } - override async hostConnected() { - await this.subscribe() + override hostConnected() { + this.subscribe() } - override async hostDisconnected() { - await this.unsubscribe() + override hostDisconnected() { + this.unsubscribe() } } \ No newline at end of file diff --git a/packages/Lit/package.json b/packages/Lit/package.json index 3ad0bcb..8e67fd5 100644 --- a/packages/Lit/package.json +++ b/packages/Lit/package.json @@ -1,6 +1,6 @@ { "name": "@a11d/lit", - "version": "0.9.3", + "version": "0.9.4", "description": "A thin wrapper around the Lit library", "repository": { "type": "git",