import { useEffect, useRef, useState } from "react"; import { PAGE_TYPES } from "../model/book"; import { Icon } from "./Icon"; interface AddPageMenuProps { onAdd: (group: "front" | "back", title: string) => void; } const GROUPS: { key: "front" | "back"; label: string }[] = [ { key: "front", label: "Front matter" }, { key: "back", label: "Back matter" }, ]; export function AddPageMenu({ onAdd }: AddPageMenuProps) { const [open, setOpen] = useState(false); const [coords, setCoords] = useState({ top: 0, left: 0 }); const btnRef = useRef(null); const toggle = () => { if (!open && btnRef.current) { const r = btnRef.current.getBoundingClientRect(); setCoords({ top: r.bottom + 4, left: r.left }); } setOpen((v) => !v); }; useEffect(() => { if (!open) return; const close = () => setOpen(false); document.addEventListener("mousedown", close); document.addEventListener("scroll", close, true); window.addEventListener("resize", close); return () => { document.removeEventListener("mousedown", close); document.removeEventListener("scroll", close, true); window.removeEventListener("resize", close); }; }, [open]); const pick = (group: "front" | "back", label: string) => { setOpen(false); onAdd(group, label); }; return ( <> {open && (
e.stopPropagation()} > {GROUPS.map((g) => (
{g.label}
{PAGE_TYPES.filter((t) => t.group === g.key).map((t) => ( ))}
))}
)} ); }