Skip to content

Commit 79b6dfb

Browse files
committed
fix: pvp commit history
1 parent fff3538 commit 79b6dfb

File tree

7 files changed

+70
-14
lines changed

7 files changed

+70
-14
lines changed

docs/spec/CodeCharacter-API.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1800,12 +1800,15 @@ components:
18001800
createdAt:
18011801
type: string
18021802
format: date-time
1803+
codeType:
1804+
$ref: '#/components/schemas/CodeType'
18031805
required:
18041806
- id
18051807
- code
18061808
- message
18071809
- language
18081810
- createdAt
1811+
- codeType
18091812
CreateCodeRevisionRequest:
18101813
title: CreateCodeRevisionRequest
18111814
type: object

packages/client/src/models/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,12 @@ export interface CodeRevision {
115115
* @memberof CodeRevision
116116
*/
117117
createdAt: string;
118+
/**
119+
*
120+
* @type {CodeType}
121+
* @memberof CodeRevision
122+
*/
123+
codeType: CodeType;
118124
}
119125

120126
/**

src/components/CommitHistory/CommitTree/CommitHistroy.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,12 @@ export default function CommitHistory(props: PropsType): JSX.Element {
5151
props.commitID(eachCommit.id);
5252
}}
5353
>
54-
<h6 className="vertical-timeline-element-title">
55-
{eachCommit.message}
56-
</h6>
54+
<>
55+
<h6 className="vertical-timeline-element-title">
56+
{eachCommit.message}
57+
</h6>
58+
<h6>{'codeType' in eachCommit ? eachCommit.codeType : ''}</h6>
59+
</>
5760
</VerticalTimelineElement>
5861
);
5962
})

src/components/CommitHistory/HistoryMain/History.tsx

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { apiConfig, ApiError } from '../../../api/ApiConfig';
66
import {
77
CodeApi,
88
CodeRevision,
9+
CodeType,
910
CurrentUserApi,
1011
GameMapRevision,
1112
MapApi,
@@ -21,7 +22,12 @@ import styles from './History.module.css';
2122
import CodeView from '../CodeMapViewbox/CodeView';
2223
import { Col, Container, Row } from 'react-bootstrap';
2324
import Toast, { toast } from 'react-hot-toast';
24-
import { updateUserCode, changeLanguage } from '../../../store/editor/code';
25+
import {
26+
updateUserCode,
27+
changeLanguage,
28+
updateEditorCodeState,
29+
GameType,
30+
} from '../../../store/editor/code';
2531
import { useNavigate } from 'react-router-dom';
2632
import { useTour } from '@reactour/tour';
2733

@@ -33,6 +39,9 @@ export default function History(): JSX.Element {
3339
const [codeFetched, setCodeFetched] = useState<boolean>(false);
3440
const [currentCode, setCurrentCode] = useState('');
3541
const [codeLanguage, setCodeLanguage] = useState('');
42+
const [currentcodeType, setCurrentCodeType] = useState<CodeType>(
43+
CodeType.Normal,
44+
);
3645
const [currentMap, setCurrentMap] = useState<MapObj>({
3746
map: [],
3847
mapImg: '',
@@ -64,8 +73,17 @@ export default function History(): JSX.Element {
6473
codeApi
6574
.getCodeRevisions()
6675
.then(codeResp => {
67-
setCodeFetched(true);
68-
setCodeHistory(codeResp);
76+
codeApi
77+
.getCodeRevisions(CodeType.Pvp)
78+
.then(pvpCodeResp => {
79+
setCodeHistory([...codeResp, ...pvpCodeResp]);
80+
setCodeFetched(true);
81+
})
82+
.catch(pvpCodeError => {
83+
if (pvpCodeError instanceof ApiError) {
84+
Toast.error(pvpCodeError.message);
85+
}
86+
});
6987
})
7088
.catch(codeError => {
7189
if (codeError instanceof ApiError) {
@@ -96,6 +114,7 @@ export default function History(): JSX.Element {
96114
setCurrentCode(codeData.code);
97115
setCodeLanguage(codeData.language.toLowerCase());
98116
setCurrentCommitMessage(codeData.message);
117+
setCurrentCodeType(codeData.codeType);
99118
}
100119
});
101120
completeMapHistory.forEach(mapData => {
@@ -138,6 +157,19 @@ export default function History(): JSX.Element {
138157
updateUserCode({
139158
currentUserLanguage: codeLanguage === 'cpp' ? 'c_cpp' : codeLanguage,
140159
currentUserCode: currentCode,
160+
gameType:
161+
currentcodeType === CodeType.Normal
162+
? GameType.NORMAL
163+
: GameType.PVP,
164+
}),
165+
);
166+
dispatch(
167+
updateEditorCodeState({
168+
gameType:
169+
currentcodeType === CodeType.Normal
170+
? GameType.NORMAL
171+
: GameType.PVP,
172+
language: codeLanguage === 'cpp' ? 'c_cpp' : codeLanguage,
141173
}),
142174
);
143175
dispatch(changeLanguage(codeLanguage === 'cpp' ? 'c_cpp' : codeLanguage));

src/components/Editor/Editor.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import {
2828

2929
import {
3030
updateUserCode,
31-
CodeAndLanguage,
31+
UpdateUserCodeRequestObject,
3232
UserCode,
3333
} from '../../store/editor/code';
3434

@@ -160,7 +160,7 @@ export default function CodeEditor(props: Editor.Props): JSX.Element {
160160
};
161161
websocket.send(JSON.stringify(currUpdater));
162162
}
163-
const codeNlanguage: CodeAndLanguage = {
163+
const codeNlanguage: UpdateUserCodeRequestObject = {
164164
currentUserCode: editor.getValue(),
165165
currentUserLanguage: language,
166166
};

src/store/DailyChallenge/dailyChallenge.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ import {
44
} from '@codecharacter-2024/client';
55
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
66
import { RootState } from '../store';
7-
import { CodeAndLanguage, languagesAvailable } from '../editor/code';
7+
import {
8+
UpdateUserCodeRequestObject,
9+
languagesAvailable,
10+
} from '../editor/code';
811
import defaultCppCode from '../../assets/codes/cpp/run.cpp?raw';
912
import defaultPythonCode from '../../assets/codes/python/run.py?raw';
1013
import defaultJavaCode from '../../assets/codes/java/Run.java?raw';
@@ -68,7 +71,10 @@ export const dailyChallengeSlice = createSlice({
6871
) => {
6972
state.pageType = action.payload;
7073
},
71-
changeDcCode: (state, action: PayloadAction<CodeAndLanguage>) => {
74+
changeDcCode: (
75+
state,
76+
action: PayloadAction<UpdateUserCodeRequestObject>,
77+
) => {
7278
const tempCurrentUserLanguage = action.payload.currentUserLanguage;
7379
const desiredIndex = languagesAvailable.indexOf(tempCurrentUserLanguage);
7480
state.dcAllLanguagesCode[desiredIndex] = action.payload.currentUserCode;

src/store/editor/code.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,10 @@ const initialState: editorStateType = {
3737
gameType: GameType.NORMAL,
3838
};
3939

40-
export interface CodeAndLanguage {
40+
export interface UpdateUserCodeRequestObject {
4141
currentUserCode: string;
4242
currentUserLanguage: string;
43+
gameType?: GameType;
4344
}
4445

4546
export interface GameTypeAndLanguage {
@@ -73,14 +74,19 @@ export const editorSlice = createSlice({
7374
state.allLanguagesPvPCode[desiredIndex] = action.payload.code;
7475
},
7576

76-
updateUserCode: (state, action: PayloadAction<CodeAndLanguage>) => {
77+
updateUserCode: (
78+
state,
79+
action: PayloadAction<UpdateUserCodeRequestObject>,
80+
) => {
7781
const tempCurrentUserLanguage = action.payload.currentUserLanguage;
7882
const desiredIndex = languagesAvailable.indexOf(tempCurrentUserLanguage);
79-
const newCodeAndLanguage: CodeAndLanguage = {
83+
const newCodeAndLanguage: UpdateUserCodeRequestObject = {
8084
currentUserCode: action.payload.currentUserCode,
8185
currentUserLanguage: action.payload.currentUserLanguage,
8286
};
83-
if (state.gameType === GameType.NORMAL) {
87+
const gameType = action.payload.gameType ?? state.gameType;
88+
state.gameType = gameType;
89+
if (gameType === GameType.NORMAL) {
8490
state.allLanguagesNormalCode[desiredIndex] =
8591
newCodeAndLanguage.currentUserCode;
8692
} else {

0 commit comments

Comments
 (0)