import { type FormEvent, useState } from "react"; import { Button } from "@/components/ui/button"; type RequestState = "idle" | "working" | "sent" | "failed" | "missing-worker"; const LinkAmtAccount = function () { const [email, setEmail] = useState(""); const [state, setState] = useState("idle"); const [mockLink, setMockLink] = useState(null); const amtWorkerId = new URLSearchParams(window.location.search).get("workerId"); const submit = async (event: FormEvent) => { event.preventDefault(); if (!amtWorkerId) { setState("missing-worker"); return; } setState("working"); setMockLink(null); try { const response = await fetch("/auth/link-amt/request", { method: "POST", credentials: "include", headers: {"Content-Type": "application/json"}, body: JSON.stringify({ "email": email, "amt_worker_id": amtWorkerId, }), }); if (!response.ok) throw new Error("Account-link request failed"); const body = await response.json() as {magic_link?: string}; setMockLink(body.magic_link ?? null); setState("sent"); } catch { setState("failed"); } }; return (

Link your MTurk account

Enter the email address you want to use for James Billings.

setEmail(event.target.value)} placeholder="you@example.com" />
{state === "sent" &&

Check your email to finish linking your account.

} {state === "failed" &&

Unable to send the link. Please try again.

} {state === "missing-worker" &&

This page is missing your MTurk worker ID.

} {mockLink && (

Development link: continue

)}
); }; export default LinkAmtAccount;