Skip to content

Commit a49dd62

Browse files
tasseKATTcbt1
authored andcommitted
fix(component-factory): remove context event listeners on unmount (#319)
1 parent 4004428 commit a49dd62

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

packages/picasso.js/src/core/component/__tests__/component-factory.spec.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,22 @@ describe('Component', () => {
272272
});
273273
});
274274

275+
describe('unmount', () => {
276+
let instance;
277+
278+
beforeEach(() => {
279+
instance = createAndRenderComponent({
280+
key: 'myKey',
281+
eventListeners: [{ event: 'event1', listener: () => {} }, { event: 'event2', listener: () => {} }]
282+
});
283+
});
284+
285+
it('should remove event listeners from instance context', () => {
286+
instance.unmount();
287+
expect(instance.ctx.eventListeners).to.deep.equal([]);
288+
});
289+
});
290+
275291
describe('getBrushedShapes', () => {
276292
let instance;
277293
let config;

packages/picasso.js/src/core/component/component-factory.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,9 +153,12 @@ function setUpEmitter(ctx, emitter, settings) {
153153
}
154154

155155
function tearDownEmitter(ctx, emitter) {
156-
(ctx.eventListeners || []).forEach(({ event, listener }) => {
157-
emitter.removeListener(event, listener);
158-
});
156+
if (ctx.eventListeners) {
157+
ctx.eventListeners.forEach(({ event, listener }) => {
158+
emitter.removeListener(event, listener);
159+
});
160+
ctx.eventListeners.length = 0;
161+
}
159162
ctx.emit = () => {};
160163
}
161164

0 commit comments

Comments
 (0)