import { useSyncExternalStore } from 'react'; import type { TasksRecord } from '../../core/queue'; import type { AnyStore, InferStoreTasks } from '../../core/store'; /** * Subscribe to queue task changes. * * Returns a record of all tasks keyed by request name. * Re-renders when any task is added, updated, or removed. * * @example * ```tsx * function TaskStatus() { * const tasks = useQueue(store); * const playTask = tasks.play; * * if (playTask?.status === 'pending') { * return Loading...; * } * * return Ready; * } * ``` */ export function useQueue(store: Store): TasksRecord> { return useSyncExternalStore( (cb) => store.queue.subscribe(cb), () => store.queue.tasks as TasksRecord>, () => store.queue.tasks as TasksRecord> ); } export namespace useQueue { export type Result = TasksRecord>; }