Skip to content

Commit 65a1d48

Browse files
authored
Stop using session storage (navikt#668)
* Dont use session storage to avoid multiple ferdigstill forhandsvarsel calls Use query client local storage instead * Update tests
1 parent 109684e commit 65a1d48

File tree

4 files changed

+80
-45
lines changed

4 files changed

+80
-45
lines changed

src/components/Aktivitetskrav.cy.tsx

+17-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,17 @@
11
import React from "react";
2+
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
3+
24
import { Aktivitetskrav } from "./Aktivitetskrav";
35
import fixtures from "@/mocks/fixtures";
46

7+
const queryClient = new QueryClient();
8+
9+
const mountWithQueryClient = (component: React.ReactNode) => {
10+
cy.mount(
11+
<QueryClientProvider client={queryClient}>{component}</QueryClientProvider>,
12+
);
13+
};
14+
515
describe("<Aktivitetskrav />", () => {
616
it("Displays infoside for vurdering ny kandidat", () => {
717
cy.mount(<Aktivitetskrav aktivitetskrav={fixtures.nyKandidatFixture} />);
@@ -20,15 +30,17 @@ describe("<Aktivitetskrav />", () => {
2030
});
2131

2232
it("Displays forhaandsvarsel for vurdering forhandsvarsel with document", () => {
23-
cy.mount(
33+
mountWithQueryClient(
2434
<Aktivitetskrav aktivitetskrav={fixtures.forhaandsvarselFixture} />,
2535
);
2636

2737
cy.contains("Varsel om stans av sykepenger");
2838
});
2939

3040
it("Displays unntaksinfo with årsak for vurdering unntak", () => {
31-
cy.mount(<Aktivitetskrav aktivitetskrav={fixtures.unntakFixture} />);
41+
mountWithQueryClient(
42+
<Aktivitetskrav aktivitetskrav={fixtures.unntakFixture} />,
43+
);
3244

3345
cy.contains("NAV har vurdert aktivitetsplikten din");
3446
cy.contains(
@@ -37,7 +49,9 @@ describe("<Aktivitetskrav />", () => {
3749
});
3850

3951
it("Displays oppfyltinfo with årsak for vurdering oppfylt", () => {
40-
cy.mount(<Aktivitetskrav aktivitetskrav={fixtures.oppfyltFixture} />);
52+
mountWithQueryClient(
53+
<Aktivitetskrav aktivitetskrav={fixtures.oppfyltFixture} />,
54+
);
4155

4256
cy.contains("NAV har vurdert aktivitetsplikten din");
4357
cy.contains("NAV vurderer at du oppfyller aktivitetsplikten siden du er");
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
import { AktivitetskravBox } from "@/components/box/AktivitetskravBox";
1+
import React from "react";
22
import { Heading, LinkPanel } from "@navikt/ds-react";
33
import NextLink from "next/link";
4-
import React from "react";
4+
5+
import { AktivitetskravBox } from "@/components/box/AktivitetskravBox";
56
import { getShortDateFormat } from "@/utils/dateUtils";
67
import { AktivitetskravViewItem } from "@/components/view/viewUtils";
7-
import { ferdigstillVarsel } from "@/data/ferdigstillVarsel";
8+
import { useFerdigstillForhandsVarsel } from "@/data/ferdigstillVarsel";
89

910
const getHeaderText = (viewItem: AktivitetskravViewItem) => {
1011
switch (viewItem.type) {
@@ -25,34 +26,41 @@ interface Props {
2526

2627
export const HistoricEventsSummary = ({ historicVurderinger }: Props) => {
2728
if (historicVurderinger && historicVurderinger.length > 0) {
28-
if (historicVurderinger?.some((item) => item.type === "FORHANDSVARSEL")) {
29-
//Ferdigstiller tidligere forhåndsvarsel i tilfelle vurdering har endret seg før sykmeldt har lest forhåndsvarselet
30-
ferdigstillVarsel();
31-
}
32-
3329
return (
34-
<AktivitetskravBox>
35-
<Heading size="medium" level="2" spacing>
36-
Tidligere hendelser vedrørende din aktivitetsplikt
37-
</Heading>
30+
<>
31+
{/* Ferdigstiller tidligere forhåndsvarsel i tilfelle vurdering har endret seg før sykmeldt har lest forhåndsvarselet */}
32+
{historicVurderinger?.some(
33+
(item) => item.type === "FORHANDSVARSEL",
34+
) && <FerdigstillForhandsVarsel />}
35+
36+
<AktivitetskravBox>
37+
<Heading size="medium" level="2" spacing>
38+
Tidligere hendelser vedrørende din aktivitetsplikt
39+
</Heading>
3840

39-
{historicVurderinger.map((item, index) => {
40-
return (
41-
<LinkPanel
42-
href={`/${item.vurdering.internUuid}`}
43-
border
44-
as={NextLink}
45-
key={index}
46-
>
47-
<LinkPanel.Title>
48-
{getShortDateFormat(item.vurdering.createdAt)}:{" "}
49-
{getHeaderText(item)}
50-
</LinkPanel.Title>
51-
</LinkPanel>
52-
);
53-
})}
54-
</AktivitetskravBox>
41+
{historicVurderinger.map((item, index) => {
42+
return (
43+
<LinkPanel
44+
href={`/${item.vurdering.internUuid}`}
45+
border
46+
as={NextLink}
47+
key={index}
48+
>
49+
<LinkPanel.Title>
50+
{getShortDateFormat(item.vurdering.createdAt)}:{" "}
51+
{getHeaderText(item)}
52+
</LinkPanel.Title>
53+
</LinkPanel>
54+
);
55+
})}
56+
</AktivitetskravBox>
57+
</>
5558
);
5659
}
5760
return null;
5861
};
62+
63+
const FerdigstillForhandsVarsel = () => {
64+
useFerdigstillForhandsVarsel();
65+
return null;
66+
};

src/components/view/ForhandsvarselComponent.tsx

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
1+
import React from "react";
12
import { BodyLong, Heading, Link, Tag } from "@navikt/ds-react";
2-
import React, { useEffect } from "react";
3+
34
import { AktivitetskravVurdering } from "@/schema/aktivitetskravVurderingSchema";
45
import { getShortDateFormat } from "@/utils/dateUtils";
56
import { ComponentHeader } from "@/components/header/ComponentHeader";
6-
import { ferdigstillVarsel } from "@/data/ferdigstillVarsel";
7+
import { useFerdigstillForhandsVarsel } from "@/data/ferdigstillVarsel";
78

89
interface Props {
910
vurdering: AktivitetskravVurdering;
1011
}
1112

1213
export const ForhandsvarselComponent = ({ vurdering }: Props) => {
13-
useEffect(() => {
14-
ferdigstillVarsel();
15-
}, []);
14+
useFerdigstillForhandsVarsel();
1615

1716
if (vurdering.status !== "FORHANDSVARSEL") return null;
1817

src/data/ferdigstillVarsel.ts

+23-9
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,26 @@
1+
import { useEffect } from "react";
2+
import { useQuery, useQueryClient } from "@tanstack/react-query";
3+
14
import { post } from "@/data/api";
25

3-
export const ferdigstillVarsel = () => {
4-
const ferdigstiltSessionStorageKey = "ferdigstilt-forhandsvarsel";
5-
const hasAlreadyFerdigstilt = sessionStorage.getItem(
6-
ferdigstiltSessionStorageKey,
7-
);
8-
if (!hasAlreadyFerdigstilt) {
9-
post(`${process.env.NEXT_PUBLIC_ESYFO_PROXY_API_URL!}/les`);
10-
sessionStorage.setItem(ferdigstiltSessionStorageKey, "true");
11-
}
6+
const queryKeyHasFerdigstiltForhandsVarsel = ["hasFerdigstiltForhandsVarsel"];
7+
8+
export const useFerdigstillForhandsVarsel = () => {
9+
const queryClient = useQueryClient();
10+
11+
const { data: hasFerdigstiltForhandsvarsel } = useQuery({
12+
queryKey: queryKeyHasFerdigstiltForhandsVarsel,
13+
initialData: false,
14+
});
15+
16+
useEffect(() => {
17+
const ferdigstillForhandsvarselIfNotAlreadyDone = async () => {
18+
if (!hasFerdigstiltForhandsvarsel) {
19+
await post(`${process.env.NEXT_PUBLIC_ESYFO_PROXY_API_URL!}/les`);
20+
queryClient.setQueryData(queryKeyHasFerdigstiltForhandsVarsel, true);
21+
}
22+
};
23+
24+
ferdigstillForhandsvarselIfNotAlreadyDone();
25+
}, [hasFerdigstiltForhandsvarsel, queryClient]);
1226
};

0 commit comments

Comments
 (0)