diff --git a/CHANGELOG.md b/CHANGELOG.md index a1a981f..e1425e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 1.4.0 (2024-08-21) +- Added a `actionClick` callback for Box Add-ins to allow developers to take action when actions are clicked. +- Added `AddinBoxConfig` interface for defining configuration options for `Box add-ins`. + # 1.3.0 (2024-06-18) - Added `AddinClientConfig` interface to allow additional host origins to be supplied by an `AddinClient`. diff --git a/package.json b/package.json index bc86cc2..4c6af7e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@blackbaud/sky-addin-client", - "version": "1.3.0", + "version": "1.4.0", "description": "SKY add-in client", "main": "dist/bundles/sky-addin-client.umd.js", "module": "index.ts", diff --git a/src/addin/addin-client.spec.ts b/src/addin/addin-client.spec.ts index b1c0f68..90b0b99 100644 --- a/src/addin/addin-client.spec.ts +++ b/src/addin/addin-client.spec.ts @@ -343,6 +343,57 @@ describe('AddinClient ', () => { }); + describe('action-click', () => { + + it('should call the "actionClick" callback.', + () => { + let actionClickCalled = false; + + const client = new AddinClient({ + callbacks: { + init: () => { return; }, + actionClick: () => { actionClickCalled = true; } + } + }); + + initializeHost(); + + const msg: AddinHostMessageEventData = { + message: {}, + messageType: 'action-click', + source: 'bb-addin-host' + }; + + postMessageFromHost(msg); + client.destroy(); + + expect(actionClickCalled).toBe(true); + }); + + it('should tolerate the "actionClick" callback being undefined.', + () => { + const client = new AddinClient({ + callbacks: { + init: () => { return; } + } + }); + + initializeHost(); + + const msg: AddinHostMessageEventData = { + message: {}, + messageType: 'action-click', + source: 'bb-addin-host' + }; + + postMessageFromHost(msg); + client.destroy(); + + // No assertion. Just don't fail. + }); + + }); + describe('help-click', () => { it('should call the "helpClick" callback.', diff --git a/src/addin/addin-client.ts b/src/addin/addin-client.ts index 2636a12..1c94fee 100644 --- a/src/addin/addin-client.ts +++ b/src/addin/addin-client.ts @@ -594,6 +594,11 @@ export class AddinClient { } else if (this.isFromValidOrigin(event)) { /* tslint:disable-next-line switch-default */ switch (data.messageType) { + case 'action-click': + if (this.args.callbacks.actionClick) { + this.args.callbacks.actionClick(data.message.reason); + } + break; case 'auth-token': case 'auth-token-fail': this.handleAuthTokenMessage(data); diff --git a/src/addin/client-interfaces/addin-box-config.ts b/src/addin/client-interfaces/addin-box-config.ts new file mode 100644 index 0000000..d7fa9cb --- /dev/null +++ b/src/addin/client-interfaces/addin-box-config.ts @@ -0,0 +1,16 @@ +import { AddinBoxControl } from './addin-box-control'; + +/** + * Interface for defining configuration options for Box add-ins + */ +export interface AddinBoxConfig { + /** + * The controls to use for the box context menu + */ + controls: AddinBoxControl[] | undefined; + + /** + * The help key to open when the Help icon is clicked + */ + helpKey?: string | undefined; +} diff --git a/src/addin/client-interfaces/addin-box-control.ts b/src/addin/client-interfaces/addin-box-control.ts new file mode 100644 index 0000000..91ffec3 --- /dev/null +++ b/src/addin/client-interfaces/addin-box-control.ts @@ -0,0 +1,14 @@ +/** + * Interface for defining a control for Box add-ins + */ +export interface AddinBoxControl { + /** + * The display name of the control + */ + name: string; + + /** + * The action of the control + */ + action: string; +} diff --git a/src/addin/client-interfaces/addin-client-callbacks.ts b/src/addin/client-interfaces/addin-client-callbacks.ts index 323b0ee..3012866 100644 --- a/src/addin/client-interfaces/addin-client-callbacks.ts +++ b/src/addin/client-interfaces/addin-client-callbacks.ts @@ -11,6 +11,11 @@ export interface AddinClientCallbacks { */ init: (args: AddinClientInitArgs) => void; + /** + * Callback raised for box add-ins indicating that a control action was clicked. + */ + actionClick?: (action: string) => void; + /** * Callback raised for button add-ins indicating that the button was clicked. */ diff --git a/src/addin/client-interfaces/addin-client-ready-args.ts b/src/addin/client-interfaces/addin-client-ready-args.ts index b11b65b..3962f05 100644 --- a/src/addin/client-interfaces/addin-client-ready-args.ts +++ b/src/addin/client-interfaces/addin-client-ready-args.ts @@ -1,4 +1,5 @@ import { AddinActionButtonConfig } from './addin-action-button-config'; +import { AddinBoxConfig } from './addin-box-config'; import { AddinButtonConfig } from './addin-button-config'; import { AddinModalConfig } from './addin-modal-config'; import { AddinTabConfig } from './addin-tab-config'; @@ -44,4 +45,9 @@ export interface AddinClientReadyArgs { * Provides additional configuration for Tab add-ins */ tabConfig?: AddinTabConfig; + + /** + * Provides additional configuration for Box add-ins + */ + boxConfig?: AddinBoxConfig; } diff --git a/src/addin/client-interfaces/index.ts b/src/addin/client-interfaces/index.ts index 434fd54..d9efb17 100644 --- a/src/addin/client-interfaces/index.ts +++ b/src/addin/client-interfaces/index.ts @@ -1,3 +1,5 @@ +export * from './addin-box-config'; +export * from './addin-box-control'; export * from './addin-button-config'; export * from './addin-button-style'; export * from './addin-client-args';