import React, { useState, useEffect } from 'react'; import { useParams, Link } from 'react-router-dom'; import { useAuth } from '../AuthContext'; import api from '../api'; export default function ChallengeDetail() { const { id } = useParams(); const { user } = useAuth(); const [challenge, setChallenge] = useState(null); const [predictions, setPredictions] = useState([]); const [leaderboard, setLeaderboard] = useState([]); const [newPrediction, setNewPrediction] = useState(''); const [inviteQuery, setInviteQuery] = useState(''); const [searchResults, setSearchResults] = useState([]); const [showInvite, setShowInvite] = useState(false); const [loading, setLoading] = useState(true); useEffect(() => { loadChallenge(); loadPredictions(); loadLeaderboard(); }, [id]); const loadChallenge = async () => { try { const data = await api.getChallenge(id); setChallenge(data); } catch (err) { console.error('Failed to load challenge:', err); } finally { setLoading(false); } }; const loadPredictions = async () => { try { const data = await api.getPredictions(id); setPredictions(data.predictions); } catch (err) { console.error('Failed to load predictions:', err); } }; const loadLeaderboard = async () => { try { const data = await api.getChallengeLeaderboard(id); setLeaderboard(data.leaderboard); } catch (err) { console.error('Failed to load leaderboard:', err); } }; const handleCreatePrediction = async (e) => { e.preventDefault(); if (!newPrediction.trim()) return; try { await api.createPrediction({ challenge_id: id, content: newPrediction }); setNewPrediction(''); await loadPredictions(); } catch (err) { alert('Failed to create prediction: ' + err.message); } }; const handleValidate = async (predictionId, status) => { try { await api.validatePrediction(predictionId, status); await loadPredictions(); await loadLeaderboard(); } catch (err) { alert('Failed to validate: ' + err.message); } }; const handleSearchUsers = async (query) => { setInviteQuery(query); if (query.trim().length < 2) { setSearchResults([]); return; } try { const data = await api.searchUsers(query); setSearchResults(data.users); } catch (err) { console.error('Search failed:', err); } }; const handleInvite = async (userId) => { try { await api.inviteToChallenge(id, { user_ids: [userId] }); setInviteQuery(''); setSearchResults([]); alert('Invitation sent!'); } catch (err) { alert('Failed to send invite: ' + err.message); } }; if (loading) { return
Created by {challenge.challenge.creator_username}
No predictions yet. Be the first!
{pred.content}
No points yet
) : (