diff options
| author | Wolfboy248 <georgejvindkarlsen@gmail.com> | 2024-10-10 21:06:19 +0200 |
|---|---|---|
| committer | Wolfboy248 <georgejvindkarlsen@gmail.com> | 2024-10-10 21:06:19 +0200 |
| commit | 5b1cdb6741677dbbc7be9e11703cbb8f54aad74b (patch) | |
| tree | 61e1903952cdb7ed9184c70684e1d13ae32137d8 /frontend/src/components | |
| parent | refactor: so much shit (diff) | |
| download | lphub-5b1cdb6741677dbbc7be9e11703cbb8f54aad74b.tar.gz lphub-5b1cdb6741677dbbc7be9e11703cbb8f54aad74b.tar.bz2 lphub-5b1cdb6741677dbbc7be9e11703cbb8f54aad74b.zip | |
refactor: upload run dialog
Diffstat (limited to 'frontend/src/components')
| -rw-r--r-- | frontend/src/components/UploadRunDialog.tsx | 77 |
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 | } |