1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-08-27 03:01:26 +00:00

fix delete image failed when previewing in tag files view

This commit is contained in:
zhouwenxuan 2025-03-29 15:49:43 +08:00
parent beef890a47
commit a4835a9d7b
2 changed files with 16 additions and 8 deletions

View File

@ -14,7 +14,7 @@ import { getRowById } from '../../components/sf-table/utils/table';
import { getTagFilesLinks } from '../utils/cell'; import { getTagFilesLinks } from '../utils/cell';
import { PRIVATE_COLUMN_KEY } from '../constants'; import { PRIVATE_COLUMN_KEY } from '../constants';
import URLDecorator from '../../utils/url-decorator'; import URLDecorator from '../../utils/url-decorator';
import { fileServerRoot, useGoFileserver } from '../../utils/constants'; import { fileServerRoot, gettext, useGoFileserver } from '../../utils/constants';
import { TAG_FILES_DEFAULT_SORT, TAG_FILES_SORT } from '../constants/sort'; import { TAG_FILES_DEFAULT_SORT, TAG_FILES_SORT } from '../constants/sort';
// This hook provides content related to seahub interaction, such as whether to enable extended attributes, views data, etc. // This hook provides content related to seahub interaction, such as whether to enable extended attributes, views data, etc.
@ -64,8 +64,9 @@ export const TagViewProvider = ({
}); });
}, [repoID, copyFileCallback, updateSelectedFileIds]); }, [repoID, copyFileCallback, updateSelectedFileIds]);
const deleteTagFiles = useCallback(() => { const deleteTagFiles = useCallback((ids) => {
const files = selectedFileIds.map(id => getFileById(tagFiles, id)); const tagIds = ids?.length ? ids : selectedFileIds;
const files = tagIds.map(id => getFileById(tagFiles, id));
const paths = files.map(f => Utils.joinPath(f[TAG_FILE_KEY.PARENT_DIR], f[TAG_FILE_KEY.NAME])); const paths = files.map(f => Utils.joinPath(f[TAG_FILE_KEY.PARENT_DIR], f[TAG_FILE_KEY.NAME]));
const fileNames = files.map(f => f[TAG_FILE_KEY.NAME]); const fileNames = files.map(f => f[TAG_FILE_KEY.NAME]);
metadataAPI.batchDeleteFiles(repoID, paths).then(() => { metadataAPI.batchDeleteFiles(repoID, paths).then(() => {
@ -79,7 +80,7 @@ export const TagViewProvider = ({
const row = getRowById(tagsData, tagID); const row = getRowById(tagsData, tagID);
const oldTagFileLinks = getTagFilesLinks(row); const oldTagFileLinks = getTagFilesLinks(row);
if (Array.isArray(oldTagFileLinks) && oldTagFileLinks.length > 0) { if (Array.isArray(oldTagFileLinks) && oldTagFileLinks.length > 0) {
const newTagFileLinks = oldTagFileLinks.filter(link => !selectedFileIds.includes(link.row_id)); const newTagFileLinks = oldTagFileLinks.filter(link => !tagIds.includes(link.row_id));
const update = { [PRIVATE_COLUMN_KEY.TAG_FILE_LINKS]: newTagFileLinks }; const update = { [PRIVATE_COLUMN_KEY.TAG_FILE_LINKS]: newTagFileLinks };
idTagUpdates[tagID] = update; idTagUpdates[tagID] = update;
} }
@ -88,11 +89,17 @@ export const TagViewProvider = ({
setTagFiles(prevTagFiles => ({ setTagFiles(prevTagFiles => ({
...prevTagFiles, ...prevTagFiles,
rows: prevTagFiles.rows.filter(row => !selectedFileIds.includes(row[TAG_FILE_KEY.ID])), rows: prevTagFiles.rows.filter(row => !tagIds.includes(row[TAG_FILE_KEY.ID])),
})); }));
deleteFilesCallback && deleteFilesCallback(paths, fileNames); deleteFilesCallback && deleteFilesCallback(paths, fileNames);
updateSelectedFileIds([]); updateSelectedFileIds([]);
let msg = fileNames.length > 1
? gettext('Successfully deleted {name} and {n} other items')
: gettext('Successfully deleted {name}');
msg = msg.replace('{name}', fileNames[0])
.replace('{n}', fileNames.length - 1);
toaster.success(msg);
}); });
}, [repoID, tagsData, tagFiles, selectedFileIds, updateLocalTags, deleteFilesCallback, updateSelectedFileIds]); }, [repoID, tagsData, tagFiles, selectedFileIds, updateLocalTags, deleteFilesCallback, updateSelectedFileIds]);

View File

@ -44,6 +44,7 @@ const TagFiles = () => {
const currentImageRef = useRef(null); const currentImageRef = useRef(null);
const canDelete = useMemo(() => window.sfTagsDataContext && window.sfTagsDataContext.canModifyTag(), []);
const isSelectedAll = useMemo(() => { const isSelectedAll = useMemo(() => {
return selectedFileIds ? selectedFileIds.length === tagFiles.rows.length : false; return selectedFileIds ? selectedFileIds.length === tagFiles.rows.length : false;
}, [selectedFileIds, tagFiles]); }, [selectedFileIds, tagFiles]);
@ -133,8 +134,8 @@ const TagFiles = () => {
setImagePreviewerVisible(false); setImagePreviewerVisible(false);
}, []); }, []);
const handleDeleteTagFiles = useCallback(() => { const handleDeleteTagFiles = useCallback((ids) => {
deleteTagFiles(); deleteTagFiles(ids);
updateSelectedFileIds([]); updateSelectedFileIds([]);
}, [deleteTagFiles, updateSelectedFileIds]); }, [deleteTagFiles, updateSelectedFileIds]);
@ -376,7 +377,6 @@ const TagFiles = () => {
enableDirPrivateShare = true; enableDirPrivateShare = true;
} }
const isGroupOwnedRepo = repoInfo.owner_email.includes('@seafile_group'); const isGroupOwnedRepo = repoInfo.owner_email.includes('@seafile_group');
const canDelete = window.sfTagsDataContext && window.sfTagsDataContext.canModifyTag();
return ( return (
<> <>
<div className="table-container" onClick={onContainerClick}> <div className="table-container" onClick={onContainerClick}>
@ -413,6 +413,7 @@ const TagFiles = () => {
table={tagFiles} table={tagFiles}
closeImagePopup={closeImagePreviewer} closeImagePopup={closeImagePreviewer}
canDelete={canDelete} canDelete={canDelete}
deleteRecords={handleDeleteTagFiles}
/> />
)} )}
<ContextMenu <ContextMenu