diff options
| author | soryu <soryu@soryu.co> | 2025-12-24 00:23:05 +0000 |
|---|---|---|
| committer | soryu <soryu@soryu.co> | 2025-12-24 00:23:05 +0000 |
| commit | cdfac7b3792d3813594daa36470465bd8c841ea9 (patch) | |
| tree | d2c42fff5683a7ba1eb2cfb1412e56396b0a6ffb /makima/frontend/src/routes | |
| parent | aa841b00ef05c2b89b5e8a136e80c94dfefa79fc (diff) | |
| download | soryu-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.tsx | 10 |
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"> |
