import { Navigate } from "@thorium/components/Navigate"; import { q } from "@thorium/context/AppContext"; import { toast } from "@thorium/context/ToastContext"; import { useFlightQuickStart } from "@thorium/routes/quickStart/quickStartContext"; import Button from "@thorium/ui/Button"; import Modal from "@thorium/ui/Modal"; import { Outlet } from "react-router"; import { useNavigate, useMatch, Link } from "react-router"; export default function FlightQuickStart() { const [flight] = q.flight.active.useNetRequest(); const flightStart = q.flight.start.useNetSend(); const [state, dispatch] = useFlightQuickStart(); const navigate = useNavigate(); const match = useMatch("/flight/quick/:step"); const lobbyMatch = useMatch("/flight/lobby/quick/:step"); if (flight) return ; const { step } = match ? match.params : lobbyMatch!.params; return ( { navigate("/"); }} title="Start Flight" > {step !== "ship" && ( Prev )} {step === "ship" && ( { const shipId = (state.ships || []).at(-1)!.shipId; const shipTemplate = await q.plugin.ship.get.netRequest(shipId); dispatch({ type: "addShip", name: ( await q.textPattern.interpolate.netRequest({ string: shipTemplate.nameTemplate }) ).output, }); }} > Add Player Ship )} {step !== "mission" && ( Next )} {step === "mission" && ( { const { ships, flightName, missionId, hasFlightDirector, startingPointId: startingPoint, mode, } = state; if (ships.length === 0) { toast({ title: "Ship is required", body: "You have at least one ship to start a flight.", color: "warning", action: () => navigate("ship"), }); return; } const mappedShips = ships.map((ship) => ({ ...ship, shipName: ship.name, shipTemplate: ship.shipId, })); flightStart.mutate({ flightName, ships: mappedShips as unknown as [(typeof mappedShips)[0]], hasFlightDirector, missionId, startingPoint, mode, }); }} > {flightStart.isPending ? "Starting Flight..." : "Start"} )} ); }