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>;
}