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:
@@ -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}
|
||||||
/>
|
/>
|
||||||
|
@@ -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}
|
||||||
/>
|
/>
|
||||||
|
@@ -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;
|
||||||
|
@@ -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
|
||||||
|
@@ -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()}
|
||||||
|
Reference in New Issue
Block a user