import React, { useEffect, useState } from "react"; import System from "../../../models/system"; import { AUTH_TOKEN } from "../../../utils/constants"; import paths from "../../../utils/paths"; import ModalWrapper from "@/components/ModalWrapper"; import { useModal } from "@/hooks/useModal"; import RecoveryCodeModal from "@/components/Modals/DisplayRecoveryCodeModal"; import { useTranslation } from "react-i18next"; export default function SingleUserAuth() { const { t } = useTranslation(); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [recoveryCodes, setRecoveryCodes] = useState([]); const [downloadComplete, setDownloadComplete] = useState(false); const [token, setToken] = useState(null); const [customAppName, setCustomAppName] = useState(null); const { isOpen: isRecoveryCodeModalOpen, openModal: openRecoveryCodeModal, closeModal: closeRecoveryCodeModal, } = useModal(); const handleLogin = async (e) => { setError(null); setLoading(true); e.preventDefault(); const data = {}; const form = new FormData(e.target); for (var [key, value] of form.entries()) data[key] = value; const { valid, token, message, recoveryCodes } = await System.requestToken(data); if (valid && !!token) { setToken(token); if (recoveryCodes) { setRecoveryCodes(recoveryCodes); openRecoveryCodeModal(); } else { window.localStorage.setItem(AUTH_TOKEN, token); window.location = paths.home(); } } else { setError(message); setLoading(false); } setLoading(false); }; const handleDownloadComplete = () => { setDownloadComplete(true); }; useEffect(() => { if (downloadComplete && token) { window.localStorage.setItem(AUTH_TOKEN, token); window.location = paths.home(); } }, [downloadComplete, token]); useEffect(() => { const fetchCustomAppName = async () => { const { appName } = await System.fetchCustomAppName(); setCustomAppName(appName || ""); setLoading(false); }; fetchCustomAppName(); }, []); return ( <>