packages/storybook8/stories/StatefulClient/Call/snippets/CallAppStatefulComplete.snippet.tsx (68 lines of code) (raw):
import { Call, CallAgent } from '@azure/communication-calling';
import { AzureCommunicationTokenCredential } from '@azure/communication-common';
import {
FluentThemeProvider,
DEFAULT_COMPONENT_ICONS,
CallClientProvider,
CallAgentProvider,
CallProvider,
createStatefulCallClient,
StatefulCallClient
} from '@azure/communication-react';
import { initializeIcons, registerIcons } from '@fluentui/react';
import React, { useEffect, useMemo, useState } from 'react';
import CallingComponents from './CallComponentsStateful';
initializeIcons();
registerIcons({ icons: DEFAULT_COMPONENT_ICONS });
function App(): JSX.Element {
const userAccessToken = '<Azure Communication Services Resource Access Token>';
const userId = '<User Id associated to the token>';
const tokenCredential = useMemo(() => {
return new AzureCommunicationTokenCredential(userAccessToken);
}, [userAccessToken]);
const groupId = '<Generated GUID groupd id>';
const displayName = '<Display Name>';
const [statefulCallClient, setStatefulCallClient] = useState<StatefulCallClient>();
const [callAgent, setCallAgent] = useState<CallAgent>();
const [call, setCall] = useState<Call>();
useEffect(() => {
setStatefulCallClient(
createStatefulCallClient({
userId: { communicationUserId: userId }
})
);
}, [userId]);
useEffect(() => {
if (callAgent === undefined && statefulCallClient) {
const createCallAgent = async (): Promise<void> => {
setCallAgent(await statefulCallClient.createCallAgent(tokenCredential, { displayName: displayName }));
};
createCallAgent();
}
}, [callAgent, statefulCallClient, tokenCredential, displayName]);
useEffect(() => {
if (callAgent !== undefined) {
setCall(callAgent.join({ groupId }));
}
}, [callAgent]);
return (
<>
<FluentThemeProvider>
{statefulCallClient && (
<CallClientProvider callClient={statefulCallClient}>
{callAgent && (
<CallAgentProvider callAgent={callAgent}>
{call && (
<CallProvider call={call}>
<CallingComponents />
</CallProvider>
)}
</CallAgentProvider>
)}
</CallClientProvider>
)}
</FluentThemeProvider>
</>
);
}
export default App;