packages/storybook8/stories/Concepts/BreakoutRooms/snippets/BreakoutRoomsUpdatedEvent.snippet.tsx (74 lines of code) (raw):

import { AzureCommunicationTokenCredential, CommunicationUserIdentifier } from '@azure/communication-common'; import { CallAdapter, CallComposite, CallCompositeOptions, CompositeLocale, useAzureCommunicationCallAdapter } from '@azure/communication-react'; import { PartialTheme, Theme } from '@fluentui/react'; import React, { useCallback, useMemo } 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' meetingLink: string; }; export const ContosoCallContainer = (props: ContainerProps): JSX.Element => { 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, locator: props.meetingLink }), [props.userId, credential, props.meetingLink] ); const afterCallAdapterCreate = useCallback(async (adapter: CallAdapter): Promise<CallAdapter> => { adapter.on('breakoutRoomsUpdated', (event) => { if (event.type === 'assignedBreakoutRooms') { console.log('Assigned breakout rooms event: ', event); } else if (event.type === 'join') { console.log('Breakout rooms join event: ', event); } else if (event.type === 'breakoutRoomsSettings') { console.log('Breakout rooms settings event: ', event); } }); return adapter; }, []); const leaveCall = async (adapter: CallAdapter): Promise<void> => { await adapter.leaveCall().catch((e) => { console.error('Failed to leave call', e); }); }; const adapter = useAzureCommunicationCallAdapter(callAdapterArgs, afterCallAdapterCreate, leaveCall); if (!props.meetingLink) { return <>Teams meeting link 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...</>; };