import React, { useCallback, useEffect, useRef, useState } from "react"; import { NextPage } from "next"; import { useRouter } from "next/router"; import styles from "../styles/Todo.module.css"; import { Hanko } from "@teamhanko/hanko-elements"; import { SessionExpiredModal } from "../components/SessionExpiredModal"; import HankoProfile from "../components/HankoProfile"; const api = process.env.NEXT_PUBLIC_HANKO_API!; const Profile: NextPage = () => { const router = useRouter(); const [hankoClient, setHankoClient] = useState(); const modalRef = useRef(null); const [error, setError] = useState(null); const logout = () => { hankoClient?.logout() .catch((e) => { setError(e); }); }; const redirectToTodos = () => { router.push("/todo").catch((e) => setError(e)); }; const redirectToLogin = useCallback(() => { router.push("/").catch(setError) }, [router]); useEffect(() => { if (!hankoClient) { return; } hankoClient.validateSession().then(({is_valid}) => { if (!is_valid) { redirectToLogin(); } }).catch(setError); }, [hankoClient, redirectToLogin]); useEffect(() => setHankoClient(new Hanko(api)), []); useEffect(() => hankoClient?.onUserLoggedOut(() => { redirectToLogin(); }), [hankoClient, redirectToLogin]); useEffect(() => hankoClient?.onSessionExpired(() => { modalRef.current?.showModal(); }), [hankoClient]); return ( <>

Profile

{error?.message}
); }; export default Profile;