aboutsummaryrefslogtreecommitdiff
path: root/frontend/src/components/UploadRunDialog.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/src/components/UploadRunDialog.tsx')
-rw-r--r--frontend/src/components/UploadRunDialog.tsx77
1 files changed, 58 insertions, 19 deletions
diff --git a/frontend/src/components/UploadRunDialog.tsx b/frontend/src/components/UploadRunDialog.tsx
index aa7ab5a..fb146ba 100644
--- a/frontend/src/components/UploadRunDialog.tsx
+++ b/frontend/src/components/UploadRunDialog.tsx
@@ -24,12 +24,34 @@ const UploadRunDialog: React.FC<UploadRunDialogProps> = ({ open, onClose, mapID,
24 is_partner_orange: undefined, 24 is_partner_orange: undefined,
25 }); 25 });
26 26
27 const [currentMap, setCurrentMap] = React.useState<string>("");
28
29 const _set_current_map = (game_name: string) => {
30 setCurrentMap(game_name);
31 }
32
27 const [selectedGameID, setSelectedGameID] = React.useState<number>(0); 33 const [selectedGameID, setSelectedGameID] = React.useState<number>(0);
28 const [selectedGameMaps, setSelectedGameMaps] = React.useState<Map[]>([]); 34 const [selectedGameMaps, setSelectedGameMaps] = React.useState<Map[]>([]);
35 const [selectedGameName, setSelectedGameName] = React.useState<string>("");
36
37 // dropdowns
38 const [dropdown1Vis, setDropdown1Vis] = React.useState<boolean>(false);
39 const [dropdown2Vis, setDropdown2Vis] = React.useState<boolean>(false);
29 40
30 const [loading, setLoading] = React.useState<boolean>(false); 41 const [loading, setLoading] = React.useState<boolean>(false);
31 42
32 const _handle_game_select = async (game_id: string) => { 43 const _handle_dropdowns = (dropdown: number) => {
44 setDropdown1Vis(false);
45 setDropdown2Vis(false);
46 if (dropdown == 1) {
47 setDropdown1Vis(!dropdown1Vis);
48 } else if (dropdown == 2) {
49 setDropdown2Vis(!dropdown2Vis);
50 document.querySelector("#dropdown2")?.scrollTo(0, 0);
51 }
52 }
53
54 const _handle_game_select = async (game_id: string, game_name: string) => {
33 setLoading(true); 55 setLoading(true);
34 const gameMaps = await API.get_game_maps(game_id); 56 const gameMaps = await API.get_game_maps(game_id);
35 setSelectedGameMaps(gameMaps); 57 setSelectedGameMaps(gameMaps);
@@ -37,13 +59,15 @@ const UploadRunDialog: React.FC<UploadRunDialogProps> = ({ open, onClose, mapID,
37 ...uploadRunContent, 59 ...uploadRunContent,
38 map_id: gameMaps[0].id, 60 map_id: gameMaps[0].id,
39 }); 61 });
62 _set_current_map(gameMaps[0].name);
40 setSelectedGameID(parseInt(game_id) - 1); 63 setSelectedGameID(parseInt(game_id) - 1);
64 setSelectedGameName(game_name);
41 setLoading(false); 65 setLoading(false);
42 }; 66 };
43 67
44 React.useEffect(() => { 68 React.useEffect(() => {
45 if (open) { 69 if (open) {
46 _handle_game_select("1"); // a different approach?. 70 _handle_game_select("1", "Portal 2 - Singleplayer"); // a different approach?.
47 } 71 }
48 }, [open]); 72 }, [open]);
49 73
@@ -54,25 +78,37 @@ const UploadRunDialog: React.FC<UploadRunDialogProps> = ({ open, onClose, mapID,
54 <div id='upload-run-menu'> 78 <div id='upload-run-menu'>
55 <div id='upload-run-menu-add'> 79 <div id='upload-run-menu-add'>
56 <div id='upload-run-route-category'> 80 <div id='upload-run-route-category'>
57 <span>Select Game</span> 81 <div style={{padding: "15px 0px"}} className='upload-run-dropdown-container'>
58 <select onChange={(e) => _handle_game_select(e.target.value)}> 82 <h1 style={{paddingBottom: "14px"}}>Select Game</h1>
59 {games.map((game) => ( 83 <div onClick={() => _handle_dropdowns(1)} style={{display: "flex", alignItems: "center", cursor: "pointer", justifyContent: "space-between"}}>
60 <option key={game.id} value={game.id}>{game.name}</option> 84 <div className='dropdown-cur'>{selectedGameName}</div>
61 ))} 85 <i style={{rotate: "-90deg", transform: "translate(-5px, 10px)"}} className="triangle"></i>
62 </select> 86 </div>
87 <div className={dropdown1Vis ? "upload-run-dropdown" : "upload-run-dropdown hidden"}>
88 {games.map((game) => (
89 <div onClick={() => {_handle_game_select(game.id.toString(), game.name); _handle_dropdowns(1)}} key={game.id}>{game.name}</div>
90 ))}
91 </div>
92 </div>
63 { 93 {
64 !loading && 94 !loading &&
65 ( 95 (
66 <> 96 <>
67 <span>Select Map</span> 97 <div className='upload-run-map-container' style={{paddingBottom: "10px"}}>
68 <select onChange={(e) => setUploadRunContent({ 98 <div style={{padding: "15px 0px"}}>
69 ...uploadRunContent, 99 <h1 style={{paddingBottom: "14px"}}>Select Map</h1>
70 map_id: parseInt(e.target.value), 100 <div onClick={() => _handle_dropdowns(2)} style={{display: "flex", alignItems: "center", cursor: "pointer", justifyContent: "space-between"}}>
71 })}> 101 <span style={{userSelect: "none"}}>{currentMap}</span>
72 {selectedGameMaps && selectedGameMaps.map((gameMap) => ( 102 <i style={{rotate: "-90deg", transform: "translate(-5px, 10px)"}} className="triangle"></i>
73 <option key={gameMap.id} value={gameMap.id}>{gameMap.name}</option> 103 </div>
74 ))} 104 </div>
75 </select> 105 <div>
106 <div id='dropdown2' className={dropdown2Vis ? "upload-run-dropdown" : "upload-run-dropdown hidden"}>
107 {selectedGameMaps && selectedGameMaps.map((gameMap) => (
108 <div onClick={() => { setUploadRunContent({...uploadRunContent, map_id: parseInt(gameMap.name)}); _set_current_map(gameMap.name); _handle_dropdowns(2); }} key={gameMap.id}>{gameMap.name}</div>
109 ))}
110 </div>
111 </div>
76 <span>Host Demo</span> 112 <span>Host Demo</span>
77 <input type="file" name="host_demo" id="host_demo" accept=".dem" /> 113 <input type="file" name="host_demo" id="host_demo" accept=".dem" />
78 { 114 {
@@ -84,8 +120,11 @@ const UploadRunDialog: React.FC<UploadRunDialogProps> = ({ open, onClose, mapID,
84 </> 120 </>
85 ) 121 )
86 } 122 }
87 <button onClick={() => onClose()}>Submit</button> 123 <div className='upload-run-buttons-container'>
88 <button onClick={() => onClose()}>Cancel</button> 124 <button onClick={() => onClose()}>Submit</button>
125 <button onClick={() => onClose()}>Cancel</button>
126 </div>
127 </div>
89 </> 128 </>
90 ) 129 )
91 } 130 }