2020-06-21 15:31:33 +00:00
|
|
|
import { QueuedTask, TaskData, TaskStatus } from "./types";
|
2020-06-19 10:42:29 +00:00
|
|
|
|
2020-06-21 15:31:33 +00:00
|
|
|
export async function handleTask(task: QueuedTask): Promise<boolean> {
|
|
|
|
let ok = false;
|
2020-06-19 10:42:29 +00:00
|
|
|
try {
|
2020-06-21 15:31:33 +00:00
|
|
|
ok = await task.handle();
|
|
|
|
if (ok) {
|
|
|
|
task.onCompleted();
|
|
|
|
}
|
2020-06-19 10:42:29 +00:00
|
|
|
} catch (error) {
|
|
|
|
task.onError(error);
|
|
|
|
}
|
|
|
|
|
|
|
|
return ok;
|
|
|
|
}
|
|
|
|
|
|
|
|
export function handleError(error: Error) {
|
|
|
|
throw error;
|
|
|
|
}
|
|
|
|
|
|
|
|
export function queueCustom(
|
|
|
|
id: number,
|
|
|
|
tasks: React.MutableRefObject<QueuedTask[]>,
|
|
|
|
data: TaskData
|
|
|
|
) {
|
|
|
|
(["handle", "onCompleted"] as Array<keyof TaskData>)
|
|
|
|
.filter(field => !data[field])
|
|
|
|
.forEach(field => {
|
|
|
|
throw new Error(`${field} is required when creating custom task`);
|
|
|
|
});
|
|
|
|
|
|
|
|
tasks.current = [
|
|
|
|
...tasks.current,
|
|
|
|
{
|
|
|
|
handle: data.handle,
|
|
|
|
id,
|
|
|
|
onCompleted: data.onCompleted,
|
2020-06-21 15:31:33 +00:00
|
|
|
onError: data.onError || handleError,
|
|
|
|
status: TaskStatus.PENDING
|
2020-06-19 10:42:29 +00:00
|
|
|
}
|
|
|
|
];
|
|
|
|
}
|