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",
|
"@react-icons/all-files": "^4.1.0",
|
||||||
"@types/axios": "^0.14.0",
|
"@types/axios": "^0.14.0",
|
||||||
"@types/immutable": "^3.8.7",
|
"@types/immutable": "^3.8.7",
|
||||||
|
"@types/lodash": "^4.14.181",
|
||||||
"@types/react": "^16.8.13",
|
"@types/react": "^16.8.13",
|
||||||
"@types/react-copy-to-clipboard": "^4.2.6",
|
"@types/react-copy-to-clipboard": "^4.2.6",
|
||||||
"@types/react-dom": "^16.8.4",
|
"@types/react-dom": "^16.8.4",
|
||||||
|
@ -50,6 +51,7 @@
|
||||||
"css-loader": "^5.0.0",
|
"css-loader": "^5.0.0",
|
||||||
"filesize": "^6.1.0",
|
"filesize": "^6.1.0",
|
||||||
"immutable": "^4.0.0-rc.12",
|
"immutable": "^4.0.0-rc.12",
|
||||||
|
"lodash": "^4.17.21",
|
||||||
"object-hash": "^2.2.0",
|
"object-hash": "^2.2.0",
|
||||||
"react": "^16.8.6",
|
"react": "^16.8.6",
|
||||||
"react-copy-to-clipboard": "^5.0.1",
|
"react-copy-to-clipboard": "^5.0.1",
|
||||||
|
|
|
@ -36,13 +36,9 @@ export class QuickshareAPI {
|
||||||
return this.updater.props;
|
return this.updater.props;
|
||||||
};
|
};
|
||||||
|
|
||||||
delete = async (
|
deleteInArray = async(itemsToDel: Array<string>): Promise<string> => {
|
||||||
dir: string,
|
return await this.updater.deleteInArray(itemsToDel);
|
||||||
items: Array<MetadataResp>,
|
}
|
||||||
selectedItems: Array<string>
|
|
||||||
): Promise<string> => {
|
|
||||||
return await this.updater.delete2(dir, items, selectedItems);
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const api = new QuickshareAPI();
|
const api = new QuickshareAPI();
|
||||||
|
|
|
@ -226,27 +226,32 @@ export class FilesPanel extends React.Component<Props, State, {}> {
|
||||||
selectedItems: Map<string, boolean>(),
|
selectedItems: Map<string, boolean>(),
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
} else {
|
}
|
||||||
const filesToDel = this.state.selectedItems.keySeq().join(", ");
|
const filesToDel = this.state.selectedItems.keySeq().join(", ");
|
||||||
if (
|
if (
|
||||||
!Env().confirmMsg(
|
!Env().confirmMsg(
|
||||||
`${this.props.msg.pkg.get("op.confirm")} [${
|
`${this.props.msg.pkg.get("op.confirm")} [${
|
||||||
this.state.selectedItems.size
|
this.state.selectedItems.size
|
||||||
}]: ${filesToDel}`
|
}]: ${filesToDel}`
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.setLoading(true);
|
this.setLoading(true);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const deleteStatus = await updater().delete(
|
const cwd = this.props.filesInfo.dirPath.join("/");
|
||||||
this.props.filesInfo.dirPath,
|
const itemsToDel = this.props.filesInfo.items
|
||||||
this.props.filesInfo.items,
|
.filter((item) => {
|
||||||
this.state.selectedItems
|
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 !== "") {
|
if (deleteStatus !== "") {
|
||||||
Env().alertMsg(
|
Env().alertMsg(
|
||||||
getErrMsg(this.props.msg.pkg, "op.fail", deleteStatus.toString())
|
getErrMsg(this.props.msg.pkg, "op.fail", deleteStatus.toString())
|
||||||
|
@ -254,6 +259,16 @@ export class FilesPanel extends React.Component<Props, State, {}> {
|
||||||
return deleteStatus;
|
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();
|
const selfStatus = await updater().self();
|
||||||
if (selfStatus !== "") {
|
if (selfStatus !== "") {
|
||||||
Env().alertMsg(
|
Env().alertMsg(
|
||||||
|
@ -349,7 +364,9 @@ export class FilesPanel extends React.Component<Props, State, {}> {
|
||||||
|
|
||||||
const isSharingStatus = await updater().syncIsSharing(dirPath.join("/"));
|
const isSharingStatus = await updater().syncIsSharing(dirPath.join("/"));
|
||||||
if (isSharingStatus !== "") {
|
if (isSharingStatus !== "") {
|
||||||
Env().alertMsg(getErrMsg(this.props.msg.pkg, "op.fail", isSharingStatus));
|
Env().alertMsg(
|
||||||
|
getErrMsg(this.props.msg.pkg, "op.fail", isSharingStatus)
|
||||||
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import { List, Map, Set } from "immutable";
|
import { List, Map, Set } from "immutable";
|
||||||
|
import _ from "lodash";
|
||||||
|
|
||||||
import { ICoreState } from "./core_state";
|
import { ICoreState } from "./core_state";
|
||||||
import { getItemPath, sortRows, Row } from "../common/utils";
|
import { getItemPath, sortRows, Row } from "../common/utils";
|
||||||
|
@ -221,65 +222,32 @@ export class Updater {
|
||||||
return "";
|
return "";
|
||||||
};
|
};
|
||||||
|
|
||||||
delete2 = async (
|
deleteInArray = async (itemsToDel: Array<string>): Promise<string> => {
|
||||||
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);
|
|
||||||
});
|
|
||||||
|
|
||||||
const batchSize = 3;
|
const batchSize = 3;
|
||||||
let batch = List<string>();
|
const batches = _.chunk(itemsToDel, batchSize);
|
||||||
let fails = List<string>();
|
let fails = List<string>();
|
||||||
|
|
||||||
for (let i = 0; i < pathsToDel.size; i++) {
|
for (let i = 0; i < batches.length; i++) {
|
||||||
batch = batch.push(pathsToDel.get(i));
|
let promises = batches[i].map(
|
||||||
|
async (itemPath: string): Promise<Response<any>> => {
|
||||||
if (batch.size >= batchSize || i == pathsToDel.size - 1) {
|
|
||||||
let promises = batch.map(async (itemPath): Promise<Response<any>> => {
|
|
||||||
return this.filesClient.delete(itemPath);
|
return this.filesClient.delete(itemPath);
|
||||||
});
|
}
|
||||||
|
);
|
||||||
|
|
||||||
const resps = await Promise.all(promises.toSeq());
|
const resps = await Promise.all(promises);
|
||||||
resps.forEach((resp: Response<any>, i: number) => {
|
resps.forEach((resp: Response<any>, j: number) => {
|
||||||
if (resp.status !== 200) {
|
if (resp.status !== 200) {
|
||||||
fails = fails.push(batch.get(i));
|
fails = fails.push(batches[i][j]);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
batch = batch.clear();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fails.size > 0) {
|
if (fails.size > 0) {
|
||||||
Env().alertMsg(
|
return `${errServer}: ${this.props.msg.pkg.get(
|
||||||
`${this.props.msg.pkg.get("delete.fail")}: ${fails.join(",\n")}`
|
"delete.fail"
|
||||||
);
|
)}: ${fails.join(",\n")}`;
|
||||||
return errServer;
|
|
||||||
}
|
}
|
||||||
|
return "";
|
||||||
return this.setItems(dirParts);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
refreshFiles = async (): Promise<string> => {
|
refreshFiles = async (): Promise<string> => {
|
||||||
|
|
|
@ -1360,6 +1360,11 @@
|
||||||
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
|
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
|
||||||
integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
|
integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
|
||||||
|
|
||||||
|
"@types/lodash@^4.14.181":
|
||||||
|
version "4.14.181"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.181.tgz#d1d3740c379fda17ab175165ba04e2d03389385d"
|
||||||
|
integrity sha512-n3tyKthHJbkiWhDZs3DkhkCzt2MexYHXlX0td5iMplyfwketaOeKboEVBqzceH7juqvEg3q5oUoBFxSLu7zFag==
|
||||||
|
|
||||||
"@types/node@*":
|
"@types/node@*":
|
||||||
version "17.0.23"
|
version "17.0.23"
|
||||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.23.tgz#3b41a6e643589ac6442bdbd7a4a3ded62f33f7da"
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.23.tgz#3b41a6e643589ac6442bdbd7a4a3ded62f33f7da"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue