1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-21 03:18:23 +00:00

add image deletion button on table view image previewer (#7475)

* add image deletion button on table view image previewer

* optimize

* check permission before delete image

* optimize

---------

Co-authored-by: zhouwenxuan <aries@Mac.local>
This commit is contained in:
Aries
2025-02-20 16:25:51 +08:00
committed by GitHub
parent 27abc38e7e
commit 7a94d66511
5 changed files with 31 additions and 5 deletions

View File

@@ -859,13 +859,16 @@ class DirentGridView extends React.Component {
let direntPath = Utils.joinPath(path, dirent.name); let direntPath = Utils.joinPath(path, dirent.name);
let canModifyFile = false; let canModifyFile = false;
let canDeleteFile = false;
if (['rw', 'cloud-edit'].indexOf(userPerm) != -1) { if (['rw', 'cloud-edit'].indexOf(userPerm) != -1) {
canModifyFile = true; canModifyFile = true;
canDeleteFile = true;
} else { } else {
const { isCustomPermission, customPermission } = Utils.getUserPermission(userPerm); const { isCustomPermission, customPermission } = Utils.getUserPermission(userPerm);
if (isCustomPermission) { if (isCustomPermission) {
const { modify } = customPermission.permission; const { modify, delete: canDelete } = customPermission.permission;
canModifyFile = modify; canModifyFile = modify;
canDeleteFile = canDelete;
} }
} }
@@ -1044,7 +1047,7 @@ class DirentGridView extends React.Component {
closeImagePopup={this.closeImagePopup} closeImagePopup={this.closeImagePopup}
moveToPrevImage={this.moveToPrevImage} moveToPrevImage={this.moveToPrevImage}
moveToNextImage={this.moveToNextImage} moveToNextImage={this.moveToNextImage}
onDeleteImage={this.deleteImage} onDeleteImage={(canDeleteFile && this.deleteImage) ? this.deleteImage : null}
onRotateImage={this.rotateImage} onRotateImage={this.rotateImage}
enableRotate={canModifyFile} enableRotate={canModifyFile}
/> />

View File

@@ -764,13 +764,16 @@ class DirentListView extends React.Component {
const isDesktop = Utils.isDesktop(); const isDesktop = Utils.isDesktop();
let canModifyFile = false; let canModifyFile = false;
let canDeleteFile = false;
if (['rw', 'cloud-edit'].indexOf(userPerm) != -1) { if (['rw', 'cloud-edit'].indexOf(userPerm) != -1) {
canModifyFile = true; canModifyFile = true;
canDeleteFile = true;
} else { } else {
const { isCustomPermission, customPermission } = Utils.getUserPermission(userPerm); const { isCustomPermission, customPermission } = Utils.getUserPermission(userPerm);
if (isCustomPermission) { if (isCustomPermission) {
const { modify } = customPermission.permission; const { modify, delete: canDelete } = customPermission.permission;
canModifyFile = modify; canModifyFile = modify;
canDeleteFile = canDelete;
} }
} }
@@ -874,7 +877,7 @@ class DirentListView extends React.Component {
closeImagePopup={this.closeImagePopup} closeImagePopup={this.closeImagePopup}
moveToPrevImage={this.moveToPrevImage} moveToPrevImage={this.moveToPrevImage}
moveToNextImage={this.moveToNextImage} moveToNextImage={this.moveToNextImage}
onDeleteImage={this.deleteImage} onDeleteImage={(canDeleteFile && this.deleteImage) ? this.deleteImage : null}
onRotateImage={this.rotateImage} onRotateImage={this.rotateImage}
enableRotate={canModifyFile} enableRotate={canModifyFile}
/> />

View File

@@ -9,7 +9,7 @@ import { Utils } from '../../../utils/utils';
import { siteRoot, thumbnailSizeForOriginal, fileServerRoot, thumbnailDefaultSize } from '../../../utils/constants'; import { siteRoot, thumbnailSizeForOriginal, fileServerRoot, thumbnailDefaultSize } from '../../../utils/constants';
import { getFileNameFromRecord, getParentDirFromRecord, getRecordIdFromRecord } from '../../utils/cell'; import { getFileNameFromRecord, getParentDirFromRecord, getRecordIdFromRecord } from '../../utils/cell';
const ImagePreviewer = ({ record, table, repoID, repoInfo, closeImagePopup }) => { const ImagePreviewer = ({ record, table, repoID, repoInfo, closeImagePopup, deleteRecords }) => {
const [imageIndex, setImageIndex] = useState(0); const [imageIndex, setImageIndex] = useState(0);
const [imageItems, setImageItems] = useState([]); const [imageItems, setImageItems] = useState([]);
@@ -81,6 +81,22 @@ const ImagePreviewer = ({ record, table, repoID, repoInfo, closeImagePopup }) =>
} }
}; };
const deleteImage = () => {
const image = imageItems[imageIndex];
deleteRecords([image.id]);
const newImageItems = imageItems.filter(item => item.id !== image.id);
if (newImageItems.length === 0) {
setImageIndex(0);
closeImagePopup();
} else {
const newIndex = imageIndex >= newImageItems.length ? 0 : imageIndex;
setImageIndex(newIndex);
}
};
const canDelete = window.sfMetadataContext.checkCanDeleteRow();
return ( return (
<ModalPortal> <ModalPortal>
<ImageDialog <ImageDialog
@@ -90,6 +106,7 @@ const ImagePreviewer = ({ record, table, repoID, repoInfo, closeImagePopup }) =>
moveToPrevImage={moveToPrevImage} moveToPrevImage={moveToPrevImage}
moveToNextImage={moveToNextImage} moveToNextImage={moveToNextImage}
onRotateImage={rotateImage} onRotateImage={rotateImage}
onDeleteImage={canDelete ? deleteImage : null}
/> />
</ModalPortal> </ModalPortal>
); );
@@ -101,6 +118,7 @@ ImagePreviewer.propTypes = {
repoID: PropTypes.string, repoID: PropTypes.string,
repoInfo: PropTypes.object, repoInfo: PropTypes.object,
closeImagePopup: PropTypes.func, closeImagePopup: PropTypes.func,
deleteRecords: PropTypes.func,
}; };
export default ImagePreviewer; export default ImagePreviewer;

View File

@@ -1170,6 +1170,7 @@ class InteractionMasks extends React.Component {
modifyColumnData={this.props.modifyColumnData} modifyColumnData={this.props.modifyColumnData}
updateFileTags={this.props.updateFileTags} updateFileTags={this.props.updateFileTags}
editorPosition={editorPosition} editorPosition={editorPosition}
deleteRecords={this.props.deleteRecords}
{...{ {...{
...this.getSelectedDimensions(selectedPosition), ...this.getSelectedDimensions(selectedPosition),
...this.state.editorPosition ...this.state.editorPosition

View File

@@ -563,6 +563,7 @@ class RecordsBody extends Component {
modifyColumnData={this.props.modifyColumnData} modifyColumnData={this.props.modifyColumnData}
getTableCanvasContainerRect={this.props.getTableCanvasContainerRect} getTableCanvasContainerRect={this.props.getTableCanvasContainerRect}
updateFileTags={this.props.updateFileTags} updateFileTags={this.props.updateFileTags}
deleteRecords={this.props.deleteRecords}
/> />
<div className="sf-metadata-result-table" style={{ width: this.props.totalWidth + SEQUENCE_COLUMN_WIDTH }} ref={this.setResultRef}> <div className="sf-metadata-result-table" style={{ width: this.props.totalWidth + SEQUENCE_COLUMN_WIDTH }} ref={this.setResultRef}>
{this.renderRecords()} {this.renderRecords()}