import React from 'react'; import { UploadRunContent } from '../types/Content'; import '../css/UploadRunDialog.css'; import { Game } from '../types/Game'; import Games from '../pages/Games'; import { Map } from '../types/Map'; import { API } from '../api/Api'; interface UploadRunDialogProps { open: boolean; onClose: () => void; mapID?: number; games: Game[]; } const UploadRunDialog: React.FC = ({ open, onClose, mapID, games }) => { const [uploadRunContent, setUploadRunContent] = React.useState({ map_id: 0, host_demo: null, partner_demo: null, partner_id: undefined, is_partner_orange: undefined, }); const [currentMap, setCurrentMap] = React.useState(""); const _set_current_map = (game_name: string) => { setCurrentMap(game_name); } const [selectedGameID, setSelectedGameID] = React.useState(0); const [selectedGameMaps, setSelectedGameMaps] = React.useState([]); const [selectedGameName, setSelectedGameName] = React.useState(""); // dropdowns const [dropdown1Vis, setDropdown1Vis] = React.useState(false); const [dropdown2Vis, setDropdown2Vis] = React.useState(false); const [loading, setLoading] = React.useState(false); const _handle_dropdowns = (dropdown: number) => { setDropdown1Vis(false); setDropdown2Vis(false); if (dropdown == 1) { setDropdown1Vis(!dropdown1Vis); } else if (dropdown == 2) { setDropdown2Vis(!dropdown2Vis); document.querySelector("#dropdown2")?.scrollTo(0, 0); } } const _handle_game_select = async (game_id: string, game_name: string) => { setLoading(true); const gameMaps = await API.get_game_maps(game_id); setSelectedGameMaps(gameMaps); setUploadRunContent({ ...uploadRunContent, map_id: gameMaps[0].id, }); _set_current_map(gameMaps[0].name); setSelectedGameID(parseInt(game_id) - 1); setSelectedGameName(game_name); setLoading(false); }; React.useEffect(() => { if (open) { _handle_game_select("1", "Portal 2 - Singleplayer"); // a different approach?. } }, [open]); if (open) { return ( <>

Select Game

_handle_dropdowns(1)} style={{display: "flex", alignItems: "center", cursor: "pointer", justifyContent: "space-between"}}>
{selectedGameName}
{games.map((game) => (
{_handle_game_select(game.id.toString(), game.name); _handle_dropdowns(1)}} key={game.id}>{game.name}
))}
{ !loading && ( <>

Select Map

_handle_dropdowns(2)} style={{display: "flex", alignItems: "center", cursor: "pointer", justifyContent: "space-between"}}> {currentMap}
Host Demo { games[selectedGameID].is_coop && ( <> Partner Demo ) }
) }
); } return ( <> ); }; export default UploadRunDialog;