import { Alert, AlertIcon, Button, Card, Container, Flex, FormControl, FormLabel, Heading, Link, Radio, RadioGroup, Spacer, Stack, Text, useToast, VStack, } from "@chakra-ui/react"; import { lazy, useState } from "react"; import { useLoaderData } from "@remix-run/react"; const DataRequestFormChunkPurchases = lazy( () => import("../../components/DataRequestFormChunkPurchases.js"), ); const DataRequestFormChunkTransfers = lazy( () => import("../../components/DataRequestFormChunkTransfers.js"), ); export async function loader({ context }: { context: RequestContext }) { const cookies = context.request.headers.get("cookie")?.split(/; */); const dtSession = cookies?.find((c) => c.startsWith("dt-auth=")); if (!cookies || !dtSession) throw Response.redirect("/data-request/auth", 303); const sessionId = dtSession.replace("dr-auth=", ""); const sessionData = await context.env.DATA.get( `data_request_session_${sessionId}`, ); if (!sessionData) throw Response.redirect("/data-request/auth", 303); return JSON.parse(sessionData) as { id: number; username: string }; } export function meta() { return [ { title: "Data Request - Car Crushers", }, ]; } export default function () { const sessionData = useLoaderData(); const [requestType, setRequestType] = useState("purchase"); const [files, setFiles] = useState(null); const [oldIsTerminated, setOldIsTerminated] = useState(false); const [processingState, setProcessingState] = useState(null); const [authUrl, setAuthUrl] = useState(""); const toast = useToast(); async function startRequest() { const body = new FormData(); body.append("type", requestType); if (files instanceof FileList) { for (const file of files) { body.append("file", file); } } const requestStartResponse = await fetch("/api/data-requests/start", { body, method: "POST", redirect: "manual", }); if (!requestStartResponse.ok) { let error = "An unknown error has occurred"; try { error = ((await requestStartResponse.json()) as { error: string }) .error; } catch {} toast({ description: error, status: "error", title: "Failed to create request", }); return; } const { url } = (await requestStartResponse.json()) as { url?: string }; if (url) { setAuthUrl(url); setProcessingState("auth"); } else { setProcessingState("complete"); } } switch (processingState) { case "auth": return ( Verify Old Account
In order to process your transfer request, you must sign in to your old Roblox account to verify account ownership. Remember to switch to the correct account at the prompt.
); case "complete": return (
Request Submitted
We have received your request and will begin processing it shortly.
); default: return ( Data Requests You are signed in to {sessionData.username}.{" "} { await fetch("/api/data-requests/session", { method: "DELETE", }); location.assign("/data-request/auth"); }} textDecor="underline" > Wrong account? Request Type Missing Purchase Transfer Save Data to New Account Reset Save Data {requestType === "purchase" ? ( ) : null} {requestType === "transfer" ? ( ) : null} ); } }