Files
ota-admin-portal/src/components/BulkActions/actions/Cancel.jsx
Tristan Timblin 858edca5f5 CEC-5431: increase concurrency (#487)
* increase concurrency

* fix unmounted component leak
2023-12-01 11:42:43 -08:00

55 lines
1.7 KiB
JavaScript

import { forwardRef, useImperativeHandle } from "react";
import { useStatusContext } from "../../Contexts/StatusContext";
import { useUserContext } from "../../Contexts/UserContext";
import TaskRunner from "../../../utils/taskRunner";
import updatesAPI from "../../../services/updatesAPI";
export default forwardRef(({
ids,
idCSV,
}, ref) => {
const { setMessage } = useStatusContext();
const { token: { idToken: { jwtToken: token } } } = useUserContext();
useImperativeHandle(ref, () => ({
async submit() {
return new Promise((resolve, reject) => {
const taskRunner = new TaskRunner(30, ids.length);
let errorCount = 0;
const task = (id, index) => {
const progressMessage = `${index + 1}/${ids.length}`;
return async () => updatesAPI.cancelCarUpdate(id, token)
.then((response) => {
if (response.error) {
errorCount += 1;
setMessage(`${progressMessage} ${response.error}: ${response.message}`);
} else {
setMessage(`${progressMessage} Canceled update ${id}`);
}
return response;
})
.catch((error) => reject(error));
}
ids.forEach((id, i) => {
taskRunner.push(task(id, i));
});
taskRunner.onComplete().then((responses) => {
const completeMessage = `${ids.length - errorCount}/${ids.length}`;
setMessage(`Successfully canceled ${completeMessage} updates.`);
resolve(responses);
});
});
},
}));
return (
<div>
<p>
You are canceling the following updates: {idCSV}.
</p>
</div>
);
});