diff --git a/packages/fuselage-ui-kit/src/blocks/VideoConferenceBlock/VideoConferenceBlock.tsx b/packages/fuselage-ui-kit/src/blocks/VideoConferenceBlock/VideoConferenceBlock.tsx index cd77f0fd3191a..7feab1fe80415 100644 --- a/packages/fuselage-ui-kit/src/blocks/VideoConferenceBlock/VideoConferenceBlock.tsx +++ b/packages/fuselage-ui-kit/src/blocks/VideoConferenceBlock/VideoConferenceBlock.tsx @@ -1,4 +1,5 @@ import { getUserDisplayName, VideoConferenceStatus } from '@rocket.chat/core-typings'; +import { Box, States, StatesAction, StatesActions, StatesIcon, StatesSubtitle, StatesTitle } from '@rocket.chat/fuselage'; import { useGoToRoom, useSetting, useTranslation, useUserId, useUserPreference } from '@rocket.chat/ui-contexts'; import type * as UiKit from '@rocket.chat/ui-kit'; import { @@ -27,6 +28,8 @@ type VideoConferenceBlockProps = BlockProps; const MAX_USERS = 3; +const getErrorMessage = (error: unknown): string | undefined => (error instanceof Error ? error.message : undefined); + const VideoConferenceBlock = ({ block }: VideoConferenceBlockProps): ReactElement => { const t = useTranslation(); const { callId, appId = 'videoconf-core' } = block; @@ -109,11 +112,33 @@ const VideoConferenceBlock = ({ block }: VideoConferenceBlockProps): ReactElemen : t('joined'); }, [displayAvatars, t, result.data?.users.length]); - if (result.isPending || result.isError) { - // TODO: error handling + if (result.isPending) { return ; } + if (result.isError) { + const errorMessage = getErrorMessage(result.error); + + return ( + + + + + + + {t('Something_went_wrong')} + {errorMessage ?? t('Unable_to_retrieve_data')} + + result.refetch()}>{t('Retry')} + + + + + + + ); + } + const { data } = result; const isUserCaller = data.createdBy._id === userId; diff --git a/packages/fuselage-ui-kit/src/blocks/VideoConferenceBlock/hooks/useVideoConfData.ts b/packages/fuselage-ui-kit/src/blocks/VideoConferenceBlock/hooks/useVideoConfData.ts index 94072f93c0549..624809238f4af 100644 --- a/packages/fuselage-ui-kit/src/blocks/VideoConferenceBlock/hooks/useVideoConfData.ts +++ b/packages/fuselage-ui-kit/src/blocks/VideoConferenceBlock/hooks/useVideoConfData.ts @@ -1,10 +1,13 @@ +import type { VideoConference, VideoConferenceCapabilities } from '@rocket.chat/core-typings'; import { useEndpoint } from '@rocket.chat/ui-contexts'; import { useQuery } from '@tanstack/react-query'; +type VideoConfInfo = VideoConference & { capabilities: VideoConferenceCapabilities }; + export const useVideoConfData = ({ callId }: { callId: string }) => { const getVideoConfInfo = useEndpoint('GET', '/v1/video-conference.info'); - return useQuery({ + return useQuery({ queryKey: ['video-conference', callId], queryFn: () => getVideoConfInfo({ callId }), staleTime: Infinity,