/** @jsx h */ import { h } from "preact"; import { useEffect, useState } from "preact/hooks"; interface TopBarProps { allowMode: "edit" | "read" | "both"; } export default function TopBar(props: TopBarProps) { const [mode, setMode] = useState(props.allowMode); const [isLogin, setIsLogin] = useState(false); // Event listener const modeChangeListener = (e: CustomEvent) => { if ( e.detail && (props.allowMode === e.detail || props.allowMode === "both") ) { setMode(e.detail); } }; // Event dispatche const modeChangeDispatcher = (mode: string) => { dispatchEvent(new CustomEvent("ModeChange", { detail: mode })); }; const checkUserLogin = async () => { const resp = await fetch("/api/user/login"); const respJson = await resp.json(); if (respJson.success) { setIsLogin(true); return true; } // Redirect to login page if not valid location.href = "/login"; return false; }; // Init event listeners useEffect(() => { checkUserLogin(); addEventListener("ModeChange", modeChangeListener); return () => { removeEventListener("ModeChange", modeChangeListener); }; }, []); return (
{isLogin ? (
) : null}
); }