diff --git a/CHANGELOG.md b/CHANGELOG.md index bdd9e972d..6c7858a57 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,6 +42,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). * Setup package publishing for mono-repo packages. ([#1520](https://github.com/finos/FDC3/pull/1520)) * Implementation PR for FDC3 for the Web ([#896](https://github.com/finos/FDC3/pull/896)) * Adjusted reference Desktop Agent implementation for FDC3 for Web to open a new app instance when raiseIntent is called with an appId but no instanceId ([#1556](https://github.com/finos/FDC3/pull/1556)) +* Added `addIntentListenerWithContext` to `DesktopAgent` and implemented in `DesktopAgentProxy` ### Changed diff --git a/packages/fdc3-agent-proxy/src/DesktopAgentProxy.ts b/packages/fdc3-agent-proxy/src/DesktopAgentProxy.ts index fcf5fb49f..32c77e74f 100644 --- a/packages/fdc3-agent-proxy/src/DesktopAgentProxy.ts +++ b/packages/fdc3-agent-proxy/src/DesktopAgentProxy.ts @@ -66,6 +66,7 @@ export class DesktopAgentProxy implements DesktopAgent, Connectable { this.findIntentsByContext = this.findIntentsByContext.bind(this); this.raiseIntent = this.raiseIntent.bind(this); this.addIntentListener = this.addIntentListener.bind(this); + this.addIntentListenerWithContext = this.addIntentListenerWithContext.bind(this); this.raiseIntentForContext = this.raiseIntentForContext.bind(this); this.open = this.open.bind(this); this.findInstances = this.findInstances.bind(this); @@ -183,6 +184,10 @@ export class DesktopAgentProxy implements DesktopAgent, Connectable { return this.intents.addIntentListener(intent, handler); } + addIntentListenerWithContext(intent: string, contextType: string | string[], handler: IntentHandler) { + return this.intents.addIntentListenerWithContext(intent, contextType, handler); + } + raiseIntentForContext(context: Context, app?: string | AppIdentifier): Promise { return this.intents.raiseIntentForContext(context, this.ensureAppId(app)); } diff --git a/packages/fdc3-agent-proxy/src/intents/DefaultIntentSupport.ts b/packages/fdc3-agent-proxy/src/intents/DefaultIntentSupport.ts index 71111b8f4..d7f5b6cf3 100644 --- a/packages/fdc3-agent-proxy/src/intents/DefaultIntentSupport.ts +++ b/packages/fdc3-agent-proxy/src/intents/DefaultIntentSupport.ts @@ -217,7 +217,23 @@ export class DefaultIntentSupport implements IntentSupport { } async addIntentListener(intent: string, handler: IntentHandler): Promise { - const out = new DefaultIntentListener(this.messaging, intent, handler, this.messageExchangeTimeout); + const out = new DefaultIntentListener(this.messaging, intent, null, handler, this.messageExchangeTimeout); + await out.register(); + return out; + } + + async addIntentListenerWithContext( + intent: string, + contextType: string | string[], + handler: IntentHandler + ): Promise { + const out = new DefaultIntentListener( + this.messaging, + intent, + Array.isArray(contextType) ? contextType : [contextType], + handler, + this.messageExchangeTimeout + ); await out.register(); return out; } diff --git a/packages/fdc3-agent-proxy/src/intents/IntentSupport.ts b/packages/fdc3-agent-proxy/src/intents/IntentSupport.ts index 9069ca0d0..7b346645c 100644 --- a/packages/fdc3-agent-proxy/src/intents/IntentSupport.ts +++ b/packages/fdc3-agent-proxy/src/intents/IntentSupport.ts @@ -7,4 +7,9 @@ export interface IntentSupport { raiseIntent(intent: string, context: Context, app?: AppIdentifier): Promise; raiseIntentForContext(context: Context, app?: AppIdentifier): Promise; addIntentListener(intent: string, handler: IntentHandler): Promise; + addIntentListenerWithContext( + intent: string, + contextType: string | string[], + handler: IntentHandler + ): Promise; } diff --git a/packages/fdc3-agent-proxy/src/listeners/DefaultIntentListener.ts b/packages/fdc3-agent-proxy/src/listeners/DefaultIntentListener.ts index 0e71bc2ed..7e921123a 100644 --- a/packages/fdc3-agent-proxy/src/listeners/DefaultIntentListener.ts +++ b/packages/fdc3-agent-proxy/src/listeners/DefaultIntentListener.ts @@ -7,13 +7,16 @@ import { IntentEvent, IntentResultRequest, IntentResultResponse, - //RaiseIntentResponse, } from '@finos/fdc3-schema/dist/generated/api/BrowserTypes'; export class DefaultIntentListener extends AbstractListener { - readonly intent: string; - - constructor(messaging: Messaging, intent: string, action: IntentHandler, messageExchangeTimeout: number) { + constructor( + messaging: Messaging, + private readonly intent: string, + private readonly contexts: string[] | null, + action: IntentHandler, + messageExchangeTimeout: number + ) { super( messaging, messageExchangeTimeout, @@ -24,11 +27,14 @@ export class DefaultIntentListener extends AbstractListener