import { data, redirect } from "react-router"; import type { Route } from "./+types/activities.new"; import { getSessionUser } from "~/lib/auth.server"; import { createActivity } from "~/lib/activities.server"; import { listRoutes } from "~/lib/routes.server"; export async function loader({ request }: Route.LoaderArgs) { const user = await getSessionUser(request); if (!user) return redirect("/auth/login"); const userRoutes = await listRoutes(user.id); return data({ routes: userRoutes.map((r) => ({ id: r.id, name: r.name })), }); } export async function action({ request }: Route.ActionArgs) { const user = await getSessionUser(request); if (!user) return redirect("/auth/login"); const formData = await request.formData(); const name = formData.get("name") as string; const description = formData.get("description") as string; const routeId = formData.get("routeId") as string | null; const gpxFile = formData.get("gpx") as File | null; if (!name) return data({ error: "Name is required" }, { status: 400 }); let gpx: string | undefined; if (gpxFile && gpxFile.size > 0) { gpx = await gpxFile.text(); } const activityId = await createActivity(user.id, { name, description, gpx, routeId: routeId || undefined, }); return redirect(`/activities/${activityId}`); } export function meta(_args: Route.MetaArgs) { return [{ title: "New Activity — trails.cool" }]; } export default function NewActivityPage({ loaderData }: Route.ComponentProps) { const { routes } = loaderData; return (

New Activity