From c1e5fb30c06a72ac31a73e97ba9eb6b75bb78a51 Mon Sep 17 00:00:00 2001 From: Ken Gullaksen Date: Thu, 5 Oct 2023 15:19:54 +0200 Subject: [PATCH] =?UTF-8?q?ung=C3=A5=20mangler=20tilgang=20ved=20=C3=A5=20?= =?UTF-8?q?ikke=20sette=20f=C3=B8r=20vi=20er=20ferdig=20lastet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit useSWR har ikke noen god måte å skille på at man retry og at man er ferdig så vidt jeg kan se. --- src/App/OrganisasjonerOgTilgangerProvider.tsx | 6 +++++- src/App/useUserInfo.ts | 20 +++++++++++-------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/App/OrganisasjonerOgTilgangerProvider.tsx b/src/App/OrganisasjonerOgTilgangerProvider.tsx index a8b655f8a..406c3b539 100644 --- a/src/App/OrganisasjonerOgTilgangerProvider.tsx +++ b/src/App/OrganisasjonerOgTilgangerProvider.tsx @@ -203,13 +203,17 @@ export const OrganisasjonerOgTilgangerProvider: FunctionComponent = (props) => { }, []); const userInfo = useUserInfo(); useEffect(() => { + if (!userInfo.loaded) { + // ikke set organisasjoner og tilganger før de er lastet + return; + } if (userInfo.altinnError) { addAlert('TilgangerAltinn'); setVisFeilmelding(true); } setAltinnorganisasjoner(userInfo.organisasjoner); setAltinntilganger(userInfo.tilganger); - }, [userInfo.altinnError, userInfo.organisasjoner, userInfo.tilganger]); + }, [JSON.stringify(userInfo)]); const beregnOrganisasjonerArgs = [ altinnorganisasjoner, diff --git a/src/App/useUserInfo.ts b/src/App/useUserInfo.ts index bdea4ed46..c035819b4 100644 --- a/src/App/useUserInfo.ts +++ b/src/App/useUserInfo.ts @@ -5,8 +5,10 @@ import { Organisasjon } from '../altinn/organisasjon'; import { altinntjeneste, AltinntjenesteId } from '../altinn/tjenester'; import * as Record from '../utils/Record'; import { Set } from 'immutable'; +import { useState } from 'react'; const UserInfoRespons = z.object({ + loaded: z.boolean(), altinnError: z.boolean(), organisasjoner: z.array(Organisasjon), tilganger: z @@ -22,13 +24,9 @@ const UserInfoRespons = z.object({ Record.fromEntries(tilganger.map((it) => [it.id, Set(it.organisasjoner)])) ), }); -const fallbackData = { - altinnError: false, - organisasjoner: [], - tilganger: Record.map(altinntjeneste, () => Set()), -}; type UserInfo = z.infer; export const useUserInfo = (): UserInfo => { + const [exhausted, setExhausted] = useState(false); const { data, error } = useSWR('/min-side-arbeidsgiver/api/userInfo/v1', fetcher, { onErrorRetry: (error, key, config, revalidate, { retryCount }) => { if ((error.status === 502 || error.status === 503) && retryCount <= 5) { @@ -39,12 +37,18 @@ export const useUserInfo = (): UserInfo => { error.status !== undefined ? `${error.status} ${error.statusText}` : error }` ); + setExhausted(true); } }, - fallbackData, }); - - return data ?? { ...fallbackData, altinnError: error !== undefined }; + return { + ...(data ?? { + organisasjoner: [], + tilganger: Record.map(altinntjeneste, () => Set()), + }), + altinnError: data?.altinnError ?? error !== undefined, + loaded: data?.loaded ?? exhausted, + }; }; const fetcher = async (url: string) => {