import { RefreshCwIcon } from "lucide-react"; import React, { useState } from "react"; import { useNavigate } from "react-router"; import Container from "src/components/Container"; import PasswordInput from "src/components/password/PasswordInput"; import TwoColumnLayoutHeader from "src/components/TwoColumnLayoutHeader"; import { Button } from "src/components/ui/button"; import { LoadingButton } from "src/components/ui/custom/loading-button"; import { Label } from "src/components/ui/label"; import { UnlinkAlbyAccount } from "src/components/UnlinkAlbyAccount"; import { useInfo } from "src/hooks/useInfo"; import { handleRequestError } from "src/utils/handleRequestError"; import { openLink } from "src/utils/openLink"; import { request } from "src/utils/request"; // build the project for this to appear type AuthCodeFormProps = { url: string; }; function AuthCodeForm({ url }: AuthCodeFormProps) { const [authCode, setAuthCode] = useState(""); const navigate = useNavigate(); const { data: info, mutate: refetchInfo } = useInfo(); const [hasRequestedCode, setRequestedCode] = React.useState(false); const [isLoading, setLoading] = React.useState(false); async function requestAuthCode() { setRequestedCode((hasRequestedCode) => { if (!url) { return false; } if (!hasRequestedCode) { openLink(url); } return true; }); } async function onSubmit(e: React.FormEvent) { e.preventDefault(); setLoading(true); try { await request(`/api/alby/callback?code=${authCode}`, { headers: { "Content-Type": "application/json", }, }); await refetchInfo(); navigate("/"); } catch (error) { handleRequestError("Failed to connect", error); } setLoading(false); } return (
{!hasRequestedCode && ( <> )} {hasRequestedCode && ( <>
Submit
)} {info?.albyUserIdentifier && (

or

)}
); } export default AuthCodeForm;