Skip to content

Commit

Permalink
Update packages/teams-js/src/public/pages.ts
Browse files Browse the repository at this point in the history
Co-authored-by: Trevor Harris <trharris@microsoft.com>
  • Loading branch information
2 people authored and Maggie G committed Feb 15, 2024
1 parent 58d26f2 commit 19bb24d
Show file tree
Hide file tree
Showing 6 changed files with 286 additions and 54 deletions.
73 changes: 63 additions & 10 deletions apps/teams-test-app/src/components/PagesResponseButtonAPIs.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { pages } from '@microsoft/teams-js';
import React, { ReactElement } from 'react';

import { noHostSdkMsg } from '../App';
import { ApiWithoutInput, ApiWithTextInput } from './utils';
import { ModuleWrapper } from './utils/ModuleWrapper';

Expand All @@ -15,10 +16,31 @@ const ShowResponseButton = (): React.ReactElement =>
}
},
submit: async (input) => {
const result = await pages.responseButton.showResponseButton(input);
return JSON.stringify(result);
await pages.responseButton.showResponseButton(input);
return 'Completed';
},
},
defaultInput: JSON.stringify({
responseId: 'reply',
actionInfo: {
actionId: 'actionId',
actionObjects: [
{
itemId: '1',
secondaryId: {
name: 'driveId',
value: 'secondaryDriveValue',
},
originalSource: {
messageId: 'mockMessageId',
conversationId: 'mockConversationId',
type: 'email',
},
type: 'm365content',
},
],
},
}),
});

const HideResponseButton = (): React.ReactElement =>
Expand All @@ -31,15 +53,45 @@ const HideResponseButton = (): React.ReactElement =>
},
});

const RegisterResponseButtonEventHandler = (): React.ReactElement =>
// const RegisterResponseButtonClickEventHandler = (): React.ReactElement =>
// ApiWithoutInput({
// name: 'registerResponseButtonClickEventHandler',
// title: 'Register Response Button Click Event Handler',
// onClick: async (setResult) => {
// pages.responseButton.registerResponseButtonClickEventHandler((): void => {
// setResult('responseButtonEventHandler successfully called');
// });
// return 'Completed';
// },
// });

const RegisterResponseButtonClickEventHandler = (): React.ReactElement =>
ApiWithoutInput({
name: 'registerResponseButtonEventHandler',
title: 'Register Response Button Event Handler',
name: 'registerResponseButtonClickEventHandler',
title: 'Register Response Button Click Event Handler',
onClick: async (setResult) => {
pages.responseButton.responseButtonEventHandler((): void => {
setResult('responseButtonEventHandler successfully called');
});
return 'Completed';
pages.responseButton.registerResponseButtonClickEventHandler(
(event: pages.responseButton.ResponseButtonEvent): void => {
setResult('responseButton click event received.');
event.notifySuccess();
},
);
return 'pages.response.responseButtonEventType()' + noHostSdkMsg;
},
});

const ResponseButtonClickEventHandlerFailure = (): React.ReactElement =>
ApiWithoutInput({
name: 'registerResponseButtonClickEventHandlerFailure',
title: 'Register Response Button Click Event Handler Failure',
onClick: async (setResult) => {
pages.responseButton.registerResponseButtonClickEventHandler(
(removeEvent: pages.responseButton.ResponseButtonEvent): void => {
setResult('responseButton click event failed.');
removeEvent.notifyFailure('theReason');
},
);
return 'pages.response.responseButtonEventType()' + noHostSdkMsg;
},
});

Expand All @@ -55,7 +107,8 @@ const PagesResponseButtonAPIs = (): ReactElement => (
<ModuleWrapper title="Response Button">
<ShowResponseButton />
<HideResponseButton />
<RegisterResponseButtonEventHandler />
<RegisterResponseButtonClickEventHandler />
<ResponseButtonClickEventHandlerFailure />
<CheckPagesResponseButtonCapability />
</ModuleWrapper>
);
Expand Down
5 changes: 4 additions & 1 deletion packages/teams-js/src/internal/telemetry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,10 @@ export enum ApiName {
Pages_ShareDeepLink = 'pages.shareDeepLink',
Pages_ResponseButton_ShowResponseButton = 'pages.responseButton.showResponseButton',
Pages_ResponseButton_HideResponseButton = 'pages.responseButton.hideResponseButton',
Pages_ResponseButton_ResponseButtonEventHandler = 'pages.responseButton.responseButtonEventHandler',
Pages_ResponseButton_RegisterResponseButton = 'pages.responseButton.registerResponseButton',
Pages_ResponseButton_RegisterResponseButtonClickEventHandler = 'pages.responseButton.registerResponseButtonClickEventHandler',
Pages_ResponseButton_RegisterResponsButtonClickEvent_Failure = 'pages.responseButton.registerResponseButtonClickEvent.failure',
Pages_ResponseButton_RegisterResponsButtonClickEvent_Success = 'pages.responseButton.registerResponseButtonClickEvent.success',
Pages_Tabs_GetMruTabInstances = 'pages.tabs.getMruTabInstances',
Pages_Tabs_GetTabInstances = 'pages.tabs.getTabInstances',
Pages_Tabs_NavigateToTab = 'pages.tabs.navigateToTab',
Expand Down
3 changes: 3 additions & 0 deletions packages/teams-js/src/public/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,16 @@ export {
DeepLinkParameters,
DialogInfo,
DialogSize,
EmailOriginalSource,
ErrorCode,
FileOpenPreference,
FrameContext,
FrameInfo,
LoadContext,
LocaleInfo,
M365ContentAction,
OriginalSource,
OriginalSourceType,
ResumeContext,
SdkError,
SecondaryId,
Expand Down
37 changes: 37 additions & 0 deletions packages/teams-js/src/public/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,11 @@ export interface M365ContentAction extends BaseActionObject<ActionObjectType.M36
itemId: string;
/** Represents an optional secondary identifier for an action in a Microsoft 365 content item. */
secondaryId?: SecondaryId;

/**
* Indicates the original source of the action object.
*/
originalSource?: OriginalSource<OriginalSourceType>;
}

/**
Expand Down Expand Up @@ -261,6 +266,38 @@ export enum SecondaryM365ContentIdName {
UserId = 'userId',
}

/**
* The original source of the action object from
*
* @param T The type of original source
*
* @beta
*/
export interface OriginalSource<T extends OriginalSourceType> {
/** Represents original source type. */
type: T;
}
/**
* The properties of where the action objects original from
*
* @beta
*/
export enum OriginalSourceType {
/** Represents that the original source is from an email. */
Email = 'email',
}
/**
* Stores information necessary to represent the related email and to group the attachments.
*
* @beta
*/
export interface EmailOriginalSource extends OriginalSource<OriginalSourceType.Email> {
/** The exact message where the action was invoked from */
messageId: string;
/** The conversation where the action was invoked from */
conversationId: string;
}

/**
* Information common to all actions
*
Expand Down

0 comments on commit 19bb24d

Please sign in to comment.