aboutsummaryrefslogtreecommitdiff
path: root/frontend
diff options
context:
space:
mode:
authorArda Serdar Pektezol <1669855+pektezol@users.noreply.github.com>2024-10-19 16:28:00 +0300
committerArda Serdar Pektezol <1669855+pektezol@users.noreply.github.com>2024-10-19 16:28:00 +0300
commitbe5313fa0092688cea04f7f1f115574765847c22 (patch)
treed3760749ffb6942577afe92182f6fdbd3aa89d4b /frontend
parentbackend: optimize create record (diff)
downloadlphub-be5313fa0092688cea04f7f1f115574765847c22.tar.gz
lphub-be5313fa0092688cea04f7f1f115574765847c22.tar.bz2
lphub-be5313fa0092688cea04f7f1f115574765847c22.zip
backend: fix run ranks
Diffstat (limited to 'frontend')
-rw-r--r--frontend/package-lock.json6
-rw-r--r--frontend/package.json1
-rw-r--r--frontend/src/components/UploadRunDialog.tsx99
3 files changed, 64 insertions, 42 deletions
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 8b901ad..a77d244 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -8,6 +8,7 @@
8 "name": "frontend", 8 "name": "frontend",
9 "version": "0.1.0", 9 "version": "0.1.0",
10 "dependencies": { 10 "dependencies": {
11 "@nekz/sdp": "^0.9.0",
11 "@testing-library/jest-dom": "^5.17.0", 12 "@testing-library/jest-dom": "^5.17.0",
12 "@testing-library/react": "^13.4.0", 13 "@testing-library/react": "^13.4.0",
13 "@testing-library/user-event": "^13.5.0", 14 "@testing-library/user-event": "^13.5.0",
@@ -3174,6 +3175,11 @@
3174 "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", 3175 "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz",
3175 "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==" 3176 "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw=="
3176 }, 3177 },
3178 "node_modules/@nekz/sdp": {
3179 "version": "0.9.0",
3180 "resolved": "https://registry.npmjs.org/@nekz/sdp/-/sdp-0.9.0.tgz",
3181 "integrity": "sha512-ndg3Ze/RZxsyX0QRhZ0HnkHUIth7/3jpTcABhzQzsXV0Y4MzpoZ0dj6KRqiBz+O3acZdk0/9gr40Smqc7S4ikg=="
3182 },
3177 "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { 3183 "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": {
3178 "version": "5.1.1-v1", 3184 "version": "5.1.1-v1",
3179 "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", 3185 "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz",
diff --git a/frontend/package.json b/frontend/package.json
index 6c3022d..57c92a7 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -3,6 +3,7 @@
3 "version": "0.1.0", 3 "version": "0.1.0",
4 "private": true, 4 "private": true,
5 "dependencies": { 5 "dependencies": {
6 "@nekz/sdp": "^0.9.0",
6 "@testing-library/jest-dom": "^5.17.0", 7 "@testing-library/jest-dom": "^5.17.0",
7 "@testing-library/react": "^13.4.0", 8 "@testing-library/react": "^13.4.0",
8 "@testing-library/user-event": "^13.5.0", 9 "@testing-library/user-event": "^13.5.0",
diff --git a/frontend/src/components/UploadRunDialog.tsx b/frontend/src/components/UploadRunDialog.tsx
index d42ffe7..9f417b5 100644
--- a/frontend/src/components/UploadRunDialog.tsx
+++ b/frontend/src/components/UploadRunDialog.tsx
@@ -1,11 +1,16 @@
1import React from 'react'; 1import React from 'react';
2import { UploadRunContent } from '../types/Content'; 2import { UploadRunContent } from '../types/Content';
3import { DemoMessages, ScoreboardTempUpdate, SourceDemoParser, UserMessage } from '@nekz/sdp';
4import fs from 'fs';
5
6
3 7
4import '../css/UploadRunDialog.css'; 8import '../css/UploadRunDialog.css';
5import { Game } from '../types/Game'; 9import { Game } from '../types/Game';
6import { Map } from '../types/Map'; 10import { Map } from '../types/Map';
7import { API } from '../api/Api'; 11import { API } from '../api/Api';
8import { useNavigate } from 'react-router-dom'; 12import { useNavigate } from 'react-router-dom';
13import { SvcUserMessage } from '@nekz/sdp/script/src/types/NetMessages';
9 14
10interface UploadRunDialogProps { 15interface UploadRunDialogProps {
11 token?: string; 16 token?: string;
@@ -103,6 +108,16 @@ const UploadRunDialog: React.FC<UploadRunDialogProps> = ({ token, open, onClose,
103 return 108 return
104 } 109 }
105 } 110 }
111 const demo = SourceDemoParser.default()
112 .setOptions({ packets: true })
113 .parse(await uploadRunContent.host_demo.arrayBuffer());
114
115 const scoreboardPacket = demo.findPacket(ScoreboardTempUpdate)
116 if (scoreboardPacket) {
117 console.log(scoreboardPacket)
118 } else {
119 console.log("couldnt find scoreboard packet")
120 }
106 if (window.confirm("Are you sure you want to submit this run to LPHUB?")) { 121 if (window.confirm("Are you sure you want to submit this run to LPHUB?")) {
107 const message = await API.post_record(token, uploadRunContent); 122 const message = await API.post_record(token, uploadRunContent);
108 alert(message); 123 alert(message);
@@ -114,7 +129,7 @@ const UploadRunDialog: React.FC<UploadRunDialogProps> = ({ token, open, onClose,
114 129
115 React.useEffect(() => { 130 React.useEffect(() => {
116 if (open) { 131 if (open) {
117 _handle_game_select("1", "Portal 2 - Singleplayer"); // a different approach?. 132 _handle_game_select("1", "Portal 2 - Singleplayer"); // a different approach?.
118 } 133 }
119 }, [open]); 134 }, [open]);
120 135
@@ -125,15 +140,15 @@ const UploadRunDialog: React.FC<UploadRunDialogProps> = ({ token, open, onClose,
125 <div id='upload-run-menu'> 140 <div id='upload-run-menu'>
126 <div id='upload-run-menu-add'> 141 <div id='upload-run-menu-add'>
127 <div id='upload-run-route-category'> 142 <div id='upload-run-route-category'>
128 <div style={{padding: "15px 0px"}} className='upload-run-dropdown-container'> 143 <div style={{ padding: "15px 0px" }} className='upload-run-dropdown-container'>
129 <h1 style={{paddingBottom: "14px"}}>Select Game</h1> 144 <h1 style={{ paddingBottom: "14px" }}>Select Game</h1>
130 <div onClick={() => _handle_dropdowns(1)} style={{display: "flex", alignItems: "center", cursor: "pointer", justifyContent: "space-between"}}> 145 <div onClick={() => _handle_dropdowns(1)} style={{ display: "flex", alignItems: "center", cursor: "pointer", justifyContent: "space-between" }}>
131 <div className='dropdown-cur'>{selectedGameName}</div> 146 <div className='dropdown-cur'>{selectedGameName}</div>
132 <i style={{rotate: "-90deg", transform: "translate(-5px, 10px)"}} className="triangle"></i> 147 <i style={{ rotate: "-90deg", transform: "translate(-5px, 10px)" }} className="triangle"></i>
133 </div> 148 </div>
134 <div className={dropdown1Vis ? "upload-run-dropdown" : "upload-run-dropdown hidden"}> 149 <div className={dropdown1Vis ? "upload-run-dropdown" : "upload-run-dropdown hidden"}>
135 {games.map((game) => ( 150 {games.map((game) => (
136 <div onClick={() => {_handle_game_select(game.id.toString(), game.name); _handle_dropdowns(1)}} key={game.id}>{game.name}</div> 151 <div onClick={() => { _handle_game_select(game.id.toString(), game.name); _handle_dropdowns(1) }} key={game.id}>{game.name}</div>
137 ))} 152 ))}
138 </div> 153 </div>
139 </div> 154 </div>
@@ -141,45 +156,45 @@ const UploadRunDialog: React.FC<UploadRunDialogProps> = ({ token, open, onClose,
141 !loading && 156 !loading &&
142 ( 157 (
143 <> 158 <>
144 <div className='upload-run-map-container' style={{paddingBottom: "10px"}}> 159 <div className='upload-run-map-container' style={{ paddingBottom: "10px" }}>
145 <div style={{padding: "15px 0px"}}> 160 <div style={{ padding: "15px 0px" }}>
146 <h1 style={{paddingBottom: "14px"}}>Select Map</h1> 161 <h1 style={{ paddingBottom: "14px" }}>Select Map</h1>
147 <div onClick={() => _handle_dropdowns(2)} style={{display: "flex", alignItems: "center", cursor: "pointer", justifyContent: "space-between"}}> 162 <div onClick={() => _handle_dropdowns(2)} style={{ display: "flex", alignItems: "center", cursor: "pointer", justifyContent: "space-between" }}>
148 <span style={{userSelect: "none"}}>{currentMap}</span> 163 <span style={{ userSelect: "none" }}>{currentMap}</span>
149 <i style={{rotate: "-90deg", transform: "translate(-5px, 10px)"}} className="triangle"></i> 164 <i style={{ rotate: "-90deg", transform: "translate(-5px, 10px)" }} className="triangle"></i>
165 </div>
150 </div> 166 </div>
151 </div> 167 <div>
152 <div> 168 <div id='dropdown2' className={dropdown2Vis ? "upload-run-dropdown" : "upload-run-dropdown hidden"}>
153 <div id='dropdown2' className={dropdown2Vis ? "upload-run-dropdown" : "upload-run-dropdown hidden"}> 169 {selectedGameMaps && selectedGameMaps.map((gameMap) => (
154 {selectedGameMaps && selectedGameMaps.map((gameMap) => ( 170 <div onClick={() => { setUploadRunContent({ ...uploadRunContent, map_id: gameMap.id }); _set_current_map(gameMap.name); _handle_dropdowns(2); }} key={gameMap.id}>{gameMap.name}</div>
155 <div onClick={() => { setUploadRunContent({...uploadRunContent, map_id: gameMap.id}); _set_current_map(gameMap.name); _handle_dropdowns(2); }} key={gameMap.id}>{gameMap.name}</div> 171 ))}
156 ))} 172 </div>
173 </div>
174 <span>Host Demo</span>
175 <input type="file" name="host_demo" id="host_demo" accept=".dem" onChange={(e) => _handle_file_change(e, true)} />
176 {
177 games[selectedGameID].is_coop &&
178 (
179 <>
180 <span>Partner Demo</span>
181 <input type="file" name="partner_demo" id="partner_demo" accept=".dem" onChange={(e) => _handle_file_change(e, false)} />
182 <span>Partner ID</span>
183 <input type="text" name="partner_id" id="partner_id" onChange={(e) => setUploadRunContent({
184 ...uploadRunContent,
185 partner_id: e.target.value,
186 })} />
187 </>
188 )
189 }
190 <div className='search-container'>
191
192 </div>
193 <div className='upload-run-buttons-container'>
194 <button onClick={_upload_run}>Submit</button>
195 <button onClick={() => onClose()}>Cancel</button>
157 </div> 196 </div>
158 </div> 197 </div>
159 <span>Host Demo</span>
160 <input type="file" name="host_demo" id="host_demo" accept=".dem" onChange={(e) => _handle_file_change(e, true)} />
161 {
162 games[selectedGameID].is_coop &&
163 (
164 <>
165 <span>Partner Demo</span>
166 <input type="file" name="partner_demo" id="partner_demo" accept=".dem" onChange={(e) => _handle_file_change(e, false)} />
167 <span>Partner ID</span>
168 <input type="text" name="partner_id" id="partner_id" onChange={(e) => setUploadRunContent({
169 ...uploadRunContent,
170 partner_id: e.target.value,
171 })} />
172 </>
173 )
174 }
175 <div className='search-container'>
176
177 </div>
178 <div className='upload-run-buttons-container'>
179 <button onClick={_upload_run}>Submit</button>
180 <button onClick={() => onClose()}>Cancel</button>
181 </div>
182 </div>
183 </> 198 </>
184 ) 199 )
185 } 200 }