saleor-dashboard/src/containers/BackgroundTasks/tasks.ts

44 lines
959 B
TypeScript
Raw Normal View History

2020-06-21 15:31:33 +00:00
import { QueuedTask, TaskData, TaskStatus } from "./types";
2020-06-19 10:42:29 +00:00
export async function handleTask(task: QueuedTask): Promise<TaskStatus> {
let status = TaskStatus.PENDING;
2020-06-19 10:42:29 +00:00
try {
status = await task.handle();
if (status !== TaskStatus.PENDING) {
task.onCompleted({
status
});
2020-06-21 15:31:33 +00:00
}
2020-06-19 10:42:29 +00:00
} catch (error) {
task.onError(error);
}
return status;
2020-06-19 10:42:29 +00:00
}
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
}
];
}