packages/storybook8/stories/Concepts/Transfer/snippets/Transfer.snippet.tsx (79 lines of code) (raw):
import {
AzureCommunicationTokenCredential,
CommunicationUserIdentifier,
MicrosoftTeamsAppIdentifier
} from '@azure/communication-common';
import {
CallAdapter,
CallComposite,
CallCompositeOptions,
CompositeLocale,
fromFlatCommunicationIdentifier,
useAzureCommunicationCallAdapter
} from '@azure/communication-react';
import { PartialTheme, Theme } from '@fluentui/react';
import React, { useCallback, useMemo, useState } from 'react';
export type ContainerProps = {
userId: CommunicationUserIdentifier;
token: string;
formFactor?: 'desktop' | 'mobile';
fluentTheme?: PartialTheme | Theme;
locale?: CompositeLocale;
options?: CallCompositeOptions;
// Teams user ids need to be in format '28:orgid:<UUID>'. For example, '28:orgid:87d349ed-44d7-43e1-9a83-5f2406dee5bd'
microsoftTeamsAppId: string;
};
export const ContosoCallContainer = (props: ContainerProps): JSX.Element => {
const [transferredCallIds, setTransferredCallIds] = useState<string[]>([]);
const credential = useMemo(() => {
try {
return new AzureCommunicationTokenCredential(props.token);
} catch {
console.error('Failed to construct token credential');
return undefined;
}
}, [props.token]);
const callAdapterArgs = useMemo(
() => ({
userId: props.userId,
credential,
targetCallees: [fromFlatCommunicationIdentifier(props.microsoftTeamsAppId)] as MicrosoftTeamsAppIdentifier[]
}),
[props.userId, credential, props.microsoftTeamsAppId]
);
const afterCallAdapterCreate = useCallback(
async (adapter: CallAdapter): Promise<CallAdapter> => {
adapter.on('transferAccepted', (transferArgs) => {
const oldIds = transferredCallIds;
setTransferredCallIds(oldIds.concat([transferArgs.targetCall.id]));
});
return adapter;
},
[transferredCallIds]
);
const leaveCall = async (adapter: CallAdapter): Promise<void> => {
await adapter.leaveCall().catch((e) => {
console.error('Failed to leave call', e);
});
/**
* Following the end of the call
*/
console.log('these are the calls you were transferred to: ', transferredCallIds);
};
const adapter = useAzureCommunicationCallAdapter(callAdapterArgs, afterCallAdapterCreate, leaveCall);
if (!props.microsoftTeamsAppId) {
return <>Microsoft Teams App id is not provided.</>;
}
if (adapter) {
return (
<div style={{ height: '90vh', width: '90vw' }}>
<CallComposite
adapter={adapter}
formFactor={props.formFactor}
fluentTheme={props.fluentTheme}
locale={props?.locale}
options={props?.options}
/>
</div>
);
}
if (credential === undefined) {
return <>Failed to construct credential. Provided token is malformed.</>;
}
return <>Initializing...</>;
};