Initial QOffice implementation
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
import { useEffect, useRef } from "react";
|
||||
|
||||
export type QOfficeCommand = "open" | "save" | "export-pdf" | "print";
|
||||
export type QOfficeCommandHandlers = Partial<Record<QOfficeCommand, () => void | Promise<void>>>;
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener("qoffice-command", onCommand);
|
||||
return () => window.removeEventListener("qoffice-command", onCommand);
|
||||
}, []);
|
||||
}
|
||||
Reference in New Issue
Block a user