Skip to content

Commit

Permalink
vis informasjon om foresatte innsynsrett (#579)
Browse files Browse the repository at this point in the history
* Gjort om til accordian på Om dialogen og lagt til innsynsrett info/under 18

* Lagt til Guide panel for under 18 brukere, men vises forsatt for alle brukere

* Lagt til sånn ar innsynsrett info på guidpanel når man lager ny dialog blir bare vist når ekstern bruker er under 18

* Hent innsynsrett kun når det er ekstern bruker

* korriger henting av innsynsrett

* endre hvordan man henter innsynsrett

* vis infomasjon om innsynsrett

* fiks url ril veilarbaktivitet

* Fisk url

* Fisk url igjen

* veileder kan se guidepanel

* text styling på guidpanel text

* rydd opp

* Name fíx

* prettier fix

---------

Co-authored-by: Mads Lee Giil <[email protected]>
  • Loading branch information
henriktheboss and madsleegiil authored Oct 4, 2024
1 parent 4fc4c2d commit 2542d46
Show file tree
Hide file tree
Showing 10 changed files with 145 additions and 58 deletions.
20 changes: 20 additions & 0 deletions src/api/useInnsynsrett.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { fetchData } from '../utils/Fetch';
import { createGenericStore } from '../utils/genericStore';
import { aktivitetBasePath } from './UseApiBasePath';

export const fetchInnsynsrett = (fnr: string | undefined) =>
fetchData<Innsynsrett>(`${aktivitetBasePath}/api/innsynsrett`, {
method: 'POST',
body: JSON.stringify({ fnr })
});

interface Innsynsrett {
foresatteHarInnsynsrett: boolean;
}

export const useInnsynsrettStore = createGenericStore(undefined as Innsynsrett | undefined, fetchInnsynsrett);

export const useInnsynsrett = () =>
useInnsynsrettStore((state) => {
return state.data?.foresatteHarInnsynsrett;
});
8 changes: 7 additions & 1 deletion src/mock/demo/DemoDashboard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ import {
harIngenDialoger,
harNyDialogEllerSendMeldingFeilerSkruddPa,
ingenOppfPerioder,
settLocalStorage
settLocalStorage,
erUnder18
} from './localstorage';

interface Props {
Expand Down Expand Up @@ -64,6 +65,11 @@ const brukerTilstandRadios = [
label: 'Ingen dialoger',
value: LocalStorageElement.INGEN_DIALOGER,
checked: harIngenDialoger()
},
{
label: 'Under 18',
value: LocalStorageElement.UNDER_18,
checked: erUnder18()
}
];

Expand Down
3 changes: 3 additions & 0 deletions src/mock/demo/localstorage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ export const LocalStorageElement = {
INGEN_OPPF_PERIODER: 'ingen_oppf_perioder',
KAN_IKKE_VARSLES: 'bruker_kan_ikke_varsles',
INGEN_DIALOGER: 'ingen_dialoger',
UNDER_18: 'under_18',
FAILURE_RATE: 'failure_rate',
DIALOG_FEILER: 'dialog_feiler',
AKTIVITET_FEILER: 'aktivitet_feiler',
Expand Down Expand Up @@ -44,6 +45,8 @@ export const erEksternBruker = () => hentFraLocalStorage(LocalStorageElement.BRU

export const harIngenDialoger = () => erSatt(LocalStorageElement.INGEN_DIALOGER);

export const erUnder18 = () => erSatt(LocalStorageElement.UNDER_18);

export const harDialogFeilerSkruddPa = () => erSatt(LocalStorageElement.DIALOG_FEILER);

export const harAktivitetFeilerSkruddPa = () => erSatt(LocalStorageElement.AKTIVITET_FEILER);
Expand Down
3 changes: 3 additions & 0 deletions src/mock/handlers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import aktiviteter from './Aktivitet';
import { arenaAktiviteter } from './Arena';
import bruker from './Bruker';
import {
erUnder18,
harAktivitetFeilerSkruddPa,
harArenaaktivitetFeilerSkruddPa,
harDialogFeilerSkruddPa,
Expand Down Expand Up @@ -125,6 +126,8 @@ export const handlers = [
return HttpResponse.json({ [FeatureToggle.USE_WEBSOCKETS]: false });
}),

http.post('/veilarbaktivitet/api/innsynsrett', jsonResponse({ foresatteHarInnsynsrett: erUnder18() })),

// veilarbveileder
http.get(`/veilarbveileder/api/veileder/me`, jsonResponse(veilederMe))
];
Expand Down
33 changes: 33 additions & 0 deletions src/moduler/om-dialogen/InnsynsrettAccordionItem.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { Accordion, BodyShort, Heading } from '@navikt/ds-react';
import React, { useState } from 'react';

export const InnsynsrettAccordionItem = () => {
const [open, setOpen] = useState(false);

function handleClick() {
setOpen(!open);
}

return (
<Accordion.Item>
<Accordion.Header onClick={handleClick}>
<Heading level="2" size="small">
Er du under 18 år?
</Heading>
</Accordion.Header>
<Accordion.Content>
<Heading level="3" size="xsmall" className="pt-4">
Er du under 18 år?
</Heading>
<BodyShort className="pb-4">
Når du er under 18 år så har dine foresatte rett til å be om å få se alt du skriver i NAV sine
tjenester. Derfor bør du ikke skrive noe her som du ikke vil at foresatte dine skal lese.
</BodyShort>
<BodyShort>
Når du blir 18 år vil de ikke kunne lese nye ting du skriver, men de kan fortsatt lese det du skrev
før du fylte 18 år.
</BodyShort>
</Accordion.Content>
</Accordion.Item>
);
};
56 changes: 56 additions & 0 deletions src/moduler/om-dialogen/RettigheterAccordionItem.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import { Accordion, BodyShort, Heading, Link } from '@navikt/ds-react';
import React, { useState } from 'react';

export function RettigheterAccordionItem() {
const [open, setOpen] = useState(false);

function handleClick() {
setOpen(!open);
}

return (
<Accordion.Item>
<Accordion.Header onClick={handleClick}>
<Heading level="2" size="small">
Rettigheter og personvern
</Heading>
</Accordion.Header>
<Accordion.Content>
<BodyShort>
Informasjon du gir i meldinger til veilederen din brukes til å vurdere behovet ditt for hjelp fra
NAV.
</BodyShort>
<Heading level="3" size="xsmall" className="pt-4">
Manuell oppfølging
</Heading>
<BodyShort className="pb-4">
NAV henter informasjon om deg fra Folkeregisteret og sjekker mot Kontakt- og reservasjonsregisteret.
</BodyShort>
<BodyShort>
Hvis du ikke ønsker å bruke den digitale dialogen, så kan du reservere deg mot digital kommunikasjon
med det offentlige hos Norge. no Hvis du reserverer deg mot digital kommunikasjon, vil NAV følge deg
opp manuelt.
</BodyShort>

<Heading level="3" size="xsmall" className="pt-4">
Deling og lagring
</Heading>
<BodyShort className="pb-4">
Opplysningene i dialogen og aktivitetsplanen blir ikke delt med andre offentlige etater, med mindre
de har rett til å hente slike opplysninger.
</BodyShort>
<BodyShort className="pb-4">
Opplysningene i dialogen og aktivitetsplanen blir lagret og oppbevart etter arkivloven. Meldinger i
dialogen kan ikke slettes når de først er opprettet.
</BodyShort>
<BodyShort>
Les mer om{' '}
<Link href="https://www.nav.no/no/NAV+og+samfunn/Om+NAV/personvern-i-arbeids-og-velferdsetaten">
hvordan NAV behandler personopplysninger
</Link>
.
</BodyShort>
</Accordion.Content>
</Accordion.Item>
);
}
4 changes: 3 additions & 1 deletion src/routing/loaders.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { useOppfolgingStore } from '../view/OppfolgingProvider';
import { useVeilederNavnStore } from '../api/useHentVeilederData';
import { useAktivitetStore, useTiltaksAktivitetStore } from '../view/AktivitetProvider';
import { RouteIds } from './routes';
import { useInnsynsrettStore } from '../api/useInnsynsrett';

export const initialPageLoader = (fnr: string | undefined) => async () => {
return defer({
Expand All @@ -15,7 +16,8 @@ export const initialPageLoader = (fnr: string | undefined) => async () => {
oppfolging: useOppfolgingStore.getState().fetch(fnr),
veilederNavn: fnr ? useVeilederNavnStore.getState().fetch(fnr) : Promise.resolve(null),
aktiviteter: useAktivitetStore.getState().fetch(fnr),
arenaAktiviteter: useTiltaksAktivitetStore.getState().fetch(fnr)
arenaAktiviteter: useTiltaksAktivitetStore.getState().fetch(fnr),
innsynsrett: useInnsynsrettStore.getState().fetch(fnr)
});
};

Expand Down
21 changes: 12 additions & 9 deletions src/view/dialog/NyDialogForm.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { zodResolver } from '@hookform/resolvers/zod';
import { Alert, Button, GuidePanel, TextField, Textarea } from '@navikt/ds-react';
import { Alert, Button, GuidePanel, TextField, Textarea, BodyShort } from '@navikt/ds-react';
import React, { FocusEventHandler, useEffect, useRef, useState } from 'react';
import { useForm } from 'react-hook-form';
import { useNavigate } from 'react-router';
Expand All @@ -16,6 +16,7 @@ import { useErVeileder, useFnrContext } from '../Provider';
import { useDialogStore } from '../dialogProvider/dialogStore';
import { useShallow } from 'zustand/react/shallow';
import useKansendeMelding from '../../utils/UseKanSendeMelding';
import { useInnsynsrett } from '../../api/useInnsynsrett';

interface Props {
defaultTema: string;
Expand All @@ -27,6 +28,7 @@ const NyDialogForm = (props: Props) => {
const { defaultTema, aktivitetId } = props;
const hentDialoger = useDialogStore((store) => store.hentDialoger);
const { nyDialog } = useDialogContext();
const innsynsrett = useInnsynsrett();
const navigate = useNavigate();
const { dialogRoute, baseRoute } = useRoutes();
const [noeFeilet, setNoeFeilet] = useState(false);
Expand Down Expand Up @@ -170,14 +172,15 @@ const NyDialogForm = (props: Props) => {
onSubmit={handleSubmit((data) => onSubmit(data))}
autoComplete="off"
>
{!erVeileder ? (
<>
<GuidePanel poster={!bigScreen}>
Her kan du skrive til din veileder om arbeid og oppfølging. Du vil få svar i løpet av noen
dager.
</GuidePanel>
</>
) : null}
<GuidePanel poster={!bigScreen}>
<BodyShort>
Her kan du skrive til din veileder om arbeid og oppfølging. Du vil få svar i løpet av noen
dager.
</BodyShort>
{innsynsrett && (
<BodyShort>Husk at dine foresatte kan be om å få lese det du skriver her.</BodyShort>
)}
</GuidePanel>
<TextField
label="Tema (obligatorisk)"
description="Skriv kort hva dialogen skal handle om"
Expand Down
2 changes: 1 addition & 1 deletion src/view/dialogliste/DialogListe.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { DialogPreviewListe } from './DialogPreview';
import HistoriskeDialogerOversikt from './HistoriskDialogListe';
import { useRootLoaderData } from '../../routing/loaders';
import { Loader } from '@navikt/ds-react';
import { isAfter, isBefore } from 'date-fns';
import { isAfter } from 'date-fns';

interface Res {
naaverende: DialogData[];
Expand Down
53 changes: 7 additions & 46 deletions src/view/info/InfoOmDialogSide.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import { BodyLong, BodyShort, ExpansionCard, Heading, Link } from '@navikt/ds-react';
import { Accordion, BodyLong, BodyShort, Heading, Link } from '@navikt/ds-react';
import classNames from 'classnames';
import React, { useLayoutEffect } from 'react';

import dialogStyle from '../dialog/Dialog.module.less';
import { InnsynsrettAccordionItem } from '../../moduler/om-dialogen/InnsynsrettAccordionItem';
import { RettigheterAccordionItem } from '../../moduler/om-dialogen/RettigheterAccordionItem';

export function InfoOmDialogSide() {
useLayoutEffect(() => {
Expand Down Expand Up @@ -79,51 +81,10 @@ export function InfoOmDialogSide() {
</li>
</ul>
</div>

<ExpansionCard aria-label="Rettigheter og personvern">
<ExpansionCard.Header>
<ExpansionCard.Title>Rettigheter og personvern</ExpansionCard.Title>
</ExpansionCard.Header>
<ExpansionCard.Content>
<div className={'mb-8'}>
<BodyLong>
Informasjon du gir i meldinger til veilederen din brukes til å vurdere behovet ditt for
hjelp fra NAV.
</BodyLong>
</div>
<div className={'mb-8'}>
<Heading size="medium" level="2">
Manuell oppfølging
</Heading>
<BodyLong>
NAV henter informasjon om deg fra Folkeregisteret og sjekker mot Kontakt- og
reservasjonsregisteret. Hvis du ikke ønsker å bruke den digitale dialogen, så kan du
reservere deg mot digital kommunikasjon med det offentlige hos{' '}
<Link href="https://www.norge.no/nb/digital-borger/reservasjon">Norge.no</Link>. Hvis du
reserverer deg mot digital kommunikasjon, vil NAV følge deg opp manuelt.
</BodyLong>
</div>

<Heading size="medium" level="2">
Deling og lagring
</Heading>
<BodyLong>
Opplysningene i dialogen og aktivitetsplanen blir ikke delt med andre offentlige etater, med
mindre de har rett til å hente slike opplysninger.
</BodyLong>
<BodyLong>
Opplysningene i dialogen og aktivitetsplanen blir lagret og oppbevart etter arkivloven.
Meldinger i dialogen kan ikke slettes når de først er opprettet.
</BodyLong>
<BodyLong>
Les mer om{' '}
<Link href="https://www.nav.no/no/nav-og-samfunn/om-nav/personvern-i-arbeids-og-velferdsetaten">
hvordan NAV behandler personopplysninger
</Link>
.
</BodyLong>
</ExpansionCard.Content>
</ExpansionCard>
<Accordion>
<InnsynsrettAccordionItem />
<RettigheterAccordionItem />
</Accordion>
</div>
</section>
);
Expand Down

0 comments on commit 2542d46

Please sign in to comment.