Skip to content

Commit 5c585f2

Browse files
committed
[Notify] Fixing bug where disconnecting was not precisely disconnecting the correct thing
1 parent 50ecc6f commit 5c585f2

File tree

3 files changed

+18
-4
lines changed

3 files changed

+18
-4
lines changed

src/Notify/assets/dist/controller.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export default class extends Controller {
99
readonly hasHubValue: boolean;
1010
readonly hasTopicsValue: boolean;
1111
eventSources: Array<EventSource>;
12+
listeners: WeakMap<EventSource, (event: MessageEvent) => void>;
1213
initialize(): void;
1314
connect(): void;
1415
disconnect(): void;

src/Notify/assets/dist/controller.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ class default_1 extends Controller {
44
constructor() {
55
super(...arguments);
66
this.eventSources = [];
7+
this.listeners = new WeakMap();
78
}
89
initialize() {
910
const errorMessages = [];
@@ -25,13 +26,18 @@ class default_1 extends Controller {
2526
return;
2627
}
2728
this.eventSources.forEach((eventSource) => {
28-
eventSource.addEventListener('message', (event) => this._notify(JSON.parse(event.data).summary));
29+
const listener = (event) => this._notify(JSON.parse(event.data).summary);
30+
eventSource.addEventListener('message', listener);
31+
this.listeners.set(eventSource, listener);
2932
});
3033
this.dispatchEvent('connect', { eventSources: this.eventSources });
3134
}
3235
disconnect() {
3336
this.eventSources.forEach((eventSource) => {
34-
eventSource.removeEventListener('message', this._notify);
37+
const listener = this.listeners.get(eventSource);
38+
if (listener) {
39+
eventSource.removeEventListener('message', listener);
40+
}
3541
eventSource.close();
3642
});
3743
this.eventSources = [];

src/Notify/assets/src/controller.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export default class extends Controller {
2525
declare readonly hasTopicsValue: boolean;
2626

2727
eventSources: Array<EventSource> = [];
28+
listeners: WeakMap<EventSource, (event: MessageEvent) => void> = new WeakMap();
2829

2930
initialize() {
3031
const errorMessages: Array<string> = [];
@@ -50,15 +51,21 @@ export default class extends Controller {
5051
}
5152

5253
this.eventSources.forEach((eventSource) => {
53-
eventSource.addEventListener('message', (event) => this._notify(JSON.parse(event.data).summary));
54+
const listener = (event: MessageEvent) => this._notify(JSON.parse(event.data).summary);
55+
eventSource.addEventListener('message', listener);
56+
this.listeners.set(eventSource, listener);
5457
});
5558

5659
this.dispatchEvent('connect', { eventSources: this.eventSources });
5760
}
5861

5962
disconnect() {
6063
this.eventSources.forEach((eventSource) => {
61-
eventSource.removeEventListener('message', this._notify);
64+
const listener = this.listeners.get(eventSource);
65+
if (listener) {
66+
eventSource.removeEventListener('message', listener);
67+
}
68+
6269
eventSource.close();
6370
});
6471

0 commit comments

Comments
 (0)