Skip to content

Commit 7161c01

Browse files
author
Matt Mazzola
committed
Change event subscription to use simulated DOM events instead of directly calling handler. This allows more flexibility for consumers to register handlers using other patterns than report.on() such as jquery.
1 parent f131039 commit 7161c01

3 files changed

Lines changed: 10 additions & 8 deletions

File tree

src/embed.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -149,16 +149,16 @@ export abstract class Embed {
149149
off<T>(eventName: string, handler?: service.IEventHandler<T>): void {
150150
const fakeEvent: service.IEvent<any> = { name: eventName, type: null, id: null, value: null };
151151
if(handler) {
152-
utils.remove(eventHandler => eventHandler.test(fakeEvent) && (eventHandler.handle === handler), this.eventHandlers);
152+
this.element.removeEventListener(eventName, <any>handler);
153153
}
154154
else {
155155
const eventHandlersToRemove = this.eventHandlers
156156
.filter(eventHandler => eventHandler.test(fakeEvent));
157157

158158
eventHandlersToRemove
159159
.forEach(eventHandlerToRemove => {
160-
utils.remove(eventHandler => eventHandler === eventHandlerToRemove, this.eventHandlers);
161-
})
160+
this.element.removeEventListener(eventName, <any>eventHandlerToRemove.handle);
161+
});
162162
}
163163
}
164164

@@ -180,6 +180,8 @@ export abstract class Embed {
180180
test: (event: service.IEvent<T>) => event.name === eventName,
181181
handle: handler
182182
});
183+
184+
this.element.addEventListener(eventName, <any>handler)
183185
}
184186

185187
/**

src/service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ export class Service {
255255
}, this.embeds);
256256

257257
if(embed) {
258-
embed.handleEvent(event);
258+
utils.raiseCustomEvent(embed.element, event.name, event.value);
259259
}
260260
}
261261

test/test.spec.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3395,7 +3395,7 @@ describe('SDK-to-WPMP', function () {
33953395
spyWpmp.onMessageReceived(testData.pageChangedEvent);
33963396

33973397
// Assert
3398-
expect(testData.handler).toHaveBeenCalledWith(testData.pageChangedEvent.data.body);
3398+
expect(testData.handler).toHaveBeenCalledWith(jasmine.objectContaining({ detail: testData.pageChangedEvent.data.body }));
33993399
});
34003400

34013401
it(`off('eventName', handler) will remove single handler which matches function reference for that event`, function () {
@@ -3458,9 +3458,9 @@ describe('SDK-to-WPMP', function () {
34583458
spyWpmp.onMessageReceived(testData.simulatedEvent);
34593459

34603460
// Assert
3461-
expect(testData.handler).toHaveBeenCalledWith(testData.simulatedEvent.data.body);
3462-
expect(testData.handler2).toHaveBeenCalledWith(testData.simulatedEvent.data.body);
3463-
expect(testData.handler3).toHaveBeenCalledWith(testData.simulatedEvent.data.body);
3461+
expect(testData.handler).toHaveBeenCalledWith(jasmine.objectContaining({ detail: testData.simulatedEvent.data.body }));
3462+
expect(testData.handler2).toHaveBeenCalledWith(jasmine.objectContaining({ detail: testData.simulatedEvent.data.body }));
3463+
expect(testData.handler3).toHaveBeenCalledWith(jasmine.objectContaining({ detail: testData.simulatedEvent.data.body }));
34643464
});
34653465

34663466

0 commit comments

Comments
 (0)