Show a lobby screen in video rooms (#8287)
* Show a lobby screen in video rooms * Add connecting state * Test VideoRoomView * Test VideoLobby * Get the local video stream with useAsyncMemo * Clean up code review nits * Explicitly state what !important is overriding * Use spacing variables * Wait for video channel messaging * Update join button copy * Show frame on both the lobby and widget * Force dark theme for video lobby * Wait for the widget to be ready * Make VideoChannelStore constructor private * Allow video lobby to shrink * Add invite button to video room header * Show connected members on lobby screen * Make avatars in video lobby clickable * Increase video channel store timeout * Fix Jitsi Meet getting wedged on startup in Chrome and Safari * Revert "Fix Jitsi Meet getting wedged on startup in Chrome and Safari" This reverts commit 9f77b8c227c1a5bffa5d91b0c48bf3bbc44d4cec. * Disable device buttons while connecting * Factor RoomFacePile into a separate file * Fix i18n lint * Fix switching video channels while connected * Properly limit number of connected members in face pile * Fix CSS lint
This commit is contained in:
parent
9a065581e5
commit
6e86a14cc9
30 changed files with 1338 additions and 267 deletions
|
@ -14,10 +14,13 @@ See the License for the specific language governing permissions and
|
|||
limitations under the License.
|
||||
*/
|
||||
|
||||
import { useState } from "react";
|
||||
import { throttle } from "lodash";
|
||||
import { CallType } from "matrix-js-sdk/src/webrtc/call";
|
||||
import { RoomState } from "matrix-js-sdk/src/models/room-state";
|
||||
import { RoomState, RoomStateEvent } from "matrix-js-sdk/src/models/room-state";
|
||||
import { RoomMember } from "matrix-js-sdk/src/models/room-member";
|
||||
|
||||
import { useTypedEventEmitter } from "../hooks/useEventEmitter";
|
||||
import WidgetStore, { IApp } from "../stores/WidgetStore";
|
||||
import { WidgetType } from "../widgets/WidgetType";
|
||||
import WidgetUtils from "./WidgetUtils";
|
||||
|
@ -45,3 +48,11 @@ export const getConnectedMembers = (state: RoomState): RoomMember[] =>
|
|||
.filter(e => e.getContent<IVideoChannelMemberContent>()?.devices?.length)
|
||||
.map(e => state.getMember(e.getStateKey()))
|
||||
.filter(member => member?.membership === "join");
|
||||
|
||||
export const useConnectedMembers = (state: RoomState, throttleMs = 100) => {
|
||||
const [members, setMembers] = useState<RoomMember[]>(getConnectedMembers(state));
|
||||
useTypedEventEmitter(state, RoomStateEvent.Update, throttle(() => {
|
||||
setMembers(getConnectedMembers(state));
|
||||
}, throttleMs, { leading: true, trailing: true }));
|
||||
return members;
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue