Yaltopia-FIFA/app/(master)/master/leagues/[leagueId]/competitions/new/page.tsx
Kirubel-Kibru-Yaltopia 89440985f1
Some checks failed
Deploy to Cloudflare Workers / deploy (push) Has been cancelled
x
2026-05-24 21:46:10 +03:00

67 lines
2.3 KiB
TypeScript

"use client";
import { useState } from "react";
import { useRouter, useParams } from "next/navigation";
import { api } from "@/lib/api/client";
import { GlassCard } from "@/components/ui/glass-card";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { PageHeader } from "@/components/dashboard/page-header";
export default function NewCompetitionPage() {
const router = useRouter();
const params = useParams();
const leagueId = params.leagueId as string;
const [loading, setLoading] = useState(false);
const [error, setError] = useState<string | null>(null);
return (
<div className="space-y-6">
<PageHeader title="New competition" description="Add a league season or cup" />
<GlassCard>
<form
className="space-y-4 max-w-md"
onSubmit={async (e) => {
e.preventDefault();
if (loading) return;
const fd = new FormData(e.currentTarget);
setLoading(true);
setError(null);
try {
const comp = (await api.leagues.createCompetition(leagueId, {
name: fd.get("name") as string,
tournament_mode: fd.get("tournament_mode") as "league" | "cup",
})) as { id: string };
router.push(`/leagues/${leagueId}/competitions/${comp.id}`);
} catch (err) {
setError(err instanceof Error ? err.message : "Failed");
} finally {
setLoading(false);
}
}}
>
<div>
<Label>Name</Label>
<Input name="name" required className="mt-1" />
</div>
<div>
<Label>Mode</Label>
<select
name="tournament_mode"
className="mt-1 flex h-10 w-full rounded-lg border border-white/15 bg-white/5 px-3 text-sm"
>
<option value="league">League</option>
<option value="cup">Cup</option>
</select>
</div>
{error && <p className="text-sm text-red-400">{error}</p>}
<Button type="submit" disabled={loading}>
Create competition
</Button>
</form>
</GlassCard>
</div>
);
}