@100mslive/roomkit-react 0.1.12 → 0.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{HLSView-PWVM4OIP.js → HLSView-IENE4HRP.js} +2 -2
- package/dist/Prebuilt/App.d.ts +0 -2
- package/dist/Prebuilt/AppContext.d.ts +0 -2
- package/dist/Prebuilt/common/constants.d.ts +110 -0
- package/dist/Prebuilt/components/AppData/AppData.d.ts +2 -0
- package/dist/Prebuilt/components/Chat/MwebChatOption.d.ts +7 -0
- package/dist/Prebuilt/components/Chat/Navigation.d.ts +8 -0
- package/dist/Prebuilt/components/Chat/PinnedMessage.d.ts +4 -0
- package/dist/Prebuilt/components/Footer/Footer.d.ts +3 -2
- package/dist/Prebuilt/components/Notifications/ChatNotifications.d.ts +2 -0
- package/dist/Prebuilt/components/Preview/PreviewJoin.d.ts +2 -1
- package/dist/Prebuilt/components/VirtualBackground/VBCollection.d.ts +2 -1
- package/dist/Prebuilt/components/VirtualBackground/VBPicker.d.ts +3 -0
- package/dist/Prebuilt/components/VirtualBackground/constants.d.ts +0 -6
- package/dist/Prebuilt/components/hooks/useChatBlacklist.d.ts +4 -0
- package/dist/Prebuilt/components/hooks/useSetPinnedMessages.d.ts +16 -0
- package/dist/Prebuilt/provider/roomLayoutProvider/hooks/useRoomLayoutScreen.d.ts +3 -2
- package/dist/{chunk-WREKGNP6.js → chunk-U4AB6X6M.js} +2178 -1148
- package/dist/chunk-U4AB6X6M.js.map +7 -0
- package/dist/index.cjs.js +2746 -1638
- package/dist/index.cjs.js.map +4 -4
- package/dist/index.js +1 -1
- package/dist/meta.cjs.json +803 -208
- package/dist/meta.esbuild.json +812 -217
- package/package.json +8 -7
- package/src/Prebuilt/App.tsx +3 -14
- package/src/Prebuilt/AppContext.tsx +0 -2
- package/src/Prebuilt/common/{constants.js → constants.ts} +22 -20
- package/src/Prebuilt/components/AppData/{AppData.jsx → AppData.tsx} +8 -22
- package/src/Prebuilt/components/AppData/useUISettings.js +0 -4
- package/src/Prebuilt/components/AuthToken.jsx +15 -5
- package/src/Prebuilt/components/Chat/Chat.jsx +49 -73
- package/src/Prebuilt/components/Chat/ChatBody.jsx +241 -51
- package/src/Prebuilt/components/Chat/ChatFooter.tsx +56 -6
- package/src/Prebuilt/components/Chat/ChatStates.jsx +68 -0
- package/src/Prebuilt/components/Chat/MwebChatOption.tsx +24 -0
- package/src/Prebuilt/components/Chat/Navigation.tsx +60 -0
- package/src/Prebuilt/components/Chat/PinnedMessage.tsx +116 -0
- package/src/Prebuilt/components/Footer/Footer.tsx +4 -7
- package/src/Prebuilt/components/Header/common.jsx +1 -1
- package/src/Prebuilt/components/Notifications/ChatNotifications.tsx +34 -0
- package/src/Prebuilt/components/Notifications/Notifications.tsx +2 -0
- package/src/Prebuilt/components/Polls/Voting/QuestionCard.jsx +6 -4
- package/src/Prebuilt/components/Polls/Voting/TimedVoting.jsx +3 -2
- package/src/Prebuilt/components/Polls/common/VoteCount.jsx +6 -4
- package/src/Prebuilt/components/Preview/PreviewJoin.tsx +7 -9
- package/src/Prebuilt/components/RoleChangeRequest/RoleChangeRequestModal.tsx +4 -1
- package/src/Prebuilt/components/Settings/DeviceSettings.jsx +1 -1
- package/src/Prebuilt/components/SidePaneTabs.tsx +3 -2
- package/src/Prebuilt/components/Toast/ToastConfig.jsx +1 -0
- package/src/Prebuilt/components/VirtualBackground/VBCollection.tsx +4 -4
- package/src/Prebuilt/components/VirtualBackground/{VBPicker.jsx → VBPicker.tsx} +64 -44
- package/src/Prebuilt/components/VirtualBackground/constants.ts +0 -8
- package/src/Prebuilt/components/hooks/useAutoStartStreaming.tsx +10 -1
- package/src/Prebuilt/components/hooks/useChatBlacklist.ts +21 -0
- package/src/Prebuilt/components/hooks/useSetPinnedMessages.ts +75 -0
- package/src/Prebuilt/components/hooks/useUserPreferences.jsx +1 -0
- package/src/Prebuilt/layouts/SidePane.tsx +1 -1
- package/src/Prebuilt/layouts/VideoStreamingSection.tsx +16 -8
- package/src/Prebuilt/plugins/whiteboard/PusherCommunicationProvider.js +1 -1
- package/src/Prebuilt/plugins/whiteboard/README.md +1 -1
- package/src/Prebuilt/primitives/DialogContent.jsx +1 -1
- package/src/Prebuilt/provider/roomLayoutProvider/constants/index.ts +12 -1
- package/src/Prebuilt/provider/roomLayoutProvider/hooks/useRoomLayoutScreen.ts +5 -1
- package/dist/chunk-WREKGNP6.js.map +0 -7
- package/src/Prebuilt/components/hooks/useSetPinnedMessage.js +0 -38
- package/src/Prebuilt/services/tokenService.js +0 -49
- /package/dist/{HLSView-PWVM4OIP.js.map → HLSView-IENE4HRP.js.map} +0 -0
package/package.json
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
"prebuilt",
|
11
11
|
"roomkit"
|
12
12
|
],
|
13
|
-
"version": "0.1.
|
13
|
+
"version": "0.1.13",
|
14
14
|
"author": "100ms",
|
15
15
|
"license": "MIT",
|
16
16
|
"files": [
|
@@ -76,11 +76,11 @@
|
|
76
76
|
"react": ">=17.0.2 <19.0.0"
|
77
77
|
},
|
78
78
|
"dependencies": {
|
79
|
-
"@100mslive/hls-player": "0.1.
|
80
|
-
"@100mslive/hms-virtual-background": "1.11.
|
81
|
-
"@100mslive/react-icons": "0.8.
|
82
|
-
"@100mslive/react-sdk": "0.8.
|
83
|
-
"@100mslive/types-prebuilt": "0.12.
|
79
|
+
"@100mslive/hls-player": "0.1.22",
|
80
|
+
"@100mslive/hms-virtual-background": "1.11.22",
|
81
|
+
"@100mslive/react-icons": "0.8.22",
|
82
|
+
"@100mslive/react-sdk": "0.8.22",
|
83
|
+
"@100mslive/types-prebuilt": "0.12.4",
|
84
84
|
"@emoji-mart/data": "^1.0.6",
|
85
85
|
"@emoji-mart/react": "^1.0.1",
|
86
86
|
"@radix-ui/react-accordion": "1.0.0",
|
@@ -106,6 +106,7 @@
|
|
106
106
|
"qrcode.react": "^3.1.0",
|
107
107
|
"react-draggable": "^4.4.5",
|
108
108
|
"react-intersection-observer": "^9.4.3",
|
109
|
+
"react-swipeable": "^7.0.1",
|
109
110
|
"react-use": "^17.4.0",
|
110
111
|
"react-virtualized-auto-sizer": "^1.0.7",
|
111
112
|
"react-window": "^1.8.7",
|
@@ -114,5 +115,5 @@
|
|
114
115
|
"uuid": "^8.3.2",
|
115
116
|
"worker-timers": "^7.0.40"
|
116
117
|
},
|
117
|
-
"gitHead": "
|
118
|
+
"gitHead": "543b9152024ee7e4554701f1387b1af32906b58a"
|
118
119
|
}
|
package/src/Prebuilt/App.tsx
CHANGED
@@ -9,7 +9,6 @@ import {
|
|
9
9
|
useHMSActions,
|
10
10
|
useHMSStore,
|
11
11
|
} from '@100mslive/react-sdk';
|
12
|
-
// @ts-ignore: No implicit Any
|
13
12
|
import { AppData } from './components/AppData/AppData';
|
14
13
|
// @ts-ignore: No implicit Any
|
15
14
|
import AuthToken from './components/AuthToken';
|
@@ -62,8 +61,6 @@ export type HMSPrebuiltProps = {
|
|
62
61
|
options?: HMSPrebuiltOptions;
|
63
62
|
screens?: Screens;
|
64
63
|
authToken?: string;
|
65
|
-
roomId?: string;
|
66
|
-
role?: string;
|
67
64
|
onLeave?: () => void;
|
68
65
|
onJoin?: () => void;
|
69
66
|
/**
|
@@ -85,8 +82,6 @@ export const HMSPrebuilt = React.forwardRef<HMSPrebuiltRefType, HMSPrebuiltProps
|
|
85
82
|
{
|
86
83
|
roomCode = '',
|
87
84
|
authToken = '',
|
88
|
-
roomId = '',
|
89
|
-
role = '',
|
90
85
|
containerSelector = DEFAULT_PORTAL_CONTAINER,
|
91
86
|
logo,
|
92
87
|
typography,
|
@@ -98,7 +93,6 @@ export const HMSPrebuilt = React.forwardRef<HMSPrebuiltRefType, HMSPrebuiltProps
|
|
98
93
|
},
|
99
94
|
ref,
|
100
95
|
) => {
|
101
|
-
const metadata = '';
|
102
96
|
const reactiveStore = useRef<HMSPrebuiltRefType>();
|
103
97
|
|
104
98
|
const [hydrated, setHydrated] = React.useState(false);
|
@@ -138,14 +132,12 @@ export const HMSPrebuilt = React.forwardRef<HMSPrebuiltRefType, HMSPrebuiltProps
|
|
138
132
|
| {
|
139
133
|
init: string;
|
140
134
|
tokenByRoomCode: string;
|
141
|
-
tokenByRoomIdRole: string;
|
142
135
|
roomLayout: string;
|
143
136
|
}
|
144
137
|
| undefined;
|
145
138
|
const tokenByRoomCodeEndpoint: string = endpointsObj?.tokenByRoomCode || '';
|
146
139
|
const initEndpoint: string = endpointsObj?.init || '';
|
147
140
|
const roomLayoutEndpoint: string = endpointsObj?.roomLayout || '';
|
148
|
-
const tokenByRoomIdRoleEndpoint: string = endpointsObj?.tokenByRoomIdRole || '';
|
149
141
|
|
150
142
|
const overrideLayout: Partial<Layout> = {
|
151
143
|
logo,
|
@@ -154,10 +146,10 @@ export const HMSPrebuilt = React.forwardRef<HMSPrebuiltRefType, HMSPrebuiltProps
|
|
154
146
|
screens,
|
155
147
|
};
|
156
148
|
|
157
|
-
if (!roomCode && !
|
149
|
+
if (!roomCode && !authToken) {
|
158
150
|
console.error(`
|
159
151
|
HMSPrebuilt can be initialised by providing:
|
160
|
-
either
|
152
|
+
either "roomCode" or "authToken".
|
161
153
|
Please check if you are providing the above values for initialising prebuilt.
|
162
154
|
`);
|
163
155
|
throw Error('Incorrect initializing params for HMSPrebuilt component');
|
@@ -174,8 +166,6 @@ export const HMSPrebuilt = React.forwardRef<HMSPrebuiltRefType, HMSPrebuiltProps
|
|
174
166
|
<HMSPrebuiltContext.Provider
|
175
167
|
value={{
|
176
168
|
roomCode,
|
177
|
-
roomId,
|
178
|
-
role,
|
179
169
|
containerSelector,
|
180
170
|
onLeave,
|
181
171
|
onJoin,
|
@@ -184,7 +174,6 @@ export const HMSPrebuilt = React.forwardRef<HMSPrebuiltRefType, HMSPrebuiltProps
|
|
184
174
|
endpoints: {
|
185
175
|
tokenByRoomCode: tokenByRoomCodeEndpoint,
|
186
176
|
init: initEndpoint,
|
187
|
-
tokenByRoomIdRole: tokenByRoomIdRoleEndpoint,
|
188
177
|
roomLayout: roomLayoutEndpoint,
|
189
178
|
},
|
190
179
|
}}
|
@@ -222,7 +211,7 @@ export const HMSPrebuilt = React.forwardRef<HMSPrebuiltRefType, HMSPrebuiltProps
|
|
222
211
|
},
|
223
212
|
}}
|
224
213
|
>
|
225
|
-
<AppData
|
214
|
+
<AppData />
|
226
215
|
<Init />
|
227
216
|
<DialogContainerProvider dialogContainerSelector={containerSelector}>
|
228
217
|
<Box
|
@@ -32,7 +32,6 @@ export const APP_DATA = {
|
|
32
32
|
waitingViewerRole: 'waitingViewerRole',
|
33
33
|
subscribedNotifications: 'subscribedNotifications',
|
34
34
|
logo: 'logo',
|
35
|
-
tokenEndpoint: 'tokenEndpoint',
|
36
35
|
appLayout: 'appLayout',
|
37
36
|
hlsStarted: 'hlsStarted',
|
38
37
|
rtmpStarted: 'rtmpStarted',
|
@@ -104,30 +103,33 @@ export const isIPadOS = false;
|
|
104
103
|
// navigator?.maxTouchPoints > 2 &&
|
105
104
|
// navigator?.userAgent?.match(/Mac/);
|
106
105
|
|
107
|
-
export
|
108
|
-
TRANSCRIPTION_STATE
|
109
|
-
|
110
|
-
SPOTLIGHT
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
106
|
+
export enum SESSION_STORE_KEY {
|
107
|
+
TRANSCRIPTION_STATE = 'transcriptionState',
|
108
|
+
PINNED_MESSAGES = 'pinnedMessages',
|
109
|
+
SPOTLIGHT = 'spotlight',
|
110
|
+
CHAT_PEER_BLACKLIST = 'chatPeerBlacklist',
|
111
|
+
CHAT_MESSAGE_BLACKLIST = 'chatMessageBlacklist',
|
112
|
+
CHAT_STATE = 'chatState',
|
113
|
+
}
|
114
|
+
|
115
|
+
export enum INTERACTION_TYPE {
|
116
|
+
POLL = 'Poll',
|
117
|
+
QUIZ = 'Quiz',
|
118
|
+
}
|
119
|
+
|
120
|
+
export enum QUESTION_TYPE_TITLE {
|
121
|
+
'single-choice' = 'Single Choice',
|
122
|
+
'multiple-choice' = 'Multiple Choice',
|
121
123
|
// "short-answer": "Short Answer",
|
122
124
|
// "long-answer": "Long Answer",
|
123
|
-
}
|
125
|
+
}
|
124
126
|
|
125
|
-
export
|
126
|
-
SINGLE_CHOICE
|
127
|
-
MULTIPLE_CHOICE
|
127
|
+
export enum QUESTION_TYPE {
|
128
|
+
SINGLE_CHOICE = 'single-choice',
|
129
|
+
MULTIPLE_CHOICE = 'multiple-choice',
|
128
130
|
// SHORT_ANSWER: "short-answer",
|
129
131
|
// LONG_ANSWER: "long-answer",
|
130
|
-
}
|
132
|
+
}
|
131
133
|
|
132
134
|
export const ROLE_CHANGE_DECLINED = 'role_change_declined';
|
133
135
|
|
@@ -12,9 +12,13 @@ import {
|
|
12
12
|
useHMSStore,
|
13
13
|
useRecordingStreaming,
|
14
14
|
} from '@100mslive/react-sdk';
|
15
|
+
//@ts-ignore
|
15
16
|
import { normalizeAppPolicyConfig } from '../init/initUtils';
|
17
|
+
//@ts-ignore
|
16
18
|
import { UserPreferencesKeys, useUserPreferences } from '../hooks/useUserPreferences';
|
19
|
+
// @ts-ignore
|
17
20
|
import { useIsSidepaneTypeOpen, useSidepaneToggle } from './useSidepane';
|
21
|
+
// @ts-ignore
|
18
22
|
import { useSetAppDataByKey } from './useUISettings';
|
19
23
|
import {
|
20
24
|
APP_DATA,
|
@@ -25,15 +29,6 @@ import {
|
|
25
29
|
UI_MODE_GRID,
|
26
30
|
UI_SETTINGS,
|
27
31
|
} from '../../common/constants';
|
28
|
-
import { VB_EFFECT } from '../VirtualBackground/constants';
|
29
|
-
|
30
|
-
export const getAppDetails = appDetails => {
|
31
|
-
try {
|
32
|
-
return !appDetails ? {} : JSON.parse(appDetails);
|
33
|
-
} catch (error) {
|
34
|
-
return {};
|
35
|
-
}
|
36
|
-
};
|
37
32
|
|
38
33
|
const initialAppData = {
|
39
34
|
[APP_DATA.uiSettings]: {
|
@@ -67,15 +62,15 @@ const initialAppData = {
|
|
67
62
|
[APP_DATA.minimiseInset]: false,
|
68
63
|
[APP_DATA.activeScreensharePeerId]: '',
|
69
64
|
[APP_DATA.disableNotifications]: false,
|
70
|
-
[APP_DATA.background]:
|
71
|
-
[APP_DATA.backgroundType]:
|
65
|
+
[APP_DATA.background]: 'none',
|
66
|
+
[APP_DATA.backgroundType]: 'none',
|
72
67
|
[APP_DATA.pollState]: {
|
73
68
|
[POLL_STATE.pollInView]: '',
|
74
69
|
[POLL_STATE.view]: '',
|
75
70
|
},
|
76
71
|
};
|
77
72
|
|
78
|
-
export const AppData = React.memo((
|
73
|
+
export const AppData = React.memo(() => {
|
79
74
|
const hmsActions = useHMSActions();
|
80
75
|
const [preferences = {}] = useUserPreferences(UserPreferencesKeys.UI_SETTINGS);
|
81
76
|
const roleNames = useHMSStore(selectAvailableRoleNames);
|
@@ -88,6 +83,7 @@ export const AppData = React.memo(({ appDetails, tokenEndpoint }) => {
|
|
88
83
|
...initialAppData,
|
89
84
|
...appData,
|
90
85
|
});
|
86
|
+
// @ts-ignore
|
91
87
|
hmsActions.setFrameworkInfo({
|
92
88
|
type: 'react-web',
|
93
89
|
isPrebuilt: true,
|
@@ -105,16 +101,6 @@ export const AppData = React.memo(({ appDetails, tokenEndpoint }) => {
|
|
105
101
|
hmsActions.setAppData(APP_DATA.uiSettings, updatedSettings, true);
|
106
102
|
}, [preferences, hmsActions]);
|
107
103
|
|
108
|
-
useEffect(() => {
|
109
|
-
const appData = {
|
110
|
-
[APP_DATA.tokenEndpoint]: tokenEndpoint,
|
111
|
-
[APP_DATA.appConfig]: getAppDetails(appDetails),
|
112
|
-
};
|
113
|
-
for (const key in appData) {
|
114
|
-
hmsActions.setAppData([key], appData[key]);
|
115
|
-
}
|
116
|
-
}, [appDetails, tokenEndpoint, hmsActions]);
|
117
|
-
|
118
104
|
useEffect(() => {
|
119
105
|
if (!preferences.subscribedNotifications) {
|
120
106
|
return;
|
@@ -59,10 +59,6 @@ export const useIsRTMPStartedFromUI = () => {
|
|
59
59
|
return useHMSStore(selectAppData(APP_DATA.rtmpStarted));
|
60
60
|
};
|
61
61
|
|
62
|
-
export const useTokenEndpoint = () => {
|
63
|
-
return useHMSStore(selectAppData(APP_DATA.tokenEndpoint));
|
64
|
-
};
|
65
|
-
|
66
62
|
export const useAuthToken = () => {
|
67
63
|
return useHMSStore(selectAppData(APP_DATA.authToken));
|
68
64
|
};
|
@@ -1,9 +1,12 @@
|
|
1
1
|
import React, { useEffect, useState } from 'react';
|
2
|
+
import { useSessionStorage } from 'react-use';
|
3
|
+
import { v4 } from 'uuid';
|
2
4
|
import { useHMSActions } from '@100mslive/react-sdk';
|
3
5
|
import { styled } from '../../Theme';
|
4
6
|
import { useHMSPrebuiltContext } from '../AppContext';
|
5
7
|
import { ErrorDialog } from '../primitives/DialogContent';
|
6
|
-
import { useSetAppDataByKey
|
8
|
+
import { useSetAppDataByKey } from './AppData/useUISettings';
|
9
|
+
import { UserPreferencesKeys } from './hooks/useUserPreferences';
|
7
10
|
import { APP_DATA } from '../common/constants';
|
8
11
|
|
9
12
|
/**
|
@@ -17,26 +20,33 @@ import { APP_DATA } from '../common/constants';
|
|
17
20
|
*/
|
18
21
|
const AuthToken = React.memo(({ authTokenByRoomCodeEndpoint, defaultAuthToken }) => {
|
19
22
|
const hmsActions = useHMSActions();
|
20
|
-
const tokenEndpoint = useTokenEndpoint();
|
21
23
|
const { roomCode, userId } = useHMSPrebuiltContext();
|
22
24
|
const [error, setError] = useState({ title: '', body: '' });
|
23
25
|
let authToken = defaultAuthToken;
|
24
26
|
const [, setAuthTokenInAppData] = useSetAppDataByKey(APP_DATA.authToken);
|
27
|
+
const [savedUserId, setSavedUserId] = useSessionStorage(UserPreferencesKeys.USER_ID);
|
28
|
+
|
29
|
+
useEffect(() => {
|
30
|
+
if (!savedUserId && !userId) {
|
31
|
+
setSavedUserId(v4());
|
32
|
+
}
|
33
|
+
}, [savedUserId, setSavedUserId, userId]);
|
25
34
|
|
26
35
|
useEffect(() => {
|
27
36
|
if (authToken) {
|
28
37
|
setAuthTokenInAppData(authToken);
|
29
38
|
return;
|
30
39
|
}
|
31
|
-
|
40
|
+
|
41
|
+
if (!roomCode) {
|
32
42
|
return;
|
33
43
|
}
|
34
44
|
|
35
45
|
hmsActions
|
36
|
-
.getAuthTokenByRoomCode({ roomCode, userId }, { endpoint: authTokenByRoomCodeEndpoint })
|
46
|
+
.getAuthTokenByRoomCode({ roomCode, userId: userId || savedUserId }, { endpoint: authTokenByRoomCodeEndpoint })
|
37
47
|
.then(token => setAuthTokenInAppData(token))
|
38
48
|
.catch(error => setError(convertError(error)));
|
39
|
-
}, [hmsActions,
|
49
|
+
}, [hmsActions, authToken, authTokenByRoomCodeEndpoint, setAuthTokenInAppData, roomCode, userId, savedUserId]);
|
40
50
|
|
41
51
|
if (error.title) {
|
42
52
|
return <ErrorDialog title={error.title}>{error.body}</ErrorDialog>;
|
@@ -1,76 +1,34 @@
|
|
1
1
|
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
2
2
|
import { useMedia } from 'react-use';
|
3
|
+
import { selectLocalPeer, selectSessionStore } from '@100mslive/hms-video-store';
|
3
4
|
import {
|
4
5
|
HMSNotificationTypes,
|
5
6
|
selectHMSMessagesCount,
|
6
7
|
selectPeerNameByID,
|
7
|
-
selectPermissions,
|
8
|
-
selectSessionStore,
|
9
8
|
useHMSActions,
|
10
9
|
useHMSNotifications,
|
11
10
|
useHMSStore,
|
12
11
|
} from '@100mslive/react-sdk';
|
13
|
-
import { ChevronDownIcon
|
12
|
+
import { ChevronDownIcon } from '@100mslive/react-icons';
|
14
13
|
import { Button } from '../../../Button';
|
15
|
-
import {
|
16
|
-
import { Text } from '../../../Text';
|
14
|
+
import { Flex } from '../../../Layout';
|
17
15
|
import { config as cssConfig } from '../../../Theme';
|
18
|
-
import {
|
16
|
+
import { ChatBody } from './ChatBody';
|
19
17
|
import { ChatFooter } from './ChatFooter';
|
18
|
+
import { ChatBlocked, ChatPaused } from './ChatStates';
|
19
|
+
import { PinnedMessage } from './PinnedMessage';
|
20
20
|
import { useRoomLayoutConferencingScreen } from '../../provider/roomLayoutProvider/hooks/useRoomLayoutScreen';
|
21
21
|
import { useSetSubscribedChatSelector } from '../AppData/useUISettings';
|
22
|
-
import {
|
22
|
+
import { useSetPinnedMessages } from '../hooks/useSetPinnedMessages';
|
23
23
|
import { useUnreadCount } from './useUnreadCount';
|
24
24
|
import { CHAT_SELECTOR, SESSION_STORE_KEY } from '../../common/constants';
|
25
25
|
|
26
|
-
const PINNED_MESSAGE_LENGTH = 80;
|
27
|
-
|
28
|
-
const PinnedMessage = ({ clearPinnedMessage }) => {
|
29
|
-
const permissions = useHMSStore(selectPermissions);
|
30
|
-
const pinnedMessage = useHMSStore(selectSessionStore(SESSION_STORE_KEY.PINNED_MESSAGE));
|
31
|
-
const formattedPinnedMessage =
|
32
|
-
pinnedMessage?.length && pinnedMessage.length > PINNED_MESSAGE_LENGTH
|
33
|
-
? `${pinnedMessage.slice(0, PINNED_MESSAGE_LENGTH)}...`
|
34
|
-
: pinnedMessage;
|
35
|
-
|
36
|
-
return pinnedMessage ? (
|
37
|
-
<Flex
|
38
|
-
title={pinnedMessage}
|
39
|
-
css={{ p: '$4', color: '$on_surface_medium', bg: '$surface_default', r: '$1', gap: '$4', mb: '$8', mt: '$8' }}
|
40
|
-
align="center"
|
41
|
-
justify="between"
|
42
|
-
>
|
43
|
-
<PinIcon />
|
44
|
-
|
45
|
-
<Box
|
46
|
-
css={{
|
47
|
-
color: '$on_surface_medium',
|
48
|
-
w: '100%',
|
49
|
-
maxHeight: '$18',
|
50
|
-
overflowY: 'auto',
|
51
|
-
}}
|
52
|
-
>
|
53
|
-
<Text variant="sm">
|
54
|
-
<AnnotisedMessage message={formattedPinnedMessage} />
|
55
|
-
</Text>
|
56
|
-
</Box>
|
57
|
-
{permissions.removeOthers && (
|
58
|
-
<Flex
|
59
|
-
onClick={() => clearPinnedMessage()}
|
60
|
-
css={{ cursor: 'pointer', color: '$on_surface_medium', '&:hover': { color: '$on_surface_high' } }}
|
61
|
-
>
|
62
|
-
<CrossIcon />
|
63
|
-
</Flex>
|
64
|
-
)}
|
65
|
-
</Flex>
|
66
|
-
) : null;
|
67
|
-
};
|
68
|
-
|
69
26
|
export const Chat = ({ screenType }) => {
|
70
27
|
const notification = useHMSNotifications(HMSNotificationTypes.PEER_LEFT);
|
71
28
|
const [peerSelector, setPeerSelector] = useSetSubscribedChatSelector(CHAT_SELECTOR.PEER_ID);
|
72
29
|
const [roleSelector, setRoleSelector] = useSetSubscribedChatSelector(CHAT_SELECTOR.ROLE);
|
73
30
|
const peerName = useHMSStore(selectPeerNameByID(peerSelector));
|
31
|
+
const localPeer = useHMSStore(selectLocalPeer);
|
74
32
|
const [chatOptions, setChatOptions] = useState({
|
75
33
|
role: roleSelector || '',
|
76
34
|
peerId: peerSelector && peerName ? peerSelector : '',
|
@@ -79,7 +37,8 @@ export const Chat = ({ screenType }) => {
|
|
79
37
|
const [isSelectorOpen] = useState(false);
|
80
38
|
const listRef = useRef(null);
|
81
39
|
const hmsActions = useHMSActions();
|
82
|
-
const {
|
40
|
+
const { removePinnedMessage } = useSetPinnedMessages();
|
41
|
+
const pinnedMessages = useHMSStore(selectSessionStore(SESSION_STORE_KEY.PINNED_MESSAGES)) || [];
|
83
42
|
|
84
43
|
useEffect(() => {
|
85
44
|
if (notification && notification.data && peerSelector === notification.data.id) {
|
@@ -91,9 +50,12 @@ export const Chat = ({ screenType }) => {
|
|
91
50
|
});
|
92
51
|
}
|
93
52
|
}, [notification, peerSelector, setPeerSelector]);
|
94
|
-
|
53
|
+
const blacklistedPeerIDs = useHMSStore(selectSessionStore(SESSION_STORE_KEY.CHAT_PEER_BLACKLIST)) || [];
|
54
|
+
const blacklistedPeerIDSet = new Set(blacklistedPeerIDs);
|
55
|
+
const isLocalPeerBlacklisted = blacklistedPeerIDSet.has(localPeer?.customerUserId);
|
95
56
|
const storeMessageSelector = selectHMSMessagesCount;
|
96
57
|
const { elements } = useRoomLayoutConferencingScreen();
|
58
|
+
const { enabled: isChatEnabled = true } = useHMSStore(selectSessionStore(SESSION_STORE_KEY.CHAT_STATE)) || {};
|
97
59
|
const isMobile = useMedia(cssConfig.media.md);
|
98
60
|
|
99
61
|
let isScrolledToBottom = false;
|
@@ -125,7 +87,9 @@ export const Chat = ({ screenType }) => {
|
|
125
87
|
}}
|
126
88
|
>
|
127
89
|
{isMobile && elements?.chat?.is_overlay ? null : (
|
128
|
-
<>
|
90
|
+
<>
|
91
|
+
<PinnedMessage clearPinnedMessage={index => removePinnedMessage(pinnedMessages, index)} />
|
92
|
+
</>
|
129
93
|
)}
|
130
94
|
|
131
95
|
<ChatBody
|
@@ -134,27 +98,39 @@ export const Chat = ({ screenType }) => {
|
|
134
98
|
ref={listRef}
|
135
99
|
scrollToBottom={scrollToBottom}
|
136
100
|
screenType={screenType}
|
101
|
+
blacklistedPeerIDs={blacklistedPeerIDs}
|
137
102
|
/>
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
103
|
+
|
104
|
+
<ChatPaused />
|
105
|
+
|
106
|
+
{isLocalPeerBlacklisted ? <ChatBlocked /> : null}
|
107
|
+
|
108
|
+
{isMobile && elements?.chat?.is_overlay ? (
|
109
|
+
<PinnedMessage clearPinnedMessage={index => removePinnedMessage(pinnedMessages, index)} />
|
110
|
+
) : null}
|
111
|
+
|
112
|
+
{isChatEnabled && !isLocalPeerBlacklisted ? (
|
113
|
+
<ChatFooter
|
114
|
+
role={chatOptions.role}
|
115
|
+
onSend={() => scrollToBottom(1)}
|
116
|
+
selection={chatOptions.selection}
|
117
|
+
screenType={screenType}
|
118
|
+
onSelect={({ role, peerId, selection }) => {
|
119
|
+
setChatOptions({
|
120
|
+
role,
|
121
|
+
peerId,
|
122
|
+
selection,
|
123
|
+
});
|
124
|
+
setPeerSelector(peerId);
|
125
|
+
setRoleSelector(role);
|
126
|
+
}}
|
127
|
+
peerId={chatOptions.peerId}
|
128
|
+
>
|
129
|
+
{!isSelectorOpen && !isScrolledToBottom && (
|
130
|
+
<NewMessageIndicator role={chatOptions.role} peerId={chatOptions.peerId} scrollToBottom={scrollToBottom} />
|
131
|
+
)}
|
132
|
+
</ChatFooter>
|
133
|
+
) : null}
|
158
134
|
</Flex>
|
159
135
|
);
|
160
136
|
};
|