-
Notifications
You must be signed in to change notification settings - Fork 13.4k
Expand file tree
/
Copy pathuseMessageBlockContextValue.ts
More file actions
82 lines (72 loc) · 2.26 KB
/
useMessageBlockContextValue.ts
File metadata and controls
82 lines (72 loc) · 2.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import type { IRoom, IMessage } from '@rocket.chat/core-typings';
import { useEffectEvent } from '@rocket.chat/fuselage-hooks';
import type { UiKitContext } from '@rocket.chat/fuselage-ui-kit';
import { useRoomToolbox } from '@rocket.chat/ui-contexts';
import {
useVideoConfDispatchOutgoing,
useVideoConfIsCalling,
useVideoConfIsRinging,
useVideoConfJoinCall,
useVideoConfLoadCapabilities,
useVideoConfSetPreferences,
} from '@rocket.chat/ui-video-conf';
import type { ContextType } from 'react';
import { useUiKitActionManager } from './useUiKitActionManager';
import { useVideoConfWarning } from '../../views/room/contextualBar/VideoConference/hooks/useVideoConfWarning';
export const useMessageBlockContextValue = (rid: IRoom['_id'], mid: IMessage['_id']): ContextType<typeof UiKitContext> => {
const joinCall = useVideoConfJoinCall();
const setPreferences = useVideoConfSetPreferences();
const isCalling = useVideoConfIsCalling();
const isRinging = useVideoConfIsRinging();
const dispatchWarning = useVideoConfWarning();
const dispatchPopup = useVideoConfDispatchOutgoing();
const loadVideoConfCapabilities = useVideoConfLoadCapabilities();
const handleOpenVideoConf = useEffectEvent(async (rid: IRoom['_id']) => {
if (isCalling || isRinging) {
return;
}
try {
await loadVideoConfCapabilities();
dispatchPopup({ rid });
} catch (error: any) {
dispatchWarning(error.error);
}
});
const actionManager = useUiKitActionManager();
const { openTab } = useRoomToolbox();
return {
action: ({ appId, actionId, blockId, value }, event) => {
if (appId === 'videoconf-core') {
event.preventDefault();
setPreferences({ mic: true, cam: false });
if (actionId === 'join') {
return joinCall(blockId);
}
if (actionId === 'callBack') {
return handleOpenVideoConf(blockId);
}
}
if (appId === 'media-call-core') {
if (actionId === 'open-history') {
return openTab('media-call-history', blockId);
}
}
actionManager.emitInteraction(appId, {
type: 'blockAction',
actionId,
payload: {
blockId,
value,
},
container: {
type: 'message',
id: mid,
},
rid,
mid,
});
},
rid,
values: {}, // TODO: this is a hack to make the context work, but it should be removed
};
};