Web: Files: fixed files operations

This commit is contained in:
Nikita Gopienko 2020-10-08 23:58:21 +03:00
parent cedca7b3c3
commit 3385d0b2f5
5 changed files with 55 additions and 41 deletions

View File

@ -23,6 +23,7 @@ import {
getIsMyFolder,
getMyFolderId,
getShareFolderId,
getRootFolderId,
} from "../../../store/files/selectors";
const { isAdmin } = initStore.auth.selectors;
@ -147,15 +148,17 @@ class TreeFolders extends React.Component {
isAdmin,
myId,
commonId,
isCommon,
isMy,
isShare,
rootFolderId,
currentId,
} = this.props;
if (item.id === currentId) {
return false;
}
const isMy = rootFolderId === FolderType.USER;
const isCommon = rootFolderId === FolderType.COMMON;
const isShare = rootFolderId === FolderType.SHARE;
if (
item.rootFolderType === FolderType.SHARE &&
item.access === ShareAccessRights.FullAccess
@ -439,15 +442,13 @@ function mapStateToProps(state) {
return {
treeFolders: getTreeFolders(state),
filter: getFilter(state),
isMy: getIsMyFolder(state),
isCommon: getIsCommonFolder(state),
isShare: getIsShareFolder(state),
myId: getMyFolderId(state),
commonId: getShareFolderId(state),
currentId: getSelectedFolderId(state),
isAdmin: isAdmin(state),
dragging: getDragging(state),
updateTree: getUpdateTree(state),
rootFolderId: getRootFolderId(state),
};
}

View File

@ -7,7 +7,7 @@ import {
Button,
Text,
Checkbox,
Scrollbar
Scrollbar,
} from "asc-web-components";
import { withTranslation } from "react-i18next";
import { api, utils, toastr } from "asc-web-common";
@ -16,7 +16,7 @@ import {
setTreeFolders,
setProgressBarData,
clearProgressData,
setUpdateTree
setUpdateTree,
} from "../../../store/files/actions";
import {
loopTreeFolders,
@ -24,11 +24,12 @@ import {
getFilter,
getTreeFolders,
getIsLoading,
getIsRecycleBinFolder,
} from "../../../store/files/selectors";
import { createI18N } from "../../../helpers/i18n";
const i18n = createI18N({
page: "DeleteDialog",
localesPath: "dialogs/DeleteDialog"
localesPath: "dialogs/DeleteDialog",
});
const { files } = api;
@ -57,7 +58,7 @@ class DeleteDialogComponent extends React.Component {
this.state = { foldersList, filesList, selection };
}
loopDeleteOperation = id => {
loopDeleteOperation = (id) => {
const {
currentFolderId,
filter,
@ -68,28 +69,29 @@ class DeleteDialogComponent extends React.Component {
clearProgressData,
t,
fetchFiles,
setUpdateTree
setUpdateTree,
} = this.props;
const successMessage = "Files and folders was deleted";
api.files.getProgress()
.then(res => {
const currentProcess = res.find(x => x.id === id);
api.files
.getProgress()
.then((res) => {
const currentProcess = res.find((x) => x.id === id);
if (currentProcess && currentProcess.progress !== 100) {
setProgressBarData({
percent: currentProcess.progress,
label: t("DeleteOperation"),
visible: true
visible: true,
});
setTimeout(() => this.loopDeleteOperation(id), 1000);
} else {
setProgressBarData({
percent: 100,
label: t("DeleteOperation"),
visible: true
visible: true,
});
setTimeout(() => clearProgressData(), 5000);
fetchFiles(currentFolderId, filter).then(data => {
if (!isRecycleBinFolder) {
fetchFiles(currentFolderId, filter).then((data) => {
if (!isRecycleBinFolder && !!this.state.foldersList.length) {
const path = data.selectedFolder.pathParts.slice(0);
const newTreeFolders = treeFolders;
const folders = data.selectedFolder.folders;
@ -102,14 +104,20 @@ class DeleteDialogComponent extends React.Component {
});
}
})
.catch(err => {
.catch((err) => {
toastr.error(err);
clearProgressData();
});
};
onDelete = () => {
const { isRecycleBinFolder, onClose, t, setProgressBarData, clearProgressData } = this.props;
const {
isRecycleBinFolder,
onClose,
t,
setProgressBarData,
clearProgressData,
} = this.props;
const { selection } = this.state;
const deleteAfter = true; //Delete after finished
@ -133,23 +141,23 @@ class DeleteDialogComponent extends React.Component {
setProgressBarData({
visible: true,
label: t("DeleteOperation"),
percent: 0
percent: 0,
});
files
.removeFiles(folderIds, fileIds, deleteAfter, immediately)
.then(res => {
.then((res) => {
const id = res[0] && res[0].id ? res[0].id : null;
this.loopDeleteOperation(id);
})
.catch(err => {
.catch((err) => {
toastr.error(err);
clearProgressData();
});
}
};
onChange = event => {
onChange = (event) => {
const value = event.target.value.split("/");
const fileType = value[0];
const id = Number(value[1]);
@ -157,11 +165,11 @@ class DeleteDialogComponent extends React.Component {
const newSelection = this.state.selection;
if (fileType !== "undefined") {
const a = newSelection.find(x => x.id === id && x.fileExst);
const a = newSelection.find((x) => x.id === id && x.fileExst);
a.checked = !a.checked;
this.setState({ selection: newSelection });
} else {
const a = newSelection.find(x => x.id === id && !x.fileExst);
const a = newSelection.find((x) => x.id === id && !x.fileExst);
a.checked = !a.checked;
this.setState({ selection: newSelection });
}
@ -171,7 +179,7 @@ class DeleteDialogComponent extends React.Component {
const { onClose, visible, t, isLoading } = this.props;
const { filesList, foldersList, selection } = this.state;
const checkedSelections = selection.filter(x => x.checked === true);
const checkedSelections = selection.filter((x) => x.checked === true);
const questionMessage =
checkedSelections.length === 1
@ -263,20 +271,24 @@ class DeleteDialogComponent extends React.Component {
const ModalDialogContainerTranslated = withTranslation()(DeleteDialogComponent);
const DeleteDialog = props => (
const DeleteDialog = (props) => (
<ModalDialogContainerTranslated i18n={i18n} {...props} />
);
const mapStateToProps = state => {
const mapStateToProps = (state) => {
return {
currentFolderId: getSelectedFolderId(state),
filter: getFilter(state),
treeFolders: getTreeFolders(state),
isLoading: getIsLoading(state)
isLoading: getIsLoading(state),
isRecycleBinFolder: getIsRecycleBinFolder(state),
};
};
export default connect(
mapStateToProps,
{ setTreeFolders, setProgressBarData, clearProgressData, setUpdateTree, fetchFiles }
)(withRouter(DeleteDialog));
export default connect(mapStateToProps, {
setTreeFolders,
setProgressBarData,
clearProgressData,
setUpdateTree,
fetchFiles,
})(withRouter(DeleteDialog));

View File

@ -289,7 +289,7 @@ class SectionBodyContent extends React.Component {
filter,
treeFolders,
setTreeFolders,
currentFolderType,
isRecycleBin,
t,
setProgressBarData,
fetchFiles,
@ -312,7 +312,7 @@ class SectionBodyContent extends React.Component {
});
fetchFiles(folderId, filter)
.then((data) => {
if (currentFolderType !== "Trash" && isFolder) {
if (!isRecycleBin && isFolder) {
const path = data.selectedFolder.pathParts.slice(0);
const newTreeFolders = treeFolders;
const folders = data.selectedFolder.folders;
@ -1395,7 +1395,7 @@ class SectionBodyContent extends React.Component {
: `folder_${item.id}`;
value += draggable ? "_draggable" : "";
let classNameProp =
isFolder && item.access < 2 ? { className: " dropable" } : {};
isFolder && item.access < 2 && !isRecycleBin ? { className: " dropable" } : {};
if(item.draggable) classNameProp.className += " draggable";
@ -1454,7 +1454,7 @@ class SectionBodyContent extends React.Component {
const checkedProps = isEdit || item.id <= 0 ? {} : { checked };
const element = this.getItemIcon(item, isEdit || item.id <= 0);
let classNameProp =
isFolder && item.access < 2 ? { className: " dropable" } : { className: "" };
isFolder && item.access < 2 && !isRecycleBin ? { className: " dropable" } : { className: "" };
if(item.draggable) classNameProp.className += " draggable";

View File

@ -434,7 +434,8 @@ class PureHome extends React.Component {
progressData,
viewAs,
convertDialogVisible,
fileActionId
fileActionId,
isRecycleBin
} = this.props;
// const progressBarContent = (
@ -476,7 +477,7 @@ class PureHome extends React.Component {
<PageLayout
withBodyScroll
withBodyAutoFocus={!isMobile}
uploadFiles
uploadFiles={!isRecycleBin}
onDrop={this.onDrop}
setSelections={this.setSelections}
onMouseMove={this.onMouseMove}

View File

@ -302,7 +302,7 @@ export const loopTreeFolders = (
addTreeFolder(folders, newItems, foldersCount);
} else if (folders.length < foldersLength) {
removeTreeFolder(folders, newItems, foldersCount);
} else if (folders.length > 0 && newItems.folders.length > 0) {
} else if (folders.length > 0 && newItems.folders.length > 0 && currentFolder) {
renameTreeFolder(folders, newItems, currentFolder);
} else {
return;