@100mslive/hms-video-store 0.2.82 → 0.2.83
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/common/ui-logger.d.ts +13 -13
- package/dist/core/IHMSActions.d.ts +266 -264
- package/dist/core/IHMSNotifications.d.ts +14 -15
- package/dist/core/IHMSStore.d.ts +54 -56
- package/dist/core/hmsSDKStore/HMSNotifications.d.ts +25 -25
- package/dist/core/hmsSDKStore/HMSPlaylist.d.ts +21 -21
- package/dist/core/hmsSDKStore/HMSReactiveStore.d.ts +79 -79
- package/dist/core/hmsSDKStore/HMSSDKActions.d.ts +157 -157
- package/dist/core/hmsSDKStore/adapter.d.ts +49 -49
- package/dist/core/hmsSDKStore/common/mapping.d.ts +7 -7
- package/dist/core/hmsSDKStore/internalTypes.d.ts +4 -4
- package/dist/core/hmsSDKStore/sdkTypes.d.ts +3 -2
- package/dist/core/hmsSDKStore/sdkUtils/ActionBatcher.d.ts +19 -19
- package/dist/core/hmsSDKStore/sdkUtils/sdkUtils.d.ts +2 -2
- package/dist/core/hmsSDKStore/sdkUtils/storeMergeUtils.d.ts +14 -14
- package/dist/core/index.d.ts +9 -7
- package/dist/core/schema/device-change.d.ts +13 -13
- package/dist/core/schema/error.d.ts +13 -13
- package/dist/core/schema/index.d.ts +11 -11
- package/dist/core/schema/message.d.ts +31 -31
- package/dist/core/schema/notification.d.ts +40 -40
- package/dist/core/schema/peer.d.ts +67 -67
- package/dist/core/schema/playlist.d.ts +127 -109
- package/dist/core/schema/requests.d.ts +31 -31
- package/dist/core/schema/role.d.ts +3 -3
- package/dist/core/schema/room.d.ts +23 -23
- package/dist/core/schema/schema.d.ts +29 -29
- package/dist/core/schema/settings.d.ts +5 -5
- package/dist/core/selectors/derivedSelectors.d.ts +29 -29
- package/dist/core/selectors/index.d.ts +5 -5
- package/dist/core/selectors/playlistselectors.d.ts +3 -3
- package/dist/core/selectors/selectorUtils.d.ts +18 -18
- package/dist/core/selectors/selectors.d.ts +185 -191
- package/dist/core/selectors/selectorsByID.d.ts +127 -128
- package/dist/core/selectors/selectorsByReference.d.ts +3 -3
- package/dist/hms-video-store.cjs.js +1 -0
- package/dist/hms-video-store.esm.js +1 -5376
- package/dist/index.d.ts +1 -1
- package/package.json +21 -84
- package/dist/hms-video-store.cjs.development.js +0 -5468
- package/dist/hms-video-store.cjs.development.js.map +0 -1
- package/dist/hms-video-store.cjs.production.min.js +0 -2
- package/dist/hms-video-store.cjs.production.min.js.map +0 -1
- package/dist/hms-video-store.esm.js.map +0 -1
- package/dist/index.js +0 -8
- package/dist/test/fakeStore.d.ts +0 -23
- package/dist/test/fixtures.d.ts +0 -3
- package/src/common/ui-logger.ts +0 -88
- package/src/core/IHMSActions.ts +0 -318
- package/src/core/IHMSNotifications.ts +0 -16
- package/src/core/IHMSStore.ts +0 -60
- package/src/core/hmsSDKStore/HMSNotifications.ts +0 -194
- package/src/core/hmsSDKStore/HMSPlaylist.ts +0 -78
- package/src/core/hmsSDKStore/HMSReactiveStore.ts +0 -271
- package/src/core/hmsSDKStore/HMSSDKActions.ts +0 -1156
- package/src/core/hmsSDKStore/adapter.ts +0 -244
- package/src/core/hmsSDKStore/common/mapping.ts +0 -32
- package/src/core/hmsSDKStore/internalTypes.ts +0 -8
- package/src/core/hmsSDKStore/sdkTypes.ts +0 -55
- package/src/core/hmsSDKStore/sdkUtils/ActionBatcher.ts +0 -63
- package/src/core/hmsSDKStore/sdkUtils/sdkUtils.ts +0 -5
- package/src/core/hmsSDKStore/sdkUtils/storeMergeUtils.ts +0 -98
- package/src/core/index.ts +0 -18
- package/src/core/schema/device-change.ts +0 -14
- package/src/core/schema/error.ts +0 -13
- package/src/core/schema/index.ts +0 -11
- package/src/core/schema/message.ts +0 -35
- package/src/core/schema/notification.ts +0 -41
- package/src/core/schema/peer.ts +0 -78
- package/src/core/schema/playlist.ts +0 -114
- package/src/core/schema/requests.ts +0 -36
- package/src/core/schema/role.ts +0 -5
- package/src/core/schema/room.ts +0 -26
- package/src/core/schema/schema.ts +0 -94
- package/src/core/schema/settings.ts +0 -5
- package/src/core/selectors/derivedSelectors.ts +0 -81
- package/src/core/selectors/index.ts +0 -5
- package/src/core/selectors/playlistselectors.ts +0 -67
- package/src/core/selectors/selectorUtils.ts +0 -63
- package/src/core/selectors/selectors.ts +0 -400
- package/src/core/selectors/selectorsByID.ts +0 -401
- package/src/core/selectors/selectorsByReference.ts +0 -45
- package/src/index.ts +0 -1
- package/src/test/fakeStore.ts +0 -272
- package/src/test/fixtures.ts +0 -22
- package/src/test/integration/.gitkeep +0 -0
- package/src/test/unit/HMSNotifications.test.ts +0 -123
- package/src/test/unit/reactiveStore.test.ts +0 -129
- package/src/test/unit/roleSelectors.test.ts +0 -85
- package/src/test/unit/selectors.test.ts +0 -316
- package/src/test/unit/selectorsByReference.test.ts +0 -27
- package/src/test/unit/storeMergeUtils.test.ts +0 -168
|
@@ -1,400 +0,0 @@
|
|
|
1
|
-
import { HMSMessage, HMSPeer, HMSPeerID, HMSRoom, HMSRoomState, HMSStore } from '../schema';
|
|
2
|
-
import { createSelector } from 'reselect';
|
|
3
|
-
// noinspection ES6PreferShortImport
|
|
4
|
-
import { HMSRole } from '../hmsSDKStore/sdkTypes';
|
|
5
|
-
import {
|
|
6
|
-
getPeerTracksByCondition,
|
|
7
|
-
isDegraded,
|
|
8
|
-
isVideoPlaylist,
|
|
9
|
-
isTrackDisplayEnabled,
|
|
10
|
-
isTrackEnabled,
|
|
11
|
-
isAudioPlaylist,
|
|
12
|
-
isVideo,
|
|
13
|
-
} from './selectorUtils';
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Select the current {@link HMSRoom} object to which you are connected.
|
|
17
|
-
* @param store
|
|
18
|
-
*/
|
|
19
|
-
export const selectRoom = (store: HMSStore): HMSRoom => store.room;
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* @internal
|
|
23
|
-
*/
|
|
24
|
-
export const selectPeersMap = (store: HMSStore): Record<HMSPeerID, HMSPeer> => store.peers;
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* @internal
|
|
28
|
-
*/
|
|
29
|
-
export const selectMessagesMap = (store: HMSStore) => store.messages.byID;
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Select IDs of messages you've sent or received sorted chronologically.
|
|
33
|
-
*/
|
|
34
|
-
export const selectMessageIDsInOrder = (store: HMSStore) => store.messages.allIDs;
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* @internal
|
|
38
|
-
*/
|
|
39
|
-
export const selectTracksMap = (store: HMSStore) => store.tracks;
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Select your media settings
|
|
43
|
-
* i.e., choosen audio input device, audio output device and video input device.
|
|
44
|
-
* @param store
|
|
45
|
-
*/
|
|
46
|
-
export const selectLocalMediaSettings = (store: HMSStore) => store.settings;
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Select the available audio input, audio output and video input devices on your machine.
|
|
50
|
-
* @param store
|
|
51
|
-
* @returns An object of array of available audio input, audio output and video input devices.
|
|
52
|
-
* ```
|
|
53
|
-
* type DeviceMap = {
|
|
54
|
-
* audioInput: InputDeviceInfo[];
|
|
55
|
-
* audioOutput: MediaDeviceInfo[];
|
|
56
|
-
* videoInput: InputDeviceInfo[];
|
|
57
|
-
* }
|
|
58
|
-
* ```
|
|
59
|
-
*/
|
|
60
|
-
export const selectDevices = (store: HMSStore) => {
|
|
61
|
-
return store.devices;
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
export const selectSpeakers = (store: HMSStore) => {
|
|
65
|
-
return store.speakers;
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Select a boolean flag denoting whether you've joined a room.
|
|
70
|
-
* NOTE: Returns true only after join, returns false during preview.
|
|
71
|
-
*/
|
|
72
|
-
export const selectIsConnectedToRoom = createSelector(
|
|
73
|
-
[selectRoom],
|
|
74
|
-
room => room && room.isConnected,
|
|
75
|
-
);
|
|
76
|
-
|
|
77
|
-
export const selectPeerCount = createSelector(selectRoom, room => room.peers.length);
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Select an array of peers(remote peers and your local peer) present in the room.
|
|
81
|
-
*/
|
|
82
|
-
export const selectPeers = createSelector([selectRoom, selectPeersMap], (room, storePeers) => {
|
|
83
|
-
return room.peers.map(peerID => storePeers[peerID]);
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Select an array of tracks(remote peer tracks and your local tracks) present in the room.
|
|
88
|
-
*/
|
|
89
|
-
const selectTracks = createSelector(selectTracksMap, storeTracks => {
|
|
90
|
-
return Object.values(storeTracks);
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Select the local peer object object assigned to you.
|
|
95
|
-
*/
|
|
96
|
-
export const selectLocalPeer = createSelector(selectRoom, selectPeersMap, (room, peers) => {
|
|
97
|
-
return peers[room.localPeer];
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Select the peer ID of your local peer.
|
|
102
|
-
*/
|
|
103
|
-
export const selectLocalPeerID = createSelector(selectRoom, room => {
|
|
104
|
-
return room.localPeer;
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Select the track ID of your local peer's primary audio track
|
|
109
|
-
*/
|
|
110
|
-
export const selectLocalAudioTrackID = createSelector(selectLocalPeer, peer => peer?.audioTrack);
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* Select the track ID of your local peer's primary video track
|
|
114
|
-
*/
|
|
115
|
-
export const selectLocalVideoTrackID = createSelector(selectLocalPeer, peer => peer?.videoTrack);
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Select an array of track IDs of your local peer's auxiliary tracks
|
|
119
|
-
*/
|
|
120
|
-
const selectLocalAuxiliaryTrackIDs = createSelector(selectLocalPeer, peer => peer?.auxiliaryTracks);
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* Select an array of track IDs of all your local peer's tracks
|
|
124
|
-
*/
|
|
125
|
-
export const selectLocalTrackIDs = createSelector(
|
|
126
|
-
[selectLocalAudioTrackID, selectLocalVideoTrackID, selectLocalAuxiliaryTrackIDs],
|
|
127
|
-
(audioTrackID, videoTrackID, auxiliaryTrackIDs) => {
|
|
128
|
-
const trackIDs: string[] = [...auxiliaryTrackIDs];
|
|
129
|
-
audioTrackID && trackIDs.unshift(audioTrackID);
|
|
130
|
-
videoTrackID && trackIDs.unshift(videoTrackID);
|
|
131
|
-
return trackIDs;
|
|
132
|
-
},
|
|
133
|
-
);
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Select remote peers(other users you're connected with via the internet) present in the room.
|
|
137
|
-
*/
|
|
138
|
-
export const selectRemotePeers = createSelector(selectPeers, peers => {
|
|
139
|
-
return peers.filter(p => !p.isLocal);
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* Select the peer who's speaking the loudest at the moment
|
|
144
|
-
*/
|
|
145
|
-
export const selectDominantSpeaker = createSelector(
|
|
146
|
-
selectPeersMap,
|
|
147
|
-
selectSpeakers,
|
|
148
|
-
(peersMap, speakers) => {
|
|
149
|
-
// sort in descending order by audio level
|
|
150
|
-
const speakersInOrder = Object.entries(speakers).sort((s1, s2) => {
|
|
151
|
-
const s1Level = s1[1]?.audioLevel || 0;
|
|
152
|
-
const s2Level = s2[1]?.audioLevel || 0;
|
|
153
|
-
return s2Level > s1Level ? 1 : -1;
|
|
154
|
-
});
|
|
155
|
-
if (
|
|
156
|
-
speakersInOrder.length > 0 &&
|
|
157
|
-
speakersInOrder[0][1].audioLevel &&
|
|
158
|
-
speakersInOrder[0][1].audioLevel > 0
|
|
159
|
-
) {
|
|
160
|
-
const peerID = speakersInOrder[0][1].peerID;
|
|
161
|
-
if (peerID in peersMap) {
|
|
162
|
-
return peersMap[peerID];
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
return null;
|
|
166
|
-
},
|
|
167
|
-
);
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* Select a boolean denoting whether your local audio is unmuted
|
|
171
|
-
* and the audio from your microphone is shared to remote peers
|
|
172
|
-
*/
|
|
173
|
-
export const selectIsLocalAudioEnabled = (store: HMSStore) => {
|
|
174
|
-
const localPeer = selectLocalPeer(store);
|
|
175
|
-
return isTrackEnabled(store, localPeer?.audioTrack);
|
|
176
|
-
};
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* Select a boolean denoting whether your local video is unmuted
|
|
180
|
-
* and the video from your camera is shared to remote peers
|
|
181
|
-
*/
|
|
182
|
-
export const selectIsLocalVideoEnabled = (store: HMSStore) => {
|
|
183
|
-
const localPeer = selectLocalPeer(store);
|
|
184
|
-
return isTrackEnabled(store, localPeer?.videoTrack);
|
|
185
|
-
};
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
* Select a boolean denoting whether you've chosen to unmute and share your local video.
|
|
189
|
-
*
|
|
190
|
-
* NOTE: Once you call `hmsActions.setLocalVideoEnabled(true)`to unmute your local video,
|
|
191
|
-
* it takes some time to fetch your video from your video source.
|
|
192
|
-
* This displayEnabled property gives immediate feedback for a more interactive UI,
|
|
193
|
-
* without waiting for the video source
|
|
194
|
-
*/
|
|
195
|
-
export const selectIsLocalVideoDisplayEnabled = (store: HMSStore) => {
|
|
196
|
-
const localPeer = selectLocalPeer(store);
|
|
197
|
-
return isTrackDisplayEnabled(store, localPeer?.videoTrack);
|
|
198
|
-
};
|
|
199
|
-
|
|
200
|
-
/**
|
|
201
|
-
* Select a boolean denoting whether your screen is shared to remote peers in the room.
|
|
202
|
-
*/
|
|
203
|
-
export const selectIsLocalScreenShared = createSelector(
|
|
204
|
-
selectLocalPeer,
|
|
205
|
-
selectTracksMap,
|
|
206
|
-
(localPeer, tracksMap) => {
|
|
207
|
-
const { video, audio } = getPeerTracksByCondition(tracksMap, localPeer);
|
|
208
|
-
return !!(video || audio);
|
|
209
|
-
},
|
|
210
|
-
);
|
|
211
|
-
|
|
212
|
-
/**
|
|
213
|
-
* Select the first peer who is currently sharing their screen.
|
|
214
|
-
*/
|
|
215
|
-
export const selectPeerScreenSharing = createSelector(
|
|
216
|
-
selectPeersMap,
|
|
217
|
-
selectTracksMap,
|
|
218
|
-
(peersMap, tracksMap) => {
|
|
219
|
-
let screensharePeer = undefined;
|
|
220
|
-
for (const peerID in peersMap) {
|
|
221
|
-
const peer = peersMap[peerID];
|
|
222
|
-
const { video, audio } = getPeerTracksByCondition(tracksMap, peer);
|
|
223
|
-
if (video) {
|
|
224
|
-
return peer;
|
|
225
|
-
} else if (audio && !screensharePeer) {
|
|
226
|
-
screensharePeer = peer;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
return screensharePeer;
|
|
230
|
-
},
|
|
231
|
-
);
|
|
232
|
-
|
|
233
|
-
/**
|
|
234
|
-
* Select a boolean denoting whether someone is sharing screen in the room.
|
|
235
|
-
*/
|
|
236
|
-
export const selectIsSomeoneScreenSharing = createSelector(selectPeerScreenSharing, peer => {
|
|
237
|
-
return !!peer;
|
|
238
|
-
});
|
|
239
|
-
|
|
240
|
-
/**
|
|
241
|
-
* Select the first peer who is currently sharing their audio only screen
|
|
242
|
-
*/
|
|
243
|
-
export const selectPeerSharingAudio = createSelector(
|
|
244
|
-
selectPeersMap,
|
|
245
|
-
selectTracksMap,
|
|
246
|
-
(peersMap, tracksMap) => {
|
|
247
|
-
for (const peerID in peersMap) {
|
|
248
|
-
const peer = peersMap[peerID];
|
|
249
|
-
const { audio, video } = getPeerTracksByCondition(tracksMap, peer);
|
|
250
|
-
if (!video && !!audio) {
|
|
251
|
-
return peer;
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
return undefined;
|
|
255
|
-
},
|
|
256
|
-
);
|
|
257
|
-
|
|
258
|
-
/**
|
|
259
|
-
* Select an array of peers who are currently sharing their screen.
|
|
260
|
-
*/
|
|
261
|
-
export const selectPeersScreenSharing = createSelector(
|
|
262
|
-
selectPeersMap,
|
|
263
|
-
selectTracksMap,
|
|
264
|
-
(peersMap, tracksMap) => {
|
|
265
|
-
const videoPeers = [];
|
|
266
|
-
const audioPeers = [];
|
|
267
|
-
for (const peerID in peersMap) {
|
|
268
|
-
const peer = peersMap[peerID];
|
|
269
|
-
const { video, audio } = getPeerTracksByCondition(tracksMap, peer);
|
|
270
|
-
if (video) {
|
|
271
|
-
videoPeers.push(peer);
|
|
272
|
-
} else if (audio) {
|
|
273
|
-
audioPeers.push(peer);
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
return videoPeers.concat(audioPeers);
|
|
277
|
-
},
|
|
278
|
-
);
|
|
279
|
-
|
|
280
|
-
export const selectPeerSharingVideoPlaylist = createSelector(
|
|
281
|
-
selectPeersMap,
|
|
282
|
-
selectTracksMap,
|
|
283
|
-
(peersMap, tracksMap) => {
|
|
284
|
-
for (const trackId in tracksMap) {
|
|
285
|
-
const track = tracksMap[trackId];
|
|
286
|
-
if (isVideoPlaylist(track) && isVideo(track) && track.peerId) {
|
|
287
|
-
return peersMap[track.peerId];
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
return undefined;
|
|
291
|
-
},
|
|
292
|
-
);
|
|
293
|
-
|
|
294
|
-
export const selectPeerSharingAudioPlaylist = createSelector(
|
|
295
|
-
selectPeersMap,
|
|
296
|
-
selectTracksMap,
|
|
297
|
-
(peersMap, tracksMap) => {
|
|
298
|
-
for (const trackId in tracksMap) {
|
|
299
|
-
const track = tracksMap[trackId];
|
|
300
|
-
if (isAudioPlaylist(track) && track.peerId) {
|
|
301
|
-
return peersMap[track.peerId];
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
return undefined;
|
|
305
|
-
},
|
|
306
|
-
);
|
|
307
|
-
|
|
308
|
-
/**
|
|
309
|
-
* Select an array of tracks that have been degraded(receiving lower video quality/no video) due to bad network locally.
|
|
310
|
-
*/
|
|
311
|
-
export const selectDegradedTracks = createSelector(selectTracks, tracks =>
|
|
312
|
-
tracks.filter(isDegraded),
|
|
313
|
-
);
|
|
314
|
-
|
|
315
|
-
/**
|
|
316
|
-
* Select the number of messages(sent and received).
|
|
317
|
-
*/
|
|
318
|
-
export const selectHMSMessagesCount = createSelector(
|
|
319
|
-
selectMessageIDsInOrder,
|
|
320
|
-
messageIDs => messageIDs.length,
|
|
321
|
-
);
|
|
322
|
-
|
|
323
|
-
/**
|
|
324
|
-
* Select the number of unread messages.
|
|
325
|
-
*/
|
|
326
|
-
export const selectUnreadHMSMessagesCount = createSelector(selectMessagesMap, messages => {
|
|
327
|
-
return Object.values(messages).filter(m => !m.read).length;
|
|
328
|
-
});
|
|
329
|
-
|
|
330
|
-
/**
|
|
331
|
-
* Select an array of messages in the room(sent and received).
|
|
332
|
-
*/
|
|
333
|
-
export const selectHMSMessages = createSelector(
|
|
334
|
-
selectMessageIDsInOrder,
|
|
335
|
-
selectMessagesMap,
|
|
336
|
-
(msgIDs, msgMap) => {
|
|
337
|
-
const messages: HMSMessage[] = [];
|
|
338
|
-
msgIDs.forEach(msgId => {
|
|
339
|
-
messages.push(msgMap[msgId]);
|
|
340
|
-
});
|
|
341
|
-
return messages;
|
|
342
|
-
},
|
|
343
|
-
);
|
|
344
|
-
|
|
345
|
-
/**
|
|
346
|
-
* Select the current state of the room.
|
|
347
|
-
*/
|
|
348
|
-
export const selectRoomState = createSelector([selectRoom], room => room && room.roomState);
|
|
349
|
-
|
|
350
|
-
/**
|
|
351
|
-
* Select a boolean denoting whether the room is in Preview state.
|
|
352
|
-
*/
|
|
353
|
-
export const selectIsInPreview = createSelector(
|
|
354
|
-
selectRoomState,
|
|
355
|
-
roomState => roomState === HMSRoomState.Preview,
|
|
356
|
-
);
|
|
357
|
-
|
|
358
|
-
export const selectRoomStarted = createSelector(
|
|
359
|
-
selectRoom,
|
|
360
|
-
room => room.roomState !== HMSRoomState.Disconnected,
|
|
361
|
-
);
|
|
362
|
-
|
|
363
|
-
/**
|
|
364
|
-
* Select available roles in the room as a map between the role name and {@link HMSRole} object.
|
|
365
|
-
*/
|
|
366
|
-
export const selectRolesMap = (store: HMSStore): Record<string, HMSRole> => {
|
|
367
|
-
return store.roles;
|
|
368
|
-
};
|
|
369
|
-
|
|
370
|
-
/**
|
|
371
|
-
* Select an array of names of available roles in the room.
|
|
372
|
-
*/
|
|
373
|
-
export const selectAvailableRoleNames = createSelector([selectRolesMap], rolesMap =>
|
|
374
|
-
Object.keys(rolesMap),
|
|
375
|
-
);
|
|
376
|
-
|
|
377
|
-
/**
|
|
378
|
-
* Select the {@link HMSRole} object of your local peer.
|
|
379
|
-
*/
|
|
380
|
-
export const selectLocalPeerRole = createSelector(
|
|
381
|
-
[selectLocalPeer, selectRolesMap],
|
|
382
|
-
(localPeer, rolesMap) => (localPeer?.roleName ? rolesMap[localPeer.roleName] : null),
|
|
383
|
-
);
|
|
384
|
-
|
|
385
|
-
/**
|
|
386
|
-
* Select a boolean denoting whether if your local peer is allowed to subscribe to any other role.
|
|
387
|
-
*/
|
|
388
|
-
export const selectIsAllowedToSubscribe = createSelector([selectLocalPeerRole], (role): boolean => {
|
|
389
|
-
if (!role?.subscribeParams?.subscribeToRoles) {
|
|
390
|
-
return false;
|
|
391
|
-
}
|
|
392
|
-
return role.subscribeParams.subscribeToRoles.length > 0;
|
|
393
|
-
});
|
|
394
|
-
|
|
395
|
-
/**
|
|
396
|
-
* Select the permissions which determine what actions the local peer can do.
|
|
397
|
-
*/
|
|
398
|
-
export const selectPermissions = createSelector(selectLocalPeerRole, role => role?.permissions);
|
|
399
|
-
export const selectRecordingState = createSelector(selectRoom, room => room.recording);
|
|
400
|
-
export const selectRTMPState = createSelector(selectRoom, room => room.rtmp);
|