frontend: fix document deletion
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user