import React, { useEffect } from 'react'; import { match } from 'ts-pattern'; import { HMSNotificationTypes, HMSTranscriptionState, useHMSNotifications } from '@100mslive/react-sdk'; import { AlertTriangleIcon, ClosedCaptionIcon, OpenCaptionIcon } from '@100mslive/react-icons'; // @ts-ignore: No implicit Any import { ToastManager } from '../Toast/ToastManager'; // @ts-ignore: No implicit Any import { useSetAppDataByKey } from '../AppData/useUISettings'; import { CAPTION_TOAST } from '../../common/constants'; export const TranscriptionNotifications = () => { const notification = useHMSNotifications(HMSNotificationTypes.TRANSCRIPTION_STATE_UPDATED); const [toastId, setToastId] = useSetAppDataByKey(CAPTION_TOAST.captionToast); useEffect(() => { if (!notification?.data) { return; } console.debug(`[${notification.type}]`, notification); const transcriptionStates = notification.data; if (transcriptionStates.length > 0) { let id = ''; match({ state: transcriptionStates[0].state, error: transcriptionStates[0].error }) .when( ({ error }) => !!error, () => { id = ToastManager.replaceToast(toastId, { title: `Failed to enable Closed Caption`, variant: 'error', icon: , }); }, ) .with({ state: HMSTranscriptionState.STARTED }, () => { id = ToastManager.replaceToast(toastId, { title: `Closed Captioning enabled for everyone`, variant: 'standard', duration: 2000, icon: , }); }) .with({ state: HMSTranscriptionState.STOPPED }, () => { id = ToastManager.replaceToast(toastId, { title: `Closed Captioning disabled for everyone`, variant: 'standard', duration: 2000, icon: , }); }) .otherwise(() => null); setToastId(id); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [notification, setToastId]); return null; };