diff --git a/src/App.tsx b/src/App.tsx index e56e4fd..23daf8f 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,4 +1,5 @@ -import { useEffect, useMemo, useState } from "react"; +import { useEffect, useMemo, useRef, useState } from "react"; +import { listen } from "@tauri-apps/api/event"; import { open } from "@tauri-apps/plugin-dialog"; import { invoke } from "@tauri-apps/api/core"; import { getCurrentWebview } from "@tauri-apps/api/webview"; @@ -95,6 +96,8 @@ export default function App() { const [priorModalOpen, setPriorModalOpen] = useState(false); const [priorData, setPriorData] = useState(null); + const [settingsModalOpen, setSettingsModalOpen] = useState(false); + const menuActionRef = useRef<(action: string) => void>(() => undefined); const rows = useMemo(() => [...files, ...websites], [files, websites]); const markdownPreviewHtml = useMemo( @@ -642,14 +645,50 @@ export default function App() { } }; + useEffect(() => { + menuActionRef.current = (action: string) => { + switch (action) { + case "file-new": + onNewSession(); + break; + case "file-open": + void onOpenSession(); + break; + case "file-save": + void onSaveSession(); + break; + case "settings-open": + setSettingsModalOpen(true); + break; + } + }; + }); + + useEffect(() => { + let unlisten: (() => void) | undefined; + let disposed = false; + + listen("app-menu-action", (event) => { + menuActionRef.current(event.payload); + }) + .then((cleanup) => { + if (disposed) { + cleanup(); + } else { + unlisten = cleanup; + } + }) + .catch(() => undefined); + + return () => { + disposed = true; + if (unlisten) unlisten(); + }; + }, []); + return (
-
- - - -
{status}
@@ -800,32 +839,6 @@ export default function App() {
-
-
- - setOllamaHost(e.target.value)} /> -
-
- - -
-
- - setGitRemote(e.target.value)} placeholder="https://..." /> -
-
- - setSearxUrl(e.target.value)} /> -
-
- {sessionModalOpen && (
)} + {settingsModalOpen && ( +
{ + if (event.target === event.currentTarget) { + setSettingsModalOpen(false); + } + }} + > +
+
+

Settings

+ +
+ +
+ + setOllamaHost(e.target.value)} + /> + + + + + + setGitRemote(e.target.value)} + placeholder="https://..." + /> + + + setSearxUrl(e.target.value)} + /> +
+
+
+ )} + {priorModalOpen && priorData && (