add pending actions

This commit is contained in:
m
2026-08-26 17:29:10 +02:00
parent 664e1dd290
commit f4024c8aae
7 changed files with 423 additions and 17 deletions
+37
View File
@@ -0,0 +1,37 @@
import { useState, useEffect, useCallback, useSyncExternalStore, useRef } from 'react';
import { actionQueue } from '../services/actionQueue';
import { useNetworkStatus } from './useNetworkStatus';
function subscribe(listener: () => void): () => void {
return actionQueue.subscribe(listener);
}
function getSnapshot(): number {
return actionQueue.getPendingCount();
}
export function usePendingActions() {
const pendingCount = useSyncExternalStore(subscribe, getSnapshot);
const { isOnline } = useNetworkStatus();
const wasOffline = useRef(!isOnline);
useEffect(() => {
if (isOnline && wasOffline.current && pendingCount > 0) {
actionQueue.processAll();
}
wasOffline.current = !isOnline;
}, [isOnline, pendingCount]);
useEffect(() => {
if (pendingCount > 0 && isOnline) {
actionQueue.scheduleRetry(5_000);
}
return () => actionQueue.cancelSchedule();
}, [pendingCount, isOnline]);
return {
pendingCount,
isProcessing: actionQueue.isProcessing(),
processAll: useCallback(() => actionQueue.processAll(), []),
};
}