frontend: fix document deletion
ci / docker (backend, backend/Dockerfile, backend) (push) Successful in 16s
ci / docker (frontend, frontend/Dockerfile, frontend) (push) Successful in 33s

This commit is contained in:
2025-10-12 16:54:42 +02:00
parent 9cd69dc00c
commit 1cc230985f
+91
View File
@@ -4037,6 +4037,96 @@ const AppLayout = () => {
return map;
}, [documents, searchResults]);
const handleDocumentDelete = useCallback(
async (documentId) => {
if (!documentId) return;
if (!token) {
setStatusMessage('Log in to manage documents.', 'error');
return;
}
const doc = documentLookup.get(documentId) || documentDetails.get(documentId)?.document || null;
const label = doc?.title || doc?.original_name || 'this document';
const confirmed = window.confirm(`Delete "${label}"? This action cannot be undone.`);
if (!confirmed) {
return;
}
setLoading(true);
try {
await api.delete(`/documents/${documentId}`);
setDocuments((prev) => prev.filter((item) => item.id !== documentId));
setSearchResults((prev) => (prev ? prev.filter((item) => item.id !== documentId) : null));
setDocumentDetails((prev) => {
if (!prev.has(documentId)) {
return prev;
}
const next = new Map(prev);
next.delete(documentId);
documentDetailsRef.current = next;
return next;
});
setFolderContents((prev) => {
let changed = false;
const next = new Map();
prev.forEach((contents, key) => {
if (!contents?.documents) {
next.set(key, contents);
return;
}
const filteredDocs = contents.documents.filter((item) => item.id !== documentId);
if (filteredDocs.length !== contents.documents.length) {
changed = true;
next.set(key, { ...contents, documents: filteredDocs });
} else {
next.set(key, contents);
}
});
return changed ? next : prev;
});
previewCacheRef.current.delete(documentId);
if (selectedDocumentIds.includes(documentId)) {
const remaining = selectedDocumentIds.filter((id) => id !== documentId);
applySelection(remaining, { anchor: null, interactedIds: [documentId] });
}
if (previewDocumentId === documentId) {
closeDocumentPreview();
}
setStatusMessage('Document deleted.', 'success');
} catch (error) {
console.error(error);
const message = error.response?.data?.error || 'Failed to delete document.';
setStatusMessage(message, 'error');
} finally {
setLoading(false);
}
},
[
api,
token,
documentLookup,
documentDetails,
setStatusMessage,
setDocuments,
setSearchResults,
setDocumentDetails,
setFolderContents,
previewDocumentId,
closeDocumentPreview,
selectedDocumentIds,
applySelection,
],
);
const orderedSelectedDocuments = useMemo(() => {
const ordered = [];
const seen = new Set();
@@ -4235,6 +4325,7 @@ const AppLayout = () => {
onFolderDelete: handleFolderDelete,
onDocumentRowClick: handleDocumentRowClick,
onDocumentOpen: openDocumentPreview,
onDocumentDelete: handleDocumentDelete,
selectedDocumentIds,
focusedDocumentId,
draggingDocumentIds: draggedDocumentIds,