diff options
| author | soryu <soryu@soryu.co> | 2025-12-24 01:06:45 +0000 |
|---|---|---|
| committer | soryu <soryu@soryu.co> | 2025-12-24 01:06:45 +0000 |
| commit | d2bb569401a906e33517cafd0e35d960bd1381bd (patch) | |
| tree | 70777acbe88c6350d4d20d9f16c8f7f1630cf79c | |
| parent | cdfac7b3792d3813594daa36470465bd8c841ea9 (diff) | |
| download | soryu-d2bb569401a906e33517cafd0e35d960bd1381bd.tar.gz soryu-d2bb569401a906e33517cafd0e35d960bd1381bd.zip | |
Update overwrite mechanism to only require one prompt
| -rw-r--r-- | makima/frontend/src/routes/files.tsx | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/makima/frontend/src/routes/files.tsx b/makima/frontend/src/routes/files.tsx index 037df7e..2a75218 100644 --- a/makima/frontend/src/routes/files.tsx +++ b/makima/frontend/src/routes/files.tsx @@ -123,6 +123,16 @@ export default function FilesPage() { const newBody = [...fileDetail.body]; newBody[index] = element; + // If there's a pending remote update, fetch latest version first + let versionToUse = fileDetail.version; + if (remoteUpdate) { + const latest = await fetchFile(id); + if (latest) { + versionToUse = latest.version; + } + setRemoteUpdate(null); // Dismiss notification + } + // Update local state immediately for responsiveness setFileDetail({ ...fileDetail, @@ -132,14 +142,14 @@ export default function FilesPage() { // Save to backend with version for optimistic locking pendingUpdateRef.current = true; - const result = await editFile(id, { body: newBody, version: fileDetail.version }); + const result = await editFile(id, { body: newBody, version: versionToUse }); if (result) { setFileDetail(result); setHasLocalChanges(false); } } }, - [fileDetail, id, editFile] + [fileDetail, id, editFile, remoteUpdate, fetchFile] ); const handleBodyReorder = useCallback( @@ -150,6 +160,16 @@ export default function FilesPage() { const [movedElement] = newBody.splice(fromIndex, 1); newBody.splice(toIndex, 0, movedElement); + // If there's a pending remote update, fetch latest version first + let versionToUse = fileDetail.version; + if (remoteUpdate) { + const latest = await fetchFile(id); + if (latest) { + versionToUse = latest.version; + } + setRemoteUpdate(null); // Dismiss notification + } + // Update local state immediately for responsiveness setFileDetail({ ...fileDetail, @@ -159,14 +179,14 @@ export default function FilesPage() { // Save to backend with version for optimistic locking pendingUpdateRef.current = true; - const result = await editFile(id, { body: newBody, version: fileDetail.version }); + const result = await editFile(id, { body: newBody, version: versionToUse }); if (result) { setFileDetail(result); setHasLocalChanges(false); } } }, - [fileDetail, id, editFile] + [fileDetail, id, editFile, remoteUpdate, fetchFile] ); const handleCreate = useCallback(async () => { |
