Skip to content

Commit 798aba8

Browse files
IS-3067: Legg til forhandsvisning for aktivitetskrav i oversikten (#646)
1 parent 8a93489 commit 798aba8

File tree

13 files changed

+223
-172
lines changed

13 files changed

+223
-172
lines changed

public/mockServiceWorker.js

100644100755
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@ const INTEGRITY_CHECKSUM = 'f5825c521429caf22a4dd13b66e243af';
1212
const IS_MOCKED_RESPONSE = Symbol('isMockedResponse');
1313
const activeClientIds = new Set();
1414

15-
addEventListener('install', function () {
15+
addEventListener('install', function() {
1616
self.skipWaiting();
1717
});
1818

19-
addEventListener('activate', function (event) {
19+
addEventListener('activate', function(event) {
2020
event.waitUntil(self.clients.claim());
2121
});
2222

23-
addEventListener('message', async function (event) {
23+
addEventListener('message', async function(event) {
2424
const clientId = Reflect.get(event.source || {}, 'id');
2525

2626
if (!clientId || !self.clients) {
@@ -93,7 +93,7 @@ addEventListener('message', async function (event) {
9393
}
9494
});
9595

96-
addEventListener('fetch', function (event) {
96+
addEventListener('fetch', function(event) {
9797
// Bypass navigation requests.
9898
if (event.request.mode === 'navigate') {
9999
return;
@@ -231,7 +231,7 @@ async function getResponse(event, client, requestId) {
231231
}
232232
}
233233

234-
return fetch(requestClone, { headers })
234+
return fetch(requestClone, { headers });
235235
}
236236

237237
// Bypass mocking when the client is not active.
@@ -259,7 +259,7 @@ async function getResponse(event, client, requestId) {
259259
},
260260
},
261261
[serializedRequest.body],
262-
)
262+
);
263263

264264
switch (clientMessage.type) {
265265
case 'MOCK_RESPONSE': {
@@ -340,5 +340,5 @@ async function serializeRequest(request) {
340340
referrerPolicy: request.referrerPolicy,
341341
body: await request.arrayBuffer(),
342342
keepalive: request.keepalive,
343-
}
343+
};
344344
}

src/api/types/aktivitetskravDTO.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@ export interface AktivitetskravDTO {
88
vurderinger: AktivitetskravvurderingDTO[];
99
}
1010

11-
interface AktivitetskravvurderingDTO {
11+
export interface AktivitetskravvurderingDTO {
1212
status: AktivitetskravStatus;
1313
frist?: Date;
14+
beskrivelse?: string;
1415
varsel?: AktivitetskravVarselDTO;
1516
arsaker: AvventVurderingArsak[];
1617
}

src/mocks/data/personoversiktEnhetMock.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,8 @@ export const personoversiktEnhetMock: PersonOversiktStatusDTO[] = [
192192
{
193193
status: AktivitetskravStatus.AVVENT,
194194
frist: new Date('2022-12-10'),
195+
beskrivelse:
196+
'Dette er en grundig vurdering som venter på svar fra behandler. Etter dette må vi sjekke andre ting.',
195197
arsaker: [AvventVurderingArsak.ANNET],
196198
},
197199
],

src/sider/oversikt/OversiktContainer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export default function OversiktContainer(): ReactElement {
5454
<div className="flex flex-col mx-8">
5555
<NavigationBar />
5656
<NotificationBar />
57-
{personoversiktQuery.isInitialLoading ? (
57+
{personoversiktQuery.isLoading ? (
5858
<AppSpinner />
5959
) : (
6060
<Oversikt

src/sider/oversikt/sokeresultat/Sokeresultat.tsx

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,16 @@ import {
88
filterOnCompany,
99
filterOnFodselsnummerOrName,
1010
filterOnFrist,
11+
getSortedEventsFromSortingType,
1112
} from '@/utils/hendelseFilteringUtils';
1213
import { useFilters } from '@/context/filters/FilterContext';
13-
import OversiktTableContainer from '@/sider/oversikt/sokeresultat/oversikttable/OversiktTableContainer';
1414
import { TabType, useTabType } from '@/hooks/useTabType';
1515
import { filterUfordelteBrukere } from '@/sider/oversikt/filter/UfordelteBrukereFilter';
1616
import Toolbar from '@/sider/oversikt/sokeresultat/toolbar/Toolbar';
17+
import OversiktTable from '@/sider/oversikt/sokeresultat/oversikttable/OversiktTable';
18+
import { useSorting } from '@/hooks/useSorting';
19+
import { useVeiledereQuery } from '@/data/veiledereQueryHooks';
20+
import EmptyDrawer from '@/sider/oversikt/sokeresultat/oversikttable/EmptyDrawer';
1721

1822
interface Props {
1923
allEvents: Filterable<PersonregisterState>;
@@ -22,6 +26,8 @@ interface Props {
2226
export default function Sokeresultat({ allEvents }: Props) {
2327
const { filterState } = useFilters();
2428
const { selectedTab } = useTabType();
29+
const { sorting, setSorting } = useSorting();
30+
const veiledereQuery = useVeiledereQuery();
2531

2632
const [selectedPersoner, setSelectedPersoner] = useState<string[]>([]);
2733
const [startItem, setStartItem] = useState(0);
@@ -58,6 +64,16 @@ export default function Sokeresultat({ allEvents }: Props) {
5864
setEndItem(endItem);
5965
};
6066

67+
const sortedPersonregister = getSortedEventsFromSortingType(
68+
filteredEvents.value,
69+
veiledereQuery.data || [],
70+
sorting
71+
);
72+
const paginatedPersonregister = Object.fromEntries(
73+
Object.entries(sortedPersonregister).slice(startItem, endItem + 1)
74+
);
75+
const personListe = Object.entries(paginatedPersonregister);
76+
6177
return (
6278
<div className="flex-[3]">
6379
<Toolbar
@@ -69,13 +85,17 @@ export default function Sokeresultat({ allEvents }: Props) {
6985
setSelectedPersoner={setSelectedPersoner}
7086
/>
7187

72-
<OversiktTableContainer
73-
personregister={filteredEvents.value}
74-
startItem={startItem}
75-
endItem={endItem}
76-
selectedRows={selectedPersoner}
77-
setSelectedRows={setSelectedPersoner}
78-
/>
88+
{!personListe.length ? (
89+
<EmptyDrawer />
90+
) : (
91+
<OversiktTable
92+
sorting={sorting}
93+
setSorting={setSorting}
94+
personListe={personListe}
95+
selectedRows={selectedPersoner}
96+
setSelectedRows={setSelectedPersoner}
97+
/>
98+
)}
7999
</div>
80100
);
81101
}

src/sider/oversikt/sokeresultat/oversikttable/EmptyDrawer.tsx

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,18 @@ import { EmptyDrawerImage } from '../../../../../img/ImageComponents';
22
import React from 'react';
33
import { BodyShort } from '@navikt/ds-react';
44

5-
export const texts = {
5+
const texts = {
66
ingenHendelser: 'Vi finner ingen personer som har hendelser',
77
altText: 'Her var det ikke mye',
88
};
99

10-
export const EmptyDrawer = () => (
11-
<div className="mt-16 text-center">
12-
<img alt={texts.altText} src={EmptyDrawerImage} />
13-
<BodyShort size="large" className="mt-8">
14-
{texts.ingenHendelser}
15-
</BodyShort>
16-
</div>
17-
);
10+
export default function EmptyDrawer() {
11+
return (
12+
<div className="mt-16 text-center">
13+
<img alt={texts.altText} src={EmptyDrawerImage} />
14+
<BodyShort size="large" className="mt-8">
15+
{texts.ingenHendelser}
16+
</BodyShort>
17+
</div>
18+
);
19+
}

src/sider/oversikt/sokeresultat/oversikttable/OversiktTableContainer.tsx

Lines changed: 0 additions & 49 deletions
This file was deleted.
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import { BodyLong, BodyShort, Label, Modal } from '@navikt/ds-react';
2+
import { toReadableDate } from '@/utils/dateUtils';
3+
import React from 'react';
4+
import { AktivitetskravvurderingDTO } from '@/api/types/aktivitetskravDTO';
5+
import { avventVurderingArsakTexts } from '@/api/types/personoversiktTypes';
6+
7+
const texts = {
8+
header: 'Aktivitetskrav avvent vurdering',
9+
avventArsak: 'Årsak',
10+
frist: 'Frist',
11+
ingenArsakOppgitt: 'Ingen årsak oppgitt',
12+
};
13+
14+
interface Props {
15+
isOpen: boolean;
16+
setOpen: (open: boolean) => void;
17+
vurdering: AktivitetskravvurderingDTO;
18+
sykmeldtNavn: string;
19+
}
20+
21+
export default function AktivitetskravAvventModal({
22+
isOpen,
23+
setOpen,
24+
vurdering,
25+
sykmeldtNavn,
26+
}: Props) {
27+
const arsaker = vurdering?.arsaker.map(
28+
(arsak) => avventVurderingArsakTexts[arsak]
29+
);
30+
const frist = toReadableDate(vurdering?.frist ?? null);
31+
32+
function arsakerText() {
33+
if (!arsaker || arsaker.length === 0) {
34+
return texts.ingenArsakOppgitt;
35+
} else {
36+
return `${arsaker.join(', ')}`;
37+
}
38+
}
39+
40+
return (
41+
<Modal
42+
closeOnBackdropClick
43+
className="w-full max-w-[50rem]"
44+
open={isOpen}
45+
onClose={() => setOpen(false)}
46+
header={{
47+
label: sykmeldtNavn,
48+
heading: texts.header,
49+
}}
50+
>
51+
<Modal.Body>
52+
<Label size="small" as="p">
53+
{texts.avventArsak}
54+
</Label>
55+
<BodyShort className="mb-4">{arsakerText()}</BodyShort>
56+
<BodyLong className="mb-4 whitespace-pre-wrap">
57+
{vurdering?.beskrivelse}
58+
</BodyLong>
59+
<Label size="small" as="p">
60+
{texts.frist}
61+
</Label>
62+
<BodyShort>{frist}</BodyShort>
63+
</Modal.Body>
64+
</Modal>
65+
);
66+
}

0 commit comments

Comments
 (0)