fix: await params in Next.js 16 routes and pages for TypeScript compatibility
This commit is contained in:
@@ -12,7 +12,9 @@ interface PageProps {
|
||||
}
|
||||
|
||||
export default async function EditTournamentPage({ params }: PageProps) {
|
||||
const tournamentId = parseInt(params.id, 10)
|
||||
// Next.js 16 requires awaiting params
|
||||
const { id } = await params
|
||||
const tournamentId = parseInt(id, 10)
|
||||
|
||||
if (isNaN(tournamentId)) {
|
||||
notFound()
|
||||
|
||||
@@ -31,23 +31,41 @@ interface GameEntry {
|
||||
score2: number
|
||||
}
|
||||
|
||||
export default function TournamentEntryPage({ params }: { params: { id: string } }) {
|
||||
export default function TournamentEntryPage({ params }: { params: Promise<{ id: string }> }) {
|
||||
const router = useRouter()
|
||||
const [tournament, setTournament] = useState<Tournament | null>(null)
|
||||
const [tournamentId, setTournamentId] = useState<number | null>(null)
|
||||
const [gameText, setGameText] = useState("")
|
||||
const [parsedGames, setParsedGames] = useState<GameEntry[]>([])
|
||||
const [error, setError] = useState("")
|
||||
const [success, setSuccess] = useState("")
|
||||
const [isLoading, setIsLoading] = useState(false)
|
||||
|
||||
// Parse params and validate tournamentId
|
||||
useEffect(() => {
|
||||
loadTournament()
|
||||
async function parseParams() {
|
||||
const { id } = await params
|
||||
const parsedId = parseInt(id, 10)
|
||||
if (isNaN(parsedId)) {
|
||||
router.push('/admin/tournaments')
|
||||
} else {
|
||||
setTournamentId(parsedId)
|
||||
}
|
||||
}
|
||||
parseParams()
|
||||
}, [params, router])
|
||||
|
||||
// Load tournament when tournamentId is available
|
||||
useEffect(() => {
|
||||
if (tournamentId) {
|
||||
loadTournament()
|
||||
}
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [])
|
||||
}, [tournamentId])
|
||||
|
||||
const loadTournament = async () => {
|
||||
try {
|
||||
const response = await fetch(`/api/tournaments/${params.id}`)
|
||||
const response = await fetch(`/api/tournaments/${tournamentId}`)
|
||||
const data = await response.json()
|
||||
if (response.ok) {
|
||||
setTournament(data.tournament)
|
||||
@@ -103,7 +121,7 @@ export default function TournamentEntryPage({ params }: { params: { id: string }
|
||||
setIsLoading(true)
|
||||
|
||||
try {
|
||||
const response = await fetch(`/api/tournaments/${params.id}/games/bulk`, {
|
||||
const response = await fetch(`/api/tournaments/${tournamentId}/games/bulk`, {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
@@ -154,7 +172,7 @@ export default function TournamentEntryPage({ params }: { params: { id: string }
|
||||
<div className="px-4 py-6 sm:px-0">
|
||||
<div className="mb-6">
|
||||
<button
|
||||
onClick={() => router.push(`/admin/tournaments/${params.id}`)}
|
||||
onClick={() => router.push(`/admin/tournaments/${tournamentId}`)}
|
||||
className="text-green-600 hover:text-green-800 mb-4"
|
||||
>
|
||||
← Back to Tournament
|
||||
@@ -281,7 +299,7 @@ export default function TournamentEntryPage({ params }: { params: { id: string }
|
||||
|
||||
<div className="flex justify-end space-x-3">
|
||||
<button
|
||||
onClick={() => router.push(`/admin/tournaments/${params.id}`)}
|
||||
onClick={() => router.push(`/admin/tournaments/${tournamentId}`)}
|
||||
className="px-4 py-2 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-gray-700 bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-500"
|
||||
>
|
||||
Cancel
|
||||
|
||||
@@ -13,7 +13,9 @@ interface PageProps {
|
||||
}
|
||||
|
||||
export default async function TournamentDetailPage({ params }: PageProps) {
|
||||
const tournamentId = parseInt(params.id, 10)
|
||||
// Next.js 16 requires awaiting params
|
||||
const { id } = await params
|
||||
const tournamentId = parseInt(id, 10)
|
||||
|
||||
if (isNaN(tournamentId)) {
|
||||
notFound()
|
||||
|
||||
@@ -12,7 +12,9 @@ interface PageProps {
|
||||
}
|
||||
|
||||
export default async function TournamentResultsPage({ params }: PageProps) {
|
||||
const tournamentId = parseInt(params.id, 10)
|
||||
// Next.js 16 requires awaiting params
|
||||
const { id } = await params
|
||||
const tournamentId = parseInt(id, 10)
|
||||
|
||||
if (isNaN(tournamentId)) {
|
||||
notFound()
|
||||
|
||||
Reference in New Issue
Block a user