"use client"; import { useState, useRef } from "react"; import Image from "next/image"; import Scanner from "@/components/Scanner"; import { useMutation, QueryClient, QueryClientProvider, } from "@tanstack/react-query"; type SessionResponse = { firstName: string; lastName: string; nnin: string; documentPhoto: string; age: number; phoneNumber: string; }; function SessionInfo({ session }: { session: SessionResponse }) { return (
Document {(session.firstName || session.lastName) && (
{[session.firstName, session.lastName].filter(Boolean).join(" ")}
)} {typeof session.age === "number" && (
{session.age} år
)}
); } async function lookupSession(sessionId: string) { const res = await fetch("/api/lookup", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ sessionId }), }); return res.json(); } function HomeInner() { const [session, setSession] = useState(null); const [scannedCodes, setScannedCodes] = useState>(new Set()); const pendingCodeRef = useRef(null); const mutation = useMutation({ mutationFn: lookupSession, onSuccess: (data, variables) => { console.log("Got lookup result:", data); if (data && typeof data.age === "number") { setSession(data); setScannedCodes((prev) => new Set(prev).add(variables)); } pendingCodeRef.current = null; }, onError: () => { pendingCodeRef.current = null; }, }); const handleScan = (decodedText: string) => { if (!decodedText.startsWith("VisLeg-")) { window.alert("Ugyldig QR-kode"); return; } if ( scannedCodes.has(decodedText) || mutation.isPending || pendingCodeRef.current === decodedText ) { // Already scanned or lookup in progress for this code return; } pendingCodeRef.current = decodedText; mutation.mutate(decodedText); }; return (
{session && }
); } // Provide react-query context const queryClient = new QueryClient(); export default function Home() { return ( ); }