UNPKG

vue-concurrency

Version:

A library for encapsulating asynchronous operations and managing concurrency for Vue + Composition API

25 lines (20 loc) 706 B
import { Task } from "./Task"; import { reactive, computed } from "./utils/api"; export interface TaskState { isRunning: boolean; isIdle: boolean; } export type TaskGroup<U extends Record<string, Task<any, any>>> = TaskState & U; export default function useTaskGroup<U extends Record<string, Task<any, any>>>( taskMap: U ): TaskGroup<U> { const taskArray = Object.values(taskMap); const isRunning = computed(() => !!taskArray.find((task) => task.isRunning)); const taskGroup = reactive({ isRunning: isRunning, isIdle: computed(() => !isRunning.value), isError: computed(() => !!taskArray.find((task) => task.isError)), ...taskMap, }) return taskGroup as TaskGroup<U>; }