Skip to content

Commit 80ce7d2

Browse files
authored
Fix issue where the first users cache is not populated (#366)
1 parent 06fdbd8 commit 80ce7d2

File tree

1 file changed

+26
-5
lines changed

1 file changed

+26
-5
lines changed

src/contexts/ApplicationProvider.tsx

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,14 @@ import FullScreenLoading from "@components/ui/FullScreenLoading";
33
import { useApiCall } from "@utils/api";
44
import { useIsMd } from "@utils/responsive";
55
import { getLatestNetbirdRelease } from "@utils/version";
6-
import React, { useContext, useEffect, useMemo, useRef, useState } from "react";
6+
import React, {
7+
useCallback,
8+
useContext,
9+
useEffect,
10+
useMemo,
11+
useRef,
12+
useState,
13+
} from "react";
714
import { useLocalStorage } from "@/hooks/useLocalStorage";
815
import { User } from "@/interfaces/User";
916
import type { NetbirdRelease } from "@/interfaces/Version";
@@ -32,13 +39,27 @@ export default function ApplicationProvider({ children }: Props) {
3239
const userRequest = useApiCall<User[]>("/users", true);
3340
const [show, setShow] = useState(false);
3441
const requestCalled = useRef(false);
42+
const maxTries = 3;
43+
44+
const populateCache = useCallback(
45+
async (tries = 0) => {
46+
if (tries >= maxTries) {
47+
setShow(true);
48+
return Promise.reject();
49+
}
50+
try {
51+
await userRequest.get().then(() => setShow(true));
52+
return Promise.resolve();
53+
} catch (e) {
54+
setTimeout(() => populateCache(tries + 1), 500);
55+
}
56+
},
57+
[userRequest, setShow],
58+
);
3559

3660
useEffect(() => {
3761
if (!requestCalled.current) {
38-
userRequest
39-
.get()
40-
.then(() => setShow(true))
41-
.catch(() => setShow(true));
62+
populateCache().then();
4263
requestCalled.current = true;
4364
}
4465
// eslint-disable-next-line react-hooks/exhaustive-deps

0 commit comments

Comments
 (0)