fix(app): harden account and workflow state
This commit is contained in:
@@ -66,6 +66,7 @@ export function useViewResource<T>(
|
||||
const [error, setError] = useState<ViewResourceError | null>(null);
|
||||
const hasLoadedRef = useRef(hasLoaded);
|
||||
const loadRef = useRef(load);
|
||||
const requestSequence = useRef(0);
|
||||
|
||||
useEffect(() => {
|
||||
hasLoadedRef.current = hasLoaded;
|
||||
@@ -78,18 +79,22 @@ export function useViewResource<T>(
|
||||
const reload = useCallback(async () => {
|
||||
if (!enabled) return;
|
||||
|
||||
const requestId = ++requestSequence.current;
|
||||
const alreadyLoaded = hasLoadedRef.current;
|
||||
setLoading(!alreadyLoaded);
|
||||
setRefreshing(alreadyLoaded);
|
||||
try {
|
||||
const next = await loadRef.current();
|
||||
if (requestId !== requestSequence.current) return;
|
||||
setData(next);
|
||||
setError(null);
|
||||
setHasLoaded(true);
|
||||
} catch (err: any) {
|
||||
if (requestId !== requestSequence.current) return;
|
||||
setError(normalizeError(err, errorMessage));
|
||||
setHasLoaded(true);
|
||||
} finally {
|
||||
if (requestId !== requestSequence.current) return;
|
||||
setLoading(false);
|
||||
setRefreshing(false);
|
||||
}
|
||||
@@ -97,6 +102,7 @@ export function useViewResource<T>(
|
||||
|
||||
useEffect(() => {
|
||||
if (!enabled) {
|
||||
requestSequence.current += 1;
|
||||
setLoading(false);
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user