Skip to content

Commit

Permalink
nny hook useUserInfo
Browse files Browse the repository at this point in the history
  • Loading branch information
kenglxn committed Oct 5, 2023
1 parent ab3f468 commit 8c33083
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 42 deletions.
39 changes: 20 additions & 19 deletions src/App/OrganisasjonerOgTilgangerProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import {
DigiSyfoOrganisasjon,
hentRefusjonstatus,
hentSyfoVirksomheter,
hentUserInfo,
RefusjonStatus,
} from '../api/dnaApi';
import * as Record from '../utils/Record';
Expand All @@ -17,6 +16,7 @@ import * as Sentry from '@sentry/browser';
import { byggOrganisasjonstre } from './ByggOrganisasjonstre';
import { useEffectfulAsyncFunction } from './hooks/useValueFromEffect';
import { Map, Set } from 'immutable';
import { useUserInfo } from './useUserInfo';

type orgnr = string;

Expand Down Expand Up @@ -167,24 +167,6 @@ export const OrganisasjonerOgTilgangerProvider: FunctionComponent = (props) => {
tidMs,
});
},
hentUserInfo()
.then(({ organisasjoner, tilganger, altinnError }) => {
if (altinnError) {
setVisFeilmelding(true);
addAlert('TilgangerAltinn');
}
setAltinnorganisasjoner(organisasjoner);
setAltinntilganger(
Record.fromEntries(tilganger.map((it) => [it.id, Set(it.organisasjoner)]))
);
})
.catch((error) => {
Sentry.captureException(error);
setAltinntilganger(Record.map(altinntjeneste, () => Set()));
setAltinnorganisasjoner([]);
setVisFeilmelding(true);
addAlert('TilgangerAltinn');
}),
hentAltinnTilgangssøknader()
.then(setAltinnTilgangssøknader)
.catch((error) => {
Expand Down Expand Up @@ -219,6 +201,25 @@ export const OrganisasjonerOgTilgangerProvider: FunctionComponent = (props) => {
})
);
}, []);
const userInfo = useUserInfo();
useEffect(() => {
if (userInfo.altinnError) {
addAlert('TilgangerAltinn');
setVisFeilmelding(true);
}
}, [userInfo.altinnError]);
useEffect(() => {
setAltinnorganisasjoner(userInfo.organisasjoner);
}, [userInfo.organisasjoner]);
useEffect(() => {
if (userInfo.tilganger.length > 0) {
setAltinntilganger(
Record.fromEntries(userInfo.tilganger.map((it) => [it.id, Set(it.organisasjoner)]))
);
} else {
setAltinntilganger(Record.map(altinntjeneste, () => Set()));
}
}, [userInfo.tilganger]);

const beregnOrganisasjonerArgs = [
altinnorganisasjoner,
Expand Down
51 changes: 51 additions & 0 deletions src/App/useUserInfo.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import { z } from 'zod';
import useSWR from 'swr';
import * as Sentry from '@sentry/browser';
import { Organisasjon } from '../altinn/organisasjon';
import { AltinntjenesteId } from '../altinn/tjenester';

const UserInfoRespons = z.object({
altinnError: z.boolean(),
organisasjoner: z.array(Organisasjon),
tilganger: z.array(
z.object({
id: z.custom<AltinntjenesteId>(),
tjenestekode: z.string(),
tjenesteversjon: z.string(),
organisasjoner: z.array(z.string()),
})
),
});
const fallbackData = {
altinnError: false,
organisasjoner: [],
tilganger: [],
};
type UserInfo = z.infer<typeof UserInfoRespons>;
export const useUserInfo = (): UserInfo => {
const { data } = useSWR('/min-side-arbeidsgiver/api/userInfo/v1', fetcher, {
onErrorRetry: (error, key, config, revalidate, { retryCount }) => {
if ((error.status === 502 || error.status === 503) && retryCount <= 5) {
setTimeout(() => revalidate({ retryCount }), 500);
} else {
Sentry.captureMessage(
`hent userInfo fra min-side-arbeidsgiver feilet med ${
error.status !== undefined ? `${error.status} ${error.statusText}` : error
}`
);
}
},
fallbackData,
});

return data ?? fallbackData;
};

const fetcher = async (url: string) => {
const respons = await fetch(url);

if (respons.status === 401) return;
if (respons.status !== 200) throw respons;

return UserInfoRespons.parse(await respons.json());
};
23 changes: 0 additions & 23 deletions src/api/dnaApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,29 +54,6 @@ export const sjekkInnlogget = async (): Promise<boolean> => {
return ok;
};

const UserInfoRespons = z.object({
altinnError: z.boolean(),
organisasjoner: z.array(Organisasjon),
tilganger: z.array(
z.object({
id: z.custom<AltinntjenesteId>(),
tjenestekode: z.string(),
tjenesteversjon: z.string(),
organisasjoner: z.array(z.string()),
})
),
});
export type UserInfo = z.infer<typeof UserInfoRespons>;
export async function hentUserInfo(): Promise<UserInfo> {
const respons = await fetch('/min-side-arbeidsgiver/api/userInfo/v1');
if (respons.ok) {
return UserInfoRespons.parse(await respons.json());
} else {
throw new Error(
`Kall til '/min-side-arbeidsgiver/api/userInfo/v1' feilet med ${respons.status}:${respons.statusText}`
);
}
}
const storageUrl = `/min-side-arbeidsgiver/api/storage`;
export async function getStorage(key: string): Promise<StorageItemResponse> {
try {
Expand Down
5 changes: 5 additions & 0 deletions vite.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,10 @@ export default defineConfig({
'/min-side-arbeidsgiver/tiltaksgjennomforing-api': 'http://localhost:8080',
'/min-side-arbeidsgiver/presenterte-kandidater-api': 'http://localhost:8080',
},
headers: {
'Cache-Control': 'private, no-cache, no-store, must-revalidate',
Expires: '-1',
Pragma: 'no-cache',
},
},
});

0 comments on commit 8c33083

Please sign in to comment.