import { useEffect, useRef } from "react"; export type QOfficeCommand = "open" | "save" | "export-pdf" | "print" | "undo" | "redo"; export type QOfficeCommandHandlers = Partial void | Promise>>; export function useQOfficeCommand(handlers: QOfficeCommandHandlers) { const handlersRef = useRef(handlers); useEffect(() => { handlersRef.current = handlers; }, [handlers]); useEffect(() => { function onCommand(event: WindowEventMap["qoffice-command"]) { const command = event.detail.command; const handler = handlersRef.current[command]; if (handler) { void handler(); return; } if (command === "undo" || command === "redo") { globalThis.document.execCommand?.(command); } } window.addEventListener("qoffice-command", onCommand); return () => window.removeEventListener("qoffice-command", onCommand); }, []); }