packages/storybook8/stories/StatefulClient/Call/snippets/CallAppStatefulProviders.snippet.tsx (67 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'; 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}> <h1>Hooray! You set up providers 🎉🎉🎉</h1> </CallProvider> )} </CallAgentProvider> )} </CallClientProvider> )} </FluentThemeProvider> </> ); } export default App;