fix(state_updater): replace delete with deleteInArray
This commit is contained in:
parent
7a96cd2483
commit
26a2c7ea46
5 changed files with 62 additions and 74 deletions
|
@ -41,6 +41,7 @@
|
|||
"@react-icons/all-files": "^4.1.0",
|
||||
"@types/axios": "^0.14.0",
|
||||
"@types/immutable": "^3.8.7",
|
||||
"@types/lodash": "^4.14.181",
|
||||
"@types/react": "^16.8.13",
|
||||
"@types/react-copy-to-clipboard": "^4.2.6",
|
||||
"@types/react-dom": "^16.8.4",
|
||||
|
@ -50,6 +51,7 @@
|
|||
"css-loader": "^5.0.0",
|
||||
"filesize": "^6.1.0",
|
||||
"immutable": "^4.0.0-rc.12",
|
||||
"lodash": "^4.17.21",
|
||||
"object-hash": "^2.2.0",
|
||||
"react": "^16.8.6",
|
||||
"react-copy-to-clipboard": "^5.0.1",
|
||||
|
|
|
@ -36,13 +36,9 @@ export class QuickshareAPI {
|
|||
return this.updater.props;
|
||||
};
|
||||
|
||||
delete = async (
|
||||
dir: string,
|
||||
items: Array<MetadataResp>,
|
||||
selectedItems: Array<string>
|
||||
): Promise<string> => {
|
||||
return await this.updater.delete2(dir, items, selectedItems);
|
||||
};
|
||||
deleteInArray = async(itemsToDel: Array<string>): Promise<string> => {
|
||||
return await this.updater.deleteInArray(itemsToDel);
|
||||
}
|
||||
}
|
||||
|
||||
const api = new QuickshareAPI();
|
||||
|
|
|
@ -226,27 +226,32 @@ export class FilesPanel extends React.Component<Props, State, {}> {
|
|||
selectedItems: Map<string, boolean>(),
|
||||
});
|
||||
return;
|
||||
} else {
|
||||
const filesToDel = this.state.selectedItems.keySeq().join(", ");
|
||||
if (
|
||||
!Env().confirmMsg(
|
||||
`${this.props.msg.pkg.get("op.confirm")} [${
|
||||
this.state.selectedItems.size
|
||||
}]: ${filesToDel}`
|
||||
)
|
||||
) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
const filesToDel = this.state.selectedItems.keySeq().join(", ");
|
||||
if (
|
||||
!Env().confirmMsg(
|
||||
`${this.props.msg.pkg.get("op.confirm")} [${
|
||||
this.state.selectedItems.size
|
||||
}]: ${filesToDel}`
|
||||
)
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.setLoading(true);
|
||||
|
||||
try {
|
||||
const deleteStatus = await updater().delete(
|
||||
this.props.filesInfo.dirPath,
|
||||
this.props.filesInfo.items,
|
||||
this.state.selectedItems
|
||||
);
|
||||
const cwd = this.props.filesInfo.dirPath.join("/");
|
||||
const itemsToDel = this.props.filesInfo.items
|
||||
.filter((item) => {
|
||||
return this.state.selectedItems.has(item.name);
|
||||
})
|
||||
.map((selectedItem: MetadataResp): string => {
|
||||
return getItemPath(cwd, selectedItem.name);
|
||||
})
|
||||
.toArray();
|
||||
|
||||
const deleteStatus = await updater().deleteInArray(itemsToDel);
|
||||
if (deleteStatus !== "") {
|
||||
Env().alertMsg(
|
||||
getErrMsg(this.props.msg.pkg, "op.fail", deleteStatus.toString())
|
||||
|
@ -254,6 +259,16 @@ export class FilesPanel extends React.Component<Props, State, {}> {
|
|||
return deleteStatus;
|
||||
}
|
||||
|
||||
const refreshStatus = await updater().setItems(
|
||||
this.props.filesInfo.dirPath
|
||||
);
|
||||
if (refreshStatus !== "") {
|
||||
Env().alertMsg(
|
||||
getErrMsg(this.props.msg.pkg, "op.fail", refreshStatus.toString())
|
||||
);
|
||||
return refreshStatus;
|
||||
}
|
||||
|
||||
const selfStatus = await updater().self();
|
||||
if (selfStatus !== "") {
|
||||
Env().alertMsg(
|
||||
|
@ -349,7 +364,9 @@ export class FilesPanel extends React.Component<Props, State, {}> {
|
|||
|
||||
const isSharingStatus = await updater().syncIsSharing(dirPath.join("/"));
|
||||
if (isSharingStatus !== "") {
|
||||
Env().alertMsg(getErrMsg(this.props.msg.pkg, "op.fail", isSharingStatus));
|
||||
Env().alertMsg(
|
||||
getErrMsg(this.props.msg.pkg, "op.fail", isSharingStatus)
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import { List, Map, Set } from "immutable";
|
||||
import _ from "lodash";
|
||||
|
||||
import { ICoreState } from "./core_state";
|
||||
import { getItemPath, sortRows, Row } from "../common/utils";
|
||||
|
@ -221,65 +222,32 @@ export class Updater {
|
|||
return "";
|
||||
};
|
||||
|
||||
delete2 = async (
|
||||
dir: string,
|
||||
items: Array<MetadataResp>,
|
||||
selectedItems: Array<string>
|
||||
): Promise<string> => {
|
||||
const dirParts = List(dir.split("/")).filter((part) => part !== "");
|
||||
const itemsList = List(items);
|
||||
let selectedItemsMap = Map<string, boolean>();
|
||||
selectedItems.forEach((item) => {
|
||||
selectedItemsMap = selectedItemsMap.set(item, true);
|
||||
});
|
||||
|
||||
return this.delete(dirParts, itemsList, selectedItemsMap);
|
||||
};
|
||||
|
||||
delete = async (
|
||||
dirParts: List<string>,
|
||||
items: List<MetadataResp>,
|
||||
selectedItems: Map<string, boolean>
|
||||
): Promise<string> => {
|
||||
const pathsToDel = items
|
||||
.filter((item) => {
|
||||
return selectedItems.has(item.name);
|
||||
})
|
||||
.map((selectedItem: MetadataResp): string => {
|
||||
return getItemPath(dirParts.join("/"), selectedItem.name);
|
||||
});
|
||||
|
||||
deleteInArray = async (itemsToDel: Array<string>): Promise<string> => {
|
||||
const batchSize = 3;
|
||||
let batch = List<string>();
|
||||
const batches = _.chunk(itemsToDel, batchSize);
|
||||
let fails = List<string>();
|
||||
|
||||
for (let i = 0; i < pathsToDel.size; i++) {
|
||||
batch = batch.push(pathsToDel.get(i));
|
||||
|
||||
if (batch.size >= batchSize || i == pathsToDel.size - 1) {
|
||||
let promises = batch.map(async (itemPath): Promise<Response<any>> => {
|
||||
for (let i = 0; i < batches.length; i++) {
|
||||
let promises = batches[i].map(
|
||||
async (itemPath: string): Promise<Response<any>> => {
|
||||
return this.filesClient.delete(itemPath);
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
const resps = await Promise.all(promises.toSeq());
|
||||
resps.forEach((resp: Response<any>, i: number) => {
|
||||
if (resp.status !== 200) {
|
||||
fails = fails.push(batch.get(i));
|
||||
}
|
||||
});
|
||||
|
||||
batch = batch.clear();
|
||||
}
|
||||
const resps = await Promise.all(promises);
|
||||
resps.forEach((resp: Response<any>, j: number) => {
|
||||
if (resp.status !== 200) {
|
||||
fails = fails.push(batches[i][j]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (fails.size > 0) {
|
||||
Env().alertMsg(
|
||||
`${this.props.msg.pkg.get("delete.fail")}: ${fails.join(",\n")}`
|
||||
);
|
||||
return errServer;
|
||||
return `${errServer}: ${this.props.msg.pkg.get(
|
||||
"delete.fail"
|
||||
)}: ${fails.join(",\n")}`;
|
||||
}
|
||||
|
||||
return this.setItems(dirParts);
|
||||
return "";
|
||||
};
|
||||
|
||||
refreshFiles = async (): Promise<string> => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue