summaryrefslogtreecommitdiff
path: root/makima/frontend/src/routes
diff options
context:
space:
mode:
authorsoryu <soryu@soryu.co>2025-12-24 00:23:05 +0000
committersoryu <soryu@soryu.co>2025-12-24 00:23:05 +0000
commitcdfac7b3792d3813594daa36470465bd8c841ea9 (patch)
treed2c42fff5683a7ba1eb2cfb1412e56396b0a6ffb /makima/frontend/src/routes
parentaa841b00ef05c2b89b5e8a136e80c94dfefa79fc (diff)
downloadsoryu-cdfac7b3792d3813594daa36470465bd8c841ea9.tar.gz
soryu-cdfac7b3792d3813594daa36470465bd8c841ea9.zip
Add overwrite mechanism for conflicting writes of files
Diffstat (limited to 'makima/frontend/src/routes')
-rw-r--r--makima/frontend/src/routes/files.tsx10
1 files changed, 7 insertions, 3 deletions
diff --git a/makima/frontend/src/routes/files.tsx b/makima/frontend/src/routes/files.tsx
index 423baa1..037df7e 100644
--- a/makima/frontend/src/routes/files.tsx
+++ b/makima/frontend/src/routes/files.tsx
@@ -22,6 +22,7 @@ export default function FilesPage() {
const [creating, setCreating] = useState(false);
const [remoteUpdate, setRemoteUpdate] = useState<FileUpdateEvent | null>(null);
const [hasLocalChanges, setHasLocalChanges] = useState(false);
+ const [isActivelyEditing, setIsActivelyEditing] = useState(false);
const pendingUpdateRef = useRef(false);
// Load file detail when URL has an id
@@ -48,8 +49,8 @@ export default function FilesPage() {
return;
}
- // If no local changes, auto-refresh
- if (!hasLocalChanges) {
+ // If no local changes and not actively editing, auto-refresh
+ if (!hasLocalChanges && !isActivelyEditing) {
const detail = await fetchFile(event.fileId);
setFileDetail(detail);
} else {
@@ -57,7 +58,7 @@ export default function FilesPage() {
setRemoteUpdate(event);
}
},
- [hasLocalChanges, fetchFile]
+ [hasLocalChanges, isActivelyEditing, fetchFile]
);
// Subscribe to file updates
@@ -247,6 +248,9 @@ export default function FilesPage() {
onDelete={handleDelete}
onBodyElementUpdate={handleBodyElementUpdate}
onBodyReorder={handleBodyReorder}
+ onEditingChange={setIsActivelyEditing}
+ hasPendingRemoteUpdate={!!remoteUpdate}
+ onOverwrite={handleRemoteUpdateDismiss}
/>
</div>
<div className="shrink-0">