diff options
Diffstat (limited to 'src/renderer')
| -rw-r--r-- | src/renderer/src/App.tsx | 12 | ||||
| -rw-r--r-- | src/renderer/src/components/FileTree.tsx | 23 |
2 files changed, 30 insertions, 5 deletions
diff --git a/src/renderer/src/App.tsx b/src/renderer/src/App.tsx index f3f9f79..0f48a3c 100644 --- a/src/renderer/src/App.tsx +++ b/src/renderer/src/App.tsx @@ -309,6 +309,17 @@ export default function App() { setStatusMessage('Overleaf session expired — please sign in again') }) + // Main document changed (by us or a collaborator) — track it + const unsubRootDoc = window.api.onProjectRootDocUpdated?.((docId) => { + const store = useAppStore.getState() + store.setMainDocument(docId) + if (store.overleafProject) { + store.setOverleafProject({ ...store.overleafProject, rootDocId: docId }) + } + const name = store.docPathMap[docId]?.split('/').pop() + if (name) setStatusMessage(`Main document: ${name}`) + }) + // Keep the file tree in sync with Overleaf project-entity socket events. const unsubEntityCreated = window.api.onSyncEntityCreated((data) => { applyEntityCreated(data) @@ -427,6 +438,7 @@ export default function App() { unsubCursorDisconnected() unsubFileStatus?.() unsubAuthExpired?.() + unsubRootDoc?.() remoteCursors.clear() stopAutocompleteSync() } diff --git a/src/renderer/src/components/FileTree.tsx b/src/renderer/src/components/FileTree.tsx index 5486f20..f53ae2f 100644 --- a/src/renderer/src/components/FileTree.tsx +++ b/src/renderer/src/components/FileTree.tsx @@ -212,14 +212,27 @@ export default function FileTree() { // ── Project view actions (Overleaf entities) ── - const handleSetMainDoc = () => { + const handleSetMainDoc = async () => { if (!ctxMenu) return const node = ctxMenu.node - if (node.docId) { - useAppStore.getState().setMainDocument(node.docId) - useAppStore.getState().setStatusMessage(`Main document set to ${node.name}`) - } closeMenu() + if (!node.docId) return + const store = useAppStore.getState() + // Optimistic local update; the official settings endpoint persists it + // project-wide (and broadcasts rootDocUpdated to collaborators) + store.setMainDocument(node.docId) + const projectId = store.overleafProjectId + if (!projectId) return + const r = await window.api.overleafSetRootDoc(projectId, node.docId) + if (r.success) { + const st = useAppStore.getState() + if (st.overleafProject) { + st.setOverleafProject({ ...st.overleafProject, rootDocId: node.docId }) + } + st.setStatusMessage(`Main document set to ${node.name}`) + } else { + useAppStore.getState().setStatusMessage(`Failed to set main document (${r.message || 'error'})`) + } } const handleCopyPath = () => { |
