Skip to content

Commit fff3538

Browse files
committed
fix:pvp fixes
1 parent dc68828 commit fff3538

File tree

4 files changed

+86
-54
lines changed

4 files changed

+86
-54
lines changed

src/components/BattleTV/BattleTV.tsx

Lines changed: 35 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { useEffect, useState } from 'react';
2-
import ReactPaginate from 'react-paginate';
32
import { getLogAction } from '../../store/rendererLogs/logSlice';
43
import { useNavigate } from 'react-router-dom';
54
import styles from './BattleTV.module.css';
@@ -88,7 +87,6 @@ function getUsersGame(
8887
}
8988

9089
function PaginatedItems({ battleTvType }: { battleTvType: BattleType }) {
91-
const [pageCount, setPageCount] = useState(0);
9290
const navigate = useNavigate();
9391
const currentBattles =
9492
battleTvType == BattleType.PVP
@@ -99,25 +97,17 @@ function PaginatedItems({ battleTvType }: { battleTvType: BattleType }) {
9997
const loading = useAppSelector(loadingSelector);
10098
const loggedInUser = useAppSelector(user);
10199
const hasErrors = useAppSelector(hasErrorsSelector);
100+
const pageCount = currentBattles.page;
102101

103102
// initialize the redux hook
104103
const dispatch = useAppDispatch();
105104

106105
if (!currentBattles.hasbeenFetched) {
107-
if (currentBattles.page !== pageCount) {
108-
dispatch(
109-
fetchBattlesAction({ battleTvType: battleTvType, page: pageCount }),
110-
);
111-
}
112-
}
113-
114-
const handlePageClick = (event: { selected: number }) => {
115-
setPageCount(event.selected);
106+
console.log('fetching battles');
116107
dispatch(
117-
fetchBattlesAction({ battleTvType: battleTvType, page: event.selected }),
108+
fetchBattlesAction({ battleTvType: battleTvType, page: pageCount }),
118109
);
119-
console.log('changed');
120-
};
110+
}
121111

122112
return (
123113
<>
@@ -237,21 +227,37 @@ function PaginatedItems({ battleTvType }: { battleTvType: BattleType }) {
237227
)}
238228
</>
239229
<nav className={styles.paginationouter}>
240-
<ReactPaginate
241-
previousLabel="<"
242-
nextLabel=">"
243-
pageLinkClassName={styles.pageNum}
244-
previousLinkClassName={styles.pageNum}
245-
nextLinkClassName={styles.pageNum}
246-
breakLabel="..."
247-
breakLinkClassName={styles.pageNum}
248-
pageCount={69}
249-
marginPagesDisplayed={2}
250-
pageRangeDisplayed={5}
251-
onPageChange={handlePageClick}
252-
containerClassName={styles.pagination}
253-
activeClassName="active"
254-
/>
230+
<button
231+
type="button"
232+
className={styles.button}
233+
onClick={() => {
234+
if (pageCount !== 0) {
235+
dispatch(
236+
fetchBattlesAction({
237+
battleTvType: battleTvType,
238+
page: pageCount - 1,
239+
}),
240+
);
241+
}
242+
}}
243+
>
244+
{'<'}
245+
</button>
246+
<div className={styles.button}>{pageCount + 1}</div>
247+
<button
248+
type="button"
249+
className={styles.button}
250+
onClick={() => {
251+
dispatch(
252+
fetchBattlesAction({
253+
battleTvType: battleTvType,
254+
page: pageCount + 1,
255+
}),
256+
);
257+
}}
258+
>
259+
{'>'}
260+
</button>
255261
<button
256262
type="button"
257263
className={styles.button}

src/components/CommitModal/CommitModal.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@ import { CodeApi, Language } from '@codecharacter-2024/client';
22
import React, { useState } from 'react';
33
import { Button, Form, Modal, Row } from 'react-bootstrap';
44
import { apiConfig, ApiError } from '../../api/ApiConfig';
5-
import { GameType, UserCode, UserLanguage } from '../../store/editor/code';
6-
import { CurrentGameType } from '../../store/editor/code';
5+
import {
6+
GameType,
7+
UserCode,
8+
UserLanguage,
9+
CurrentGameType,
10+
} from '../../store/editor/code';
711
import {
812
IsCommitModalOpen,
913
isCommitModalOpened,

src/components/Leaderboard/Leaderboard.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -479,8 +479,13 @@ function PaginatedItems(props: LeaderboardType.Props) {
479479
type="button"
480480
className={styles.button}
481481
onClick={() => {
482-
fetchLeaderboardByTier(0, activeTier);
483-
setPage(0);
482+
if (props.page == 'Normal') {
483+
fetchLeaderboardByTier(0, activeTier);
484+
setPage(0);
485+
} else {
486+
fetchPvPLeaderboard(0);
487+
setPage(0);
488+
}
484489
}}
485490
id="refresh"
486491
>

src/store/BattleTV/BattleTvSlice.ts

Lines changed: 38 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
import { apiConfig } from '../../api/ApiConfig';
88
import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';
99
import { RootState } from '../store';
10+
import toast from 'react-hot-toast';
1011

1112
export enum BattleType {
1213
NORMAL,
@@ -35,19 +36,19 @@ export const initialState = {
3536
battleType: BattleType.NORMAL,
3637
battles: [] as Match[],
3738
hasbeenFetched: false,
38-
page: 1,
39+
page: 0,
3940
},
4041
PvPbattles: {
4142
battleType: BattleType.PVP,
4243
battles: [] as PvPMatch[],
4344
hasbeenFetched: false,
44-
page: 1,
45+
page: 0,
4546
},
4647
Dcbattles: {
4748
battleType: BattleType.DC,
4849
battles: [] as Match[],
4950
hasbeenFetched: false,
50-
page: 1,
51+
page: 0,
5152
},
5253
};
5354

@@ -57,14 +58,14 @@ export const fetchBattlesAction = createAsyncThunk(
5758
reqobj: { battleTvType: BattleType; page: number },
5859
{ rejectWithValue },
5960
) => {
61+
console.log('called');
6062
try {
6163
switch (reqobj.battleTvType) {
6264
case BattleType.NORMAL:
6365
const matchesAPI = new MatchApi(apiConfig);
6466
const normalResponse = await matchesAPI.getUserNormalMatches(
6567
reqobj.page,
6668
);
67-
// console.log(normalResponse)
6869
return {
6970
battles: normalResponse,
7071
battleType: BattleType.NORMAL,
@@ -99,23 +100,39 @@ const battleTvSlice = createSlice({
99100
reducers: {},
100101
extraReducers: builder => {
101102
builder.addCase(fetchBattlesAction.fulfilled, (state, { payload }) => {
102-
state.loading = false;
103-
switch (payload.battleType) {
104-
case BattleType.NORMAL:
105-
state.Normalbattles.battles = payload.battles as Match[];
106-
state.Normalbattles.hasbeenFetched = true;
107-
state.Normalbattles.page = payload.page;
108-
break;
109-
case BattleType.PVP:
110-
state.PvPbattles.battles = payload.battles as PvPMatch[];
111-
state.PvPbattles.hasbeenFetched = true;
112-
state.PvPbattles.page = payload.page;
113-
break;
114-
case BattleType.DC:
115-
state.Dcbattles.battles = payload.battles as Match[];
116-
state.Dcbattles.hasbeenFetched = true;
117-
state.Dcbattles.page = payload.page;
118-
break;
103+
if (payload.battles.length !== 0) {
104+
state.loading = false;
105+
switch (payload.battleType) {
106+
case BattleType.NORMAL:
107+
state.Normalbattles.battles = payload.battles as Match[];
108+
state.Normalbattles.hasbeenFetched = true;
109+
state.Normalbattles.page = payload.page;
110+
break;
111+
case BattleType.PVP:
112+
state.PvPbattles.battles = payload.battles as PvPMatch[];
113+
state.PvPbattles.hasbeenFetched = true;
114+
state.PvPbattles.page = payload.page;
115+
break;
116+
case BattleType.DC:
117+
state.Dcbattles.battles = payload.battles as Match[];
118+
state.Dcbattles.hasbeenFetched = true;
119+
state.Dcbattles.page = payload.page;
120+
break;
121+
}
122+
} else {
123+
state.loading = false;
124+
toast.error('No more battles to show');
125+
switch (payload.battleType) {
126+
case BattleType.NORMAL:
127+
state.Normalbattles.hasbeenFetched = true;
128+
break;
129+
case BattleType.PVP:
130+
state.PvPbattles.hasbeenFetched = true;
131+
break;
132+
case BattleType.DC:
133+
state.Dcbattles.hasbeenFetched = true;
134+
break;
135+
}
119136
}
120137
});
121138
builder.addCase(fetchBattlesAction.rejected, state => {

0 commit comments

Comments
 (0)