Skip to content

Commit fb5ff2b

Browse files
committed
improve lobby and fix styles
1 parent c540796 commit fb5ff2b

File tree

16 files changed

+947
-801
lines changed

16 files changed

+947
-801
lines changed

services/app/apps/codebattle/assets/css/custom.scss

Lines changed: 718 additions & 0 deletions
Large diffs are not rendered by default.

services/app/apps/codebattle/assets/css/style.scss

Lines changed: 109 additions & 774 deletions
Large diffs are not rendered by default.

services/app/apps/codebattle/assets/js/socket.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ export const channelTopics = {
5454
tournamentGameWaitTopic: 'tournament:game:wait',
5555
tournamentPlayerFinishedRoundTopic: 'tournament:player:finished_round',
5656
tournamentPlayerFinishedTopic: 'tournament:player:finished',
57+
tournamentActivated: 'tournament:activated',
5758

5859
roundCreatedTopic: 'round:created',
5960

services/app/apps/codebattle/assets/js/widgets/components/UserStats.jsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
44
import cn from 'classnames';
55
import { useDispatch, useSelector } from 'react-redux';
66

7+
import { selectDefaultAvatarUrl } from '@/selectors';
8+
79
import i18next from '../../i18n';
810
import { followUser, unfollowUser } from '../middlewares/Main';
911
import { redirectToNewGame } from '../slices';
@@ -14,9 +16,10 @@ import UserAchievements from './UserAchievements';
1416

1517
const UserStats = ({ data, user: userInfo }) => {
1618
const dispatch = useDispatch();
19+
const defaultAvatarUrl = useSelector(selectDefaultAvatarUrl);
1720

1821
const activeGameId = data?.activeGameId;
19-
const avatarUrl = userInfo.avatarUrl || data?.user?.avatarUrl || '/assets/images/logo.svg';
22+
const avatarUrl = userInfo.avatarUrl || data?.user?.avatarUrl || defaultAvatarUrl;
2023
const name = userInfo.name || data?.user?.name || 'Jon Doe';
2124
const lang = userInfo.lang || data?.user?.lang || 'js';
2225

services/app/apps/codebattle/assets/js/widgets/middlewares/Main.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { camelizeKeys } from 'humps';
33

44
import { makeGameUrl } from '@/utils/urlBuilders';
55

6-
import { channelMethods } from '../../socket';
6+
import { channelMethods, channelTopics } from '../../socket';
77
import { actions } from '../slices';
88

99
import Channel from './Channel';
@@ -99,6 +99,11 @@ const initPresence = followId => dispatch => {
9999
camelizeKeysAndDispatch(dispatch, actions.setActiveGameId)(data);
100100
dispatch(redirectToNewGame(camelizeKeys(data)));
101101
},
102+
).addListener(
103+
channelTopics.tournamentActivated,
104+
data => {
105+
camelizeKeysAndDispatch(dispatch, actions.changeTournamentState)(data);
106+
},
102107
);
103108
};
104109

services/app/apps/codebattle/assets/js/widgets/pages/lobby/GameRoomPreview.jsx

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
import React from 'react';
22

33
import Gon from 'gon';
4+
import { useSelector } from 'react-redux';
5+
6+
import { selectDefaultAvatarUrl } from '@/selectors';
47

58
import LanguageIcon from '../../components/LanguageIcon';
69

7-
const defaultAvatarUrl = 'https://avatars.githubusercontent.com/u/35539033?v=4';
10+
const defaultPreviewAvatarUrl = 'https://avatars.githubusercontent.com/u/35539033?v=4';
811

912
const players = Gon.getAsset('players');
1013

