|
1 | | -import { ContextHandler, DisplayMetadata, Listener, Channel } from '@finos/fdc3-standard'; |
| 1 | +import { ContextHandler, DisplayMetadata, Listener, Channel, EventHandler } from '@finos/fdc3-standard'; |
2 | 2 | import { Context } from '@finos/fdc3-context'; |
3 | 3 | import { Messaging } from '../Messaging'; |
4 | 4 | import { DefaultContextListener } from '../listeners/DefaultContextListener'; |
5 | 5 | import { |
6 | 6 | BroadcastRequest, |
7 | 7 | BroadcastResponse, |
| 8 | + ClearContextRequest, |
| 9 | + ClearContextResponse, |
8 | 10 | GetCurrentContextRequest, |
9 | 11 | GetCurrentContextResponse, |
10 | 12 | } from '@finos/fdc3-schema/generated/api/BrowserTypes'; |
| 13 | +import { RegisterableListener } from '../listeners/RegisterableListener'; |
| 14 | +import { EventListener } from '../listeners/EventListener'; |
11 | 15 |
|
12 | 16 | export class DefaultChannel implements Channel { |
13 | 17 | protected readonly messaging: Messaging; |
@@ -98,4 +102,30 @@ export class DefaultChannel implements Channel { |
98 | 102 | await listener.register(); |
99 | 103 | return listener; |
100 | 104 | } |
| 105 | + |
| 106 | + async clearContext(contextType?: string): Promise<void> { |
| 107 | + // first, ensure channel state is up-to-date |
| 108 | + const request: ClearContextRequest = { |
| 109 | + meta: this.messaging.createMeta(), |
| 110 | + payload: { |
| 111 | + channelId: this.id, |
| 112 | + contextType: contextType ?? null, |
| 113 | + }, |
| 114 | + type: 'clearContextRequest', |
| 115 | + }; |
| 116 | + await this.messaging.exchange<ClearContextResponse>(request, 'clearContextResponse', this.messageExchangeTimeout); |
| 117 | + } |
| 118 | + |
| 119 | + async addEventListener(type: string | null, handler: EventHandler): Promise<Listener> { |
| 120 | + let listener: RegisterableListener; |
| 121 | + switch (type) { |
| 122 | + case 'contextCleared': |
| 123 | + listener = new EventListener(this.messaging, 'contextCleared', handler); |
| 124 | + break; |
| 125 | + default: |
| 126 | + throw new Error('Unsupported event type: ' + type); |
| 127 | + } |
| 128 | + await listener.register(); |
| 129 | + return listener; |
| 130 | + } |
101 | 131 | } |
0 commit comments