pinball-frontend/app/analysis/page.tsx (89 lines of code) (raw):

'use client' import { doc, getDoc, collection, onSnapshot, orderBy, query, limit } from "firebase/firestore"; import { gameAnalysesRef } from "../firebase"; import { useEffect, useState, Suspense } from "react"; import { useSearchParams } from 'next/navigation'; import QRCode from 'react-qr-code'; export default function GameAnalysis() { const searchParams = useSearchParams(); const [analysis, setAnalysis] = useState<any>(null); const [gameId, setGameId] = useState<string | null>(null); useEffect(() => { const fetchAnalysis = async () => { const gameIdParam = searchParams.get('gameId'); if (gameIdParam) { try { const analysisDocRef = doc(gameAnalysesRef, gameIdParam); const analysisDocSnap = await getDoc(analysisDocRef); if (analysisDocSnap.exists()) { const analysisData = analysisDocSnap.data(); setAnalysis(analysisData); const docId = analysisDocSnap.id; setGameId(docId); } else { console.log("No such document!"); } } catch (error) { console.error("Error fetching analysis:", error); } } else { const analysesQuery = query( gameAnalysesRef, orderBy('insertionTimestamp', 'desc'), limit(1) ); const unsubscribe = onSnapshot(analysesQuery, (querySnapshot) => { console.log("Query Snapshot:", querySnapshot); if (!querySnapshot.empty) { const latestAnalysis = querySnapshot.docs[0].data(); console.log("Latest Analysis:", latestAnalysis); const docId = querySnapshot.docs[0].id; setGameId(docId); setAnalysis(latestAnalysis); } else { console.log("No analysis documents found."); } }); return unsubscribe; } }; fetchAnalysis(); }, [searchParams]); if (!analysis) { return <div>Loading analysis...</div>; } // Extract the keys and values from the analysis object const analysisKeys = Object.keys(analysis); const analysisValues = Object.values(analysis); const fieldOrder = ['headline', 'grade', 'analysis', 'tips']; return ( <main className="flex min-h-screen flex-col justify-between overflow-x-hidden m-4"> <div className="w-full"> <h1 className="text-3xl font-bold mb-4">Game Analysis</h1> <table className="table-auto w-full"> <tbody> {fieldOrder.map((key) => ( <tr key={key} className="border-b border-gray-200"> <td className="px-4 py-2 font-bold">{key}</td> <td className="px-4 py-2"> {typeof analysis[key] === 'object' ? ( <pre className="text-xl whitespace-pre-wrap">{JSON.stringify(analysis[key], null, 2)}</pre> ) : ( analysis[key] )} </td> </tr> ))} </tbody> </table> <div className="mt-4"> <QRCode value={`https://pinball-frontend-404073014646.us-west3.run.app/analysis?gameId=${gameId}`} size={256} level="H" /> </div> </div> </main> ); }