1114
// TODO : user user.avatarUrl
1215
const GameRoomPreview = ({ pageName }) => {
16+
const defaultAvatarUrl = useSelector(selectDefaultAvatarUrl);
17+
1318
if (pageName === 'builder') {
1419
return (
1520
<div className="preview container-fluid slideInLeft">
@@ -22,7 +27,7 @@ const GameRoomPreview = ({ pageName }) => {
2227

2328
const defaultPlayer = {
2429
name: 'John Doe',
25-
avatar_url: '/assets/images/logo.svg',
30+
avatar_url: defaultAvatarUrl,
2631
lang: 'js',
2732
rating: '0',
2833
};
@@ -34,7 +39,7 @@ const GameRoomPreview = ({ pageName }) => {
3439
<div className="preview container-fluid slideInLeft">
3540
<div className="preview__container w-100 d-flex align-items-center">
3641
<div className="player1">
37-
<img src={player1.avatar_url || defaultAvatarUrl} alt="avatar" className="player1__avatar" />
42+
<img src={player1.avatar_url || defaultPreviewAvatarUrl} alt="avatar" className="player1__avatar" />
3843
<p className="player1__name">{player1.name}</p>
3944
<div className="player1__status">
4045
<LanguageIcon className="preview__icon" lang={player1.lang} />
@@ -49,7 +54,7 @@ const GameRoomPreview = ({ pageName }) => {
4954
</div>
5055

5156
<div className="player2">
52-
<img src={player2.avatar_url || defaultAvatarUrl} alt="avatar" className="player2__avatar" />
57+
<img src={player2.avatar_url || defaultPreviewAvatarUrl} alt="avatar" className="player2__avatar" />
5358
<p className="player2__name">{player2.name}</p>
5459
<div className="player2__status">
5560
<LanguageIcon className="preview__icon" lang={player2.lang} />

services/app/apps/codebattle/assets/js/widgets/pages/lobby/LobbyWidget.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React, {
2-
useState, useRef, useEffect, useCallback,
2+
useState, useRef, useEffect, useCallback,
33
} from 'react';
44

55
import cn from 'classnames';

services/app/apps/codebattle/assets/js/widgets/pages/lobby/SeasonProfilePanel.jsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,20 @@ import React, { useState, useEffect } from 'react';
22

33
import axios from 'axios';
44
import { camelizeKeys } from 'humps';
5+
import { useSelector } from 'react-redux';
6+
7+
import { selectDefaultAvatarUrl } from '@/selectors';
58

69
import i18n from '../../../i18n';
710

811
import TournamentListItem, { activeIcon } from './TournamentListItem';
912

10-
const contestDatesText = 'Season: Oct 14 - Dec 21';
13+
const contestDatesText = 'Season: Oct 16 - Dec 21';
1114

12-
const UserLogo = ({ user, size = '40px' }) => {
15+
const UserLogo = ({ user, size = '70px' }) => {
1316
const [userInfo, setUserInfo] = useState();
14-
const avatarUrl = user.avatarUrl || userInfo?.avatarUrl || '/assets/images/logo.svg';
17+
const defaultAvatarUrl = useSelector(selectDefaultAvatarUrl);
18+
const avatarUrl = user.avatarUrl || userInfo?.avatarUrl || defaultAvatarUrl;
1519

1620
useEffect(() => {
1721
const userId = user.id;
@@ -36,6 +40,7 @@ const UserLogo = ({ user, size = '40px' }) => {
3640
<img
3741
style={{ width: size, height: size }}
3842
alt="Avatar Logo"
43+
className="rounded-circle"
3944
src={avatarUrl}
4045
/>
4146
);

services/app/apps/codebattle/assets/js/widgets/pages/schedule/TournamentSchedule.jsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React, { useCallback, useEffect, useState } from 'react';
22

33
import cn from 'classnames';
44
import dayjs from 'dayjs';
5+
import uniqBy from 'lodash/uniqBy';
56
import { Calendar as BigCalendar, dayjsLocalizer } from 'react-big-calendar';
67
import { useSelector } from 'react-redux';
78

@@ -180,20 +181,22 @@ const TournamentSchedule = () => {
180181
}
181182

182183
if (context === states.contest) {
183-
const newTournaments = [
184+
const newTournaments = uniqBy([
184185
...hash.seasonTournaments,
185186
...hash.userTournaments.filter(haveSeasonGrade),
186-
];
187+
], 'id');
188+
187189
setTournaments(newTournaments);
188190
} else if (context === states.my) {
189191
setTournaments(
190192
hash.userTournaments.filter(filterMyTournaments(currentUserId)),
191193
);
192194
} else if (context === states.all) {
193-
const newTournaments = [
195+
const newTournaments = uniqBy([
194196
...hash.seasonTournaments,
195197
...hash.userTournaments,
196-
];
198+
], 'id');
199+
197200
setTournaments(newTournaments);
198201
}
199202
}, [context, hash, setTournaments, currentUserId, isAdmin]);

services/app/apps/codebattle/assets/js/widgets/selectors/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,8 @@ export const reportsSelector = createDraftSafeSelector(
576576
},
577577
);
578578

579+
export const selectDefaultAvatarUrl = () => '/assets/images/logo.svg';
580+
579581
// Participant data selector
580582
export const participantDataSelector = state => {
581583
const event = eventSelector(state);

0 commit comments

Comments
 (0)