Skip to content

Commit c9e6099

Browse files
committed
fix(breakouts): user list not updating
Change user query to subscription so the user list is updated when users join/leave after the creation modal is open. Removed some order by fields.
1 parent 284ab89 commit c9e6099

3 files changed

Lines changed: 37 additions & 30 deletions

File tree

bigbluebutton-html5/imports/ui/components/breakout-room/create-breakout-room/component.tsx

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@ import {
1111
getBreakoutsResponse,
1212
getMeetingGroup,
1313
getMeetingGroupResponse,
14-
getUser,
15-
getUserResponse,
14+
getUsersSubscription,
1615
} from './queries';
1716
import { PRESENTATIONS_SUBSCRIPTION, PresentationsSubscriptionResponse } from '/imports/ui/components/whiteboard/queries';
1817
import logger from '/imports/startup/client/logger';
@@ -28,6 +27,7 @@ import {
2827
RoomPresentations,
2928
} from './room-managment-state/types';
3029
import { BREAKOUT_ROOM_CREATE, BREAKOUT_ROOM_MOVE_USER } from '../mutations';
30+
import createUseSubscription from '/imports/ui/core/hooks/createUseSubscription';
3131
import useDeduplicatedSubscription from '/imports/ui/core/hooks/useDeduplicatedSubscription';
3232
import { ACTIONS, PANELS } from '/imports/ui/components/layout/enums';
3333
import { layoutDispatch } from '/imports/ui/components/layout/context';
@@ -287,8 +287,8 @@ const CreateBreakoutRoom: React.FC<CreateBreakoutRoomProps> = ({
287287

288288
const roomsRef = React.useRef<Rooms>({});
289289
const moveRegisterRef = React.useRef<moveUserRegistery>({});
290-
const randomlyAssignFunction = React.useRef<() => void>(() => {});
291-
const resetAssignmentsFunction = React.useRef<() => void>(() => {});
290+
const randomlyAssignFunction = React.useRef<() => void>(() => { });
291+
const resetAssignmentsFunction = React.useRef<() => void>(() => { });
292292

293293
const setRoomsRef = (rooms: Rooms) => {
294294
roomsRef.current = rooms;
@@ -717,13 +717,17 @@ const CreateBreakoutRoomContainer: React.FC<CreateBreakoutRoomContainerProps> =
717717
createdTime: m.createdTime,
718718
}));
719719

720+
const useUsersSubscription = createUseSubscription(
721+
getUsersSubscription,
722+
{},
723+
true,
724+
);
725+
720726
const {
721727
data: usersData,
722728
loading: usersLoading,
723-
error: usersError,
724-
} = useQuery<getUserResponse>(getUser, {
725-
fetchPolicy: 'network-only',
726-
});
729+
errors: usersError,
730+
} = useUsersSubscription();
727731

728732
const [
729733
loadBreakouts,
@@ -780,7 +784,7 @@ const CreateBreakoutRoomContainer: React.FC<CreateBreakoutRoomContainerProps> =
780784
isUpdate={isUpdate}
781785
setUpdateUsersWhileRunning={setUpdateUsersWhileRunning}
782786
isBreakoutRecordable={currentMeeting?.breakoutPolicies?.record ?? true}
783-
users={usersData?.user ?? []}
787+
users={(usersData ?? []) as BreakoutUser[]}
784788
runningRooms={breakoutsData?.breakoutRoom ?? []}
785789
presentations={presentations}
786790
currentPresentation={currentPresentation}

bigbluebutton-html5/imports/ui/components/breakout-room/create-breakout-room/queries.ts

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
11
import { gql } from '@apollo/client';
2-
import { BreakoutUser } from './room-managment-state/types';
3-
4-
export interface getUserResponse {
5-
user: Array<BreakoutUser>;
6-
}
72

83
export interface breakoutRoom {
94
sequence: number;
@@ -47,16 +42,11 @@ export interface getMeetingGroupResponse {
4742
}[];
4843
}
4944

50-
export const getUser = gql`
51-
query getUser {
45+
export const getUsersSubscription = gql`
46+
subscription users {
5247
user(
5348
where: { bot: {_eq: false } }
5449
order_by: [
55-
{presenter: desc},
56-
{role: asc},
57-
{raiseHandTime: asc_nulls_last},
58-
{isDialIn: desc},
59-
{whiteboardWriteAccess: desc},
6050
{nameSortable: asc},
6151
{registeredAt: asc},
6252
{userId: asc}
@@ -116,7 +106,7 @@ export const getMeetingGroup = gql`
116106
`;
117107

118108
export default {
119-
getUser,
109+
getUsersSubscription,
120110
getBreakouts,
121111
getLastBreakouts,
122112
getMeetingGroup,

bigbluebutton-html5/imports/ui/components/breakout-room/create-breakout-room/room-managment-state/component.tsx

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -185,14 +185,27 @@ const RoomManagmentState: React.FC<RoomManagmentStateProps> = ({
185185
});
186186

187187
useEffect(() => {
188-
if (users.length > 0 && Object.keys(userAssignedRooms).length === 0) {
189-
setUserAssignedRooms(
190-
users.reduce((acc: { [key: string]: number[] }, user) => {
191-
const { userId } = user;
192-
acc[userId] = [];
193-
return acc;
194-
}, {}),
195-
);
188+
if (users.length > 0) {
189+
setUserAssignedRooms((prev) => {
190+
const updated = { ...prev };
191+
192+
// Add new users that don't exist in the state
193+
users.forEach((user) => {
194+
if (!updated[user.userId]) {
195+
updated[user.userId] = [];
196+
}
197+
});
198+
199+
// Remove users that are no longer in the users list
200+
const currentUserIds = new Set(users.map((u) => u.userId));
201+
Object.keys(updated).forEach((userId) => {
202+
if (!currentUserIds.has(userId)) {
203+
delete updated[userId];
204+
}
205+
});
206+
207+
return updated;
208+
});
196209
}
197210
}, [users]);
198211

0 commit comments

Comments
 (0)