Files
fotospiel-app/resources/js/guest/queue/hooks.ts
Codex Agent 5f75c7ca6a
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled
tests / ui (push) Has been cancelled
Add lightbox retries and queue removal
2026-02-05 17:42:44 +01:00

48 lines
1.3 KiB
TypeScript

import React from 'react';
import { enqueue, list, processQueue, clearDone, remove, type QueueItem } from './queue';
export function useUploadQueue() {
const [items, setItems] = React.useState<QueueItem[]>([]);
const [loading, setLoading] = React.useState(true);
const refresh = React.useCallback(async () => {
setLoading(true);
const all = await list();
setItems(all);
setLoading(false);
}, []);
const add = React.useCallback(async (it: Parameters<typeof enqueue>[0]) => {
await enqueue(it);
await refresh();
await processQueue();
}, [refresh]);
const retryAll = React.useCallback(async () => {
await processQueue();
await refresh();
}, [refresh]);
const clearFinished = React.useCallback(async () => {
await clearDone();
await refresh();
}, [refresh]);
const removeItem = React.useCallback(
async (id: number) => {
await remove(id);
await refresh();
},
[refresh]
);
React.useEffect(() => {
refresh();
const online = () => processQueue().then(refresh);
window.addEventListener('online', online);
return () => window.removeEventListener('online', online);
}, [refresh]);
return { items, loading, refresh, add, retryAll, clearFinished, remove: removeItem } as const;
}