Skip to content

Commit 7f56fb0

Browse files
committed
extended cosmetics of lobby
1 parent 2e2b768 commit 7f56fb0

File tree

4 files changed

+39
-21
lines changed

4 files changed

+39
-21
lines changed

client/src/components/Lobby/UserList.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import Toolbar from '@material-ui/core/Toolbar';
77
import List from '@material-ui/core/List';
88
import ListItem from '@material-ui/core/ListItem';
99
import ListItemText from '@material-ui/core/ListItemText';
10+
import ListItemAvatar from '@material-ui/core/ListItemAvatar';
11+
import Avatar from '@material-ui/core/Avatar';
1012

1113
const useStyles = makeStyles(() => ({
1214
root: {
@@ -33,7 +35,10 @@ function LobbyUserList({ users }) {
3335
>
3436
{users.map((user) => (
3537
<ListItem button key={user.id}>
36-
<ListItemText primary={user.displayName} />
38+
<ListItemAvatar>
39+
<Avatar alt={user.displayName} src={user.avatar && user.avatar.thumb_url} />
40+
</ListItemAvatar>
41+
<ListItemText primary={user.displayName} secondary={user.inARoom && 'Occupied'} />
3742
</ListItem>
3843
))}
3944
</List>
@@ -45,6 +50,7 @@ LobbyUserList.propTypes = {
4550
users: PropTypes.arrayOf(PropTypes.shape({
4651
id: PropTypes.number,
4752
displayName: PropTypes.string,
53+
inARoom: PropTypes.boolean,
4854
})),
4955
};
5056

client/src/components/Lobby/index.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,13 @@ function Lobby({
9494
const privateRooms = rooms.filter((room) => !!room.private && room.type === 'normal');
9595
const showAlert = !!user.id && !user.canJoinRoom;
9696

97+
const waitingUsers = users.map((u) => ({
98+
id: u.id,
99+
displayName: u.displayName,
100+
inARoom: !!rooms.find((room) => room.users && room.users.find((i) => i.id === u.id)),
101+
avatar: u.avatar,
102+
}));
103+
97104
const onCreateRoom = (options) => {
98105
dispatch(createRoom(options));
99106
};
@@ -176,7 +183,7 @@ function Lobby({
176183
</div>
177184
</Grid>
178185
<Grid item xs={3} className={classes.userList}>
179-
<UserList users={users} />
186+
<UserList users={waitingUsers} />
180187
</Grid>
181188
</Grid>
182189
<RoomConfigureDialog

client/src/components/RoomListItem.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ function RoomListItem({
4343
const [menuOpen, setMenuOpen] = React.useState(false);
4444
const anchorRef = React.useRef(null);
4545
const userText = room.usersLength === 0 ? ' empty'
46-
: ` ${room.usersLength} user${room.usersLength > 1 ? 's' : ''}${room.users ? `: ${room.users.join(', ')}` : ''}`;
46+
: ` ${room.usersLength} user${room.usersLength > 1 ? 's' : ''}${room.users ? `: ${room.users.map((u) => u.displayName).join(', ')}` : ''}`;
4747
const [disabled, reason] = canUserJoinRoom(user, room);
4848
const [duration, setDuration] = React.useState(null);
4949
const [unixDuration, setUnixDuration] = React.useState(null);

server/socket/namespaces/rooms.js

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,12 @@ const privateRoomKeys = [...publicRoomKeys, 'users', 'competing', 'waitingFor',
1414
// Data for people not in room
1515
const roomMask = (room) => ({
1616
..._.partial(_.pick, _, publicRoomKeys)(room),
17-
users: room.private ? undefined : room.usersInRoom.map((user) => user.displayName),
17+
users: room.private
18+
? undefined
19+
: room.usersInRoom.map((user) => ({
20+
id: user.id,
21+
displayName: user.displayName,
22+
})),
1823
registeredUsers: room.users.filter((user) => room.registered.get(user.id.toString())).length,
1924
});
2025

@@ -121,24 +126,24 @@ module.exports = (io, middlewares) => {
121126
});
122127
});
123128

124-
ns().on('connection', (socket) => {
125-
logger.debug(`socket ${socket.id} connected to rooms; logged in as ${socket.user ? socket.user.name : 'Anonymous'}`);
129+
async function updateClientsWithUsers() {
130+
const sockets = [...await ns().adapter.allRooms([])]
131+
.filter((room) => room.indexOf('user/') > -1)
132+
.map((user) => +user.split('/')[1]);
126133

127-
async function updateClientWithUsers() {
128-
const sockets = [...await ns().adapter.allRooms([])]
129-
.filter((room) => room.indexOf('user/') > -1)
130-
.map((user) => +user.split('/')[1]);
134+
const users = (await User.find({
135+
id: {
136+
$in: sockets,
137+
},
138+
})).map((user) => user.toJSON()).filter((user) => !!user.displayName);
131139

132-
const users = (await User.find({
133-
id: {
134-
$in: sockets,
135-
},
136-
})).map((user) => user.toJSON()).filter((user) => !!user.displayName);
140+
ns().emit(Protocol.UPDATE_USERS_IN_LOBBY, {
141+
users,
142+
});
143+
}
137144

138-
ns().emit(Protocol.UPDATE_USERS_IN_LOBBY, {
139-
users,
140-
});
141-
}
145+
ns().on('connection', async (socket) => {
146+
logger.debug(`socket ${socket.id} connected to rooms; logged in as ${socket.user ? socket.user.name : 'Anonymous'}`);
142147

143148
socket.use(async (foo, next) => {
144149
if (socket.roomId) {
@@ -152,7 +157,7 @@ module.exports = (io, middlewares) => {
152157
socket.emit(Protocol.UPDATE_ROOMS, rooms);
153158
});
154159

155-
updateClientWithUsers();
160+
updateClientsWithUsers();
156161

157162
function broadcast(...args) {
158163
socket.broadcast.to(socket.room.accessCode).emit(...args);
@@ -671,7 +676,7 @@ module.exports = (io, middlewares) => {
671676
await leaveRoom();
672677
}
673678

674-
updateClientWithUsers();
679+
updateClientsWithUsers();
675680
} catch (err) {
676681
logger.error(err);
677682
}

0 commit comments

Comments
 (0)