Skip to content

Commit 74bcea7

Browse files
fix: wait for admin orgs to load before 404 (#271)
1 parent 6965104 commit 74bcea7

File tree

3 files changed

+8
-5
lines changed

3 files changed

+8
-5
lines changed

lib/context/user.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export interface UserContextValue {
1212
updateUser: (user: UpdateUserParam) => Promise<void>;
1313
updateOrg: (orgId: string, org: UpdateOrgParam) => Promise<void>;
1414
loggedIn?: boolean;
15+
orgsLoaded: boolean;
1516
}
1617

1718
export const UserContext = createContext<UserContextValue>({
@@ -22,6 +23,7 @@ export const UserContext = createContext<UserContextValue>({
2223
/* eslint-disable-next-line @typescript-eslint/no-unused-vars */
2324
updateOrg: async (orgId: string, org: UpdateOrgParam) => {},
2425
loggedIn: undefined,
26+
orgsLoaded: false,
2527
});
2628

2729
export const useUser = () => useContext<UserContextValue>(UserContext);

lib/hooks/page.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export interface PageData {
99
}
1010

1111
export default function usePage(name: string, { login, admin }: PageData = {}): void {
12-
const { loggedIn, orgs } = useUser();
12+
const { loggedIn, orgs, orgsLoaded } = useUser();
1313
const { query, asPath } = useRouter();
1414

1515
// Redirect to the login page if authentication is required but missing.
@@ -46,8 +46,8 @@ export default function usePage(name: string, { login, admin }: PageData = {}):
4646
}
4747
}, [admin]);
4848
useEffect(() => {
49-
if (admin && loggedIn === true && !orgs.some((o) => o.id === query.org)) {
49+
if (admin && loggedIn === true && orgsLoaded && !orgs.some((o) => o.id === query.org)) {
5050
void Router.replace('/404');
5151
}
52-
}, [admin, loggedIn, orgs, query.org]);
52+
}, [admin, loggedIn, orgs, query.org, orgsLoaded]);
5353
}

pages/_app.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,11 @@ export default function App({ Component, pageProps }: AppProps): JSX.Element {
8585
}, [track, user, loggedIn]);
8686

8787
// Consumers can update local app-wide org data (proxy to SWR's mutate FN).
88-
const { data: orgsData } = useSWR<OrgJSON[], APIError>(
88+
const { data: orgsData, error: orgsError } = useSWR<OrgJSON[], APIError>(
8989
'/api/account/orgs',
9090
fetcher
9191
);
92+
const orgsLoaded = useMemo(() => !!orgsData || !!orgsError, [orgsData, orgsError]);
9293
const orgs = useMemo(
9394
() => (orgsData ? orgsData.map((o) => Org.fromJSON(o)) : []),
9495
[orgsData]
@@ -145,7 +146,7 @@ export default function App({ Component, pageProps }: AppProps): JSX.Element {
145146
<ThemeContext.Provider value={{ dark, theme, setTheme }}>
146147
<SWRConfig value={{ fetcher }}>
147148
<UserContext.Provider
148-
value={{ user, orgs, updateUser, updateOrg, loggedIn }}
149+
value={{ user, orgs, updateUser, updateOrg, loggedIn, orgsLoaded }}
149150
>
150151
<NProgress />
151152
<div id='portal' />

0 commit comments

Comments
 (0)