/** @jsx h */ import { h } from "preact"; import { useEffect, useState } from "preact/hooks"; import { EditorMode } from "./Editor.tsx"; interface TopBarProps { allowMode: EditorMode; isLogined: boolean; } export default function TopBar(props: TopBarProps) { const [mode, setMode] = useState(props.allowMode); // Event listener const modeChangeListener = (e: CustomEvent) => { if ( e.detail && (props.allowMode === e.detail || props.allowMode === EditorMode.Both) ) { setMode(e.detail); } }; // Event dispatcher const modeChangeDispatcher = (mode: EditorMode) => { dispatchEvent(new CustomEvent("ModeChange", { detail: mode })); }; const doLogout = async () => { const resp = await fetch("/api/user/logout"); const respJson = await resp.json(); if (respJson.success) { location.href = "/login"; return true; } return false; }; const goHome = () => { location.href = "/"; }; // Init event listeners useEffect(() => { addEventListener("ModeChange", modeChangeListener); return () => { removeEventListener("ModeChange", modeChangeListener); }; }, []); return (