summaryrefslogtreecommitdiff
path: root/src/renderer
diff options
context:
space:
mode:
Diffstat (limited to 'src/renderer')
-rw-r--r--src/renderer/src/App.tsx12
-rw-r--r--src/renderer/src/components/FileTree.tsx23
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 = () => {