From 49bf040bd7101008f4582e789cebbf675fde957a Mon Sep 17 00:00:00 2001 From: Peter Brottveit Bock Date: Tue, 19 Sep 2023 08:55:18 +0200 Subject: [PATCH 1/3] Fjern integrasjon mot Tiltaksbrev or fra Altinn Innboks --- .../BrevFraAltinnContainer.css | 29 ----- .../BrevFraAltinnContainer.tsx | 100 +++-------------- .../AltinnMeldingsboks/Innboksikon.tsx | 25 ----- src/App/OrganisasjonDetaljerProvider.tsx | 6 - src/App/OrganisasjonerOgTilgangerProvider.tsx | 21 ---- src/App/useAltinnMeldingsboks.ts | 68 ------------ src/api/altinnApi.ts | 104 ------------------ src/lenker.ts | 33 +++--- 8 files changed, 32 insertions(+), 354 deletions(-) delete mode 100644 src/App/Hovedside/AltinnMeldingsboks/BrevFraAltinnContainer.css delete mode 100644 src/App/Hovedside/AltinnMeldingsboks/Innboksikon.tsx delete mode 100644 src/App/useAltinnMeldingsboks.ts delete mode 100644 src/api/altinnApi.ts diff --git a/src/App/Hovedside/AltinnMeldingsboks/BrevFraAltinnContainer.css b/src/App/Hovedside/AltinnMeldingsboks/BrevFraAltinnContainer.css deleted file mode 100644 index c58d9b654..000000000 --- a/src/App/Hovedside/AltinnMeldingsboks/BrevFraAltinnContainer.css +++ /dev/null @@ -1,29 +0,0 @@ -.tilskuddsbrev .ekspanderbartPanel__hode { - padding: 1.5rem 1rem 1rem; -} -.tilskuddsbrev__tittel { - display: flex; - align-items: center; -} -.tilskuddsbrev__inboxikon { - width: 3rem; -} -.tilskuddsbrev__liste { - padding: 0; -} -.tilskuddsbrev__liste-element { - display: flex; - flex-direction: column; - margin-bottom: 0.5rem; -} -@media (min-width: 992px) { - .tilskuddsbrev__liste-element { - flex-direction: row; - } -} -.tilskuddsbrev__dato { - width: 10rem; -} -.tilskuddsbrev__ulest-lenke { - font-weight: bold; -} diff --git a/src/App/Hovedside/AltinnMeldingsboks/BrevFraAltinnContainer.tsx b/src/App/Hovedside/AltinnMeldingsboks/BrevFraAltinnContainer.tsx index 8ee4416a3..a4e7949f1 100644 --- a/src/App/Hovedside/AltinnMeldingsboks/BrevFraAltinnContainer.tsx +++ b/src/App/Hovedside/AltinnMeldingsboks/BrevFraAltinnContainer.tsx @@ -1,90 +1,22 @@ -import React, {useContext} from 'react'; -import {Ekspanderbartpanel} from '../../../GeneriskeElementer/Ekspanderbartpanel'; -import {OrganisasjonsDetaljerContext} from '../../OrganisasjonDetaljerProvider'; -import {AltinnBrev, Status} from '../../../api/altinnApi'; -import NyFaneLenke from '../../../GeneriskeElementer/NyFaneLenke'; -import AntallUlest from '../../../GeneriskeElementer/AntallUlest'; -import Innboksikon from './Innboksikon'; -import {loggNavigasjon} from '../../../utils/funksjonerForAmplitudeLogging'; -import './BrevFraAltinnContainer.css'; -import {BodyShort} from "@navikt/ds-react"; - -const loggNavigering = (href: string, lenketekst: string) => () => { - if (href === '') { - loggNavigasjon(undefined, lenketekst); +import React, { useContext } from 'react'; +import { OrganisasjonsDetaljerContext } from '../../OrganisasjonDetaljerProvider'; +import { Alert, Heading, BodyLong } from '@navikt/ds-react'; + +const BrevFraAltinnContainer: React.FunctionComponent = (_) => { + const { valgtOrganisasjon } = useContext(OrganisasjonsDetaljerContext); + + if (valgtOrganisasjon !== undefined && valgtOrganisasjon.altinntilgang.tilskuddsbrev) { + return ( + + + Tilskuddsbrev om NAV-tiltak fra Altinn innboks + + Tilskuddsbrev om NAV-tiltak ligger i Altinn innboks. + + ); } else { - const {origin, pathname} = new URL(href) - const url = `${origin}${pathname.replace(/\d/g, 'X')}` - loggNavigasjon(url, lenketekst); - } -} - -const BrevFraAltinnContainer: React.FunctionComponent = _ => { - const {altinnMeldingsboks} = useContext(OrganisasjonsDetaljerContext); - - if (altinnMeldingsboks === undefined || altinnMeldingsboks.brev.length === 0) { return null; } - - const ikon = ( - <> - - - - ) - - - return ( -
- - <> -
    - {altinnMeldingsboks.brev.map(BrevContainer)} -
- {altinnMeldingsboks.finnesFlereBrev && ( - - Se flere i Altinn meldingsboks - - )} - -
-
- ); -}; - -const dateFormat = new Intl.DateTimeFormat('no', { - year: 'numeric', - month: '2-digit', - day: '2-digit', -}); - -const BrevContainer = (brev: AltinnBrev) => { - const className = `tilskuddsbrev__${brev.status === Status.Lest ? 'lest' : 'ulest'}-lenke`; - const dato = dateFormat.format(brev.datoSendt); - return ( -
  • - Sendt {dato} - - {brev.tittel} - -
  • - ); }; export default BrevFraAltinnContainer; diff --git a/src/App/Hovedside/AltinnMeldingsboks/Innboksikon.tsx b/src/App/Hovedside/AltinnMeldingsboks/Innboksikon.tsx deleted file mode 100644 index 9c30f09eb..000000000 --- a/src/App/Hovedside/AltinnMeldingsboks/Innboksikon.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; - -const Innboksikon = () => ( - -); - -export default Innboksikon; - diff --git a/src/App/OrganisasjonDetaljerProvider.tsx b/src/App/OrganisasjonDetaljerProvider.tsx index 156fc396a..27c991866 100644 --- a/src/App/OrganisasjonDetaljerProvider.tsx +++ b/src/App/OrganisasjonDetaljerProvider.tsx @@ -3,14 +3,12 @@ import { OrganisasjonerOgTilgangerContext, OrganisasjonInfo, } from './OrganisasjonerOgTilgangerProvider'; -import { Meldingsboks } from '../api/altinnApi'; import { loggBedriftValgtOgTilganger } from '../utils/funksjonerForAmplitudeLogging'; import { hentAntallannonser, settBedriftIPam } from '../api/pamApi'; import { Organisasjon } from '../altinn/organisasjon'; import { useSaker } from './Hovedside/Sak/useSaker'; import { SakSortering } from '../api/graphql-types'; import { Set } from 'immutable'; -import { useAltinnMeldingsboks } from './useAltinnMeldingsboks'; interface Props { children: React.ReactNode; @@ -20,7 +18,6 @@ export type Context = { endreOrganisasjon: (org: Organisasjon) => void; valgtOrganisasjon: OrganisasjonInfo | undefined; antallAnnonser: number; - altinnMeldingsboks: Meldingsboks | undefined; antallSakerForAlleBedrifter: number | undefined; }; @@ -66,8 +63,6 @@ export const OrganisasjonsDetaljerProvider: FunctionComponent = ({ childr } }; - const altinnMeldingsboks = useAltinnMeldingsboks(valgtOrganisasjon); - useEffect(() => { if (valgtOrganisasjon !== undefined && organisasjoner !== undefined) { setValgtOrganisasjon(organisasjoner[valgtOrganisasjon.organisasjon.OrganizationNumber]); @@ -82,7 +77,6 @@ export const OrganisasjonsDetaljerProvider: FunctionComponent = ({ childr antallAnnonser, endreOrganisasjon, valgtOrganisasjon, - altinnMeldingsboks, antallSakerForAlleBedrifter, }; return ( diff --git a/src/App/OrganisasjonerOgTilgangerProvider.tsx b/src/App/OrganisasjonerOgTilgangerProvider.tsx index 3c41d4d6d..311b573b0 100644 --- a/src/App/OrganisasjonerOgTilgangerProvider.tsx +++ b/src/App/OrganisasjonerOgTilgangerProvider.tsx @@ -6,11 +6,6 @@ import { hentUserInfo, RefusjonStatus, } from '../api/dnaApi'; -import { - autentiserAltinnBruker, - hentAltinnRaporteeIdentiteter, - ReporteeMessagesUrls, -} from '../api/altinnApi'; import * as Record from '../utils/Record'; import { AltinnTilgangssøknad, hentAltinnTilgangssøknader } from '../altinn/tilganger'; import { altinntjeneste, AltinntjenesteId } from '../altinn/tjenester'; @@ -58,7 +53,6 @@ export type OrganisasjonEnhet = { export type Context = { organisasjoner: Record; organisasjonstre: OrganisasjonEnhet[]; - reporteeMessagesUrls: ReporteeMessagesUrls; visFeilmelding: boolean; tilgangTilSyfo: SyfoTilgang; visSyfoFeilmelding: boolean; @@ -154,7 +148,6 @@ export const OrganisasjonerOgTilgangerProvider: FunctionComponent = (props) => { const [altinnTilgangssøknader, setAltinnTilgangssøknader] = useState< AltinnTilgangssøknad[] | undefined >([]); - const [reporteeMessagesUrls, setReporteeMessagesUrls] = useState({}); const [syfoVirksomheter, setSyfoVirksomheter] = useState( undefined @@ -184,19 +177,6 @@ export const OrganisasjonerOgTilgangerProvider: FunctionComponent = (props) => { setAltinntilganger( Record.fromEntries(tilganger.map((it) => [it.id, Set(it.organisasjoner)])) ); - - if (organisasjoner.length !== 0) { - hentAltinnRaporteeIdentiteter().then((result) => { - if (result instanceof Error) { - autentiserAltinnBruker(window.location.href); - setReporteeMessagesUrls({}); - } else { - setReporteeMessagesUrls(result); - } - }); - } else { - setReporteeMessagesUrls({}); - } }) .catch((error) => { Sentry.captureException(error); @@ -287,7 +267,6 @@ export const OrganisasjonerOgTilgangerProvider: FunctionComponent = (props) => { const context: Context = { organisasjoner, organisasjonstre, - reporteeMessagesUrls, visFeilmelding, visSyfoFeilmelding, tilgangTilSyfo, diff --git a/src/App/useAltinnMeldingsboks.ts b/src/App/useAltinnMeldingsboks.ts deleted file mode 100644 index c2601d5c6..000000000 --- a/src/App/useAltinnMeldingsboks.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { useContext } from 'react'; -import { AltinnBrev, altinnFetch, autentiserAltinnBruker, Meldingsboks } from '../api/altinnApi'; -import { navtjenester } from '../altinn/tjenester'; -import { - OrganisasjonerOgTilgangerContext, - OrganisasjonInfo, -} from './OrganisasjonerOgTilgangerProvider'; -import useSWR from 'swr'; - -export const useAltinnMeldingsboks = ( - valgtOrganisasjon: OrganisasjonInfo | undefined -): Meldingsboks | undefined => { - const { reporteeMessagesUrls } = useContext(OrganisasjonerOgTilgangerContext); - - const messagesUrl = - valgtOrganisasjon?.altinntilgang.tilskuddsbrev !== undefined - ? reporteeMessagesUrls[valgtOrganisasjon.organisasjon.OrganizationNumber] - : undefined; - - const { data: brev, error: brevError } = useSWR( - messagesUrl !== undefined - ? `${messagesUrl}?$orderby=CreatedDate+desc&$filter=${tiltaksbrevFilter}` - : null, - hentBrev - ); - const { data: antallUleste, error: ulesteError } = useSWR( - messagesUrl !== undefined - ? `${messagesUrl}?$top=10&$filter=${tiltaksbrevFilter}+and+Status+eq+'Ulest'` - : null, - hentAntallUleste - ); - - if (brevError !== undefined || ulesteError !== undefined) { - autentiserAltinnBruker(window.location.href); - } else if (brev === undefined || antallUleste === undefined) { - return; - } else { - return { ...brev, ...antallUleste }; - } -}; - -const tilskuddsbrev = navtjenester.tilskuddsbrev; -const tiltaksbrevFilter = `ServiceCode+eq+'${tilskuddsbrev.tjenestekode}'+and+ServiceEdition+eq+${tilskuddsbrev.tjenesteversjon}`; - -const hentBrev = async (tiltaksbrevURL: string) => { - const maksBrev = 10; - const tiltaksbrev = await altinnFetch(`${tiltaksbrevURL}&$top=${maksBrev + 1}`); - const alleBrevIRespons: AltinnBrev[] = tiltaksbrev._embedded.messages.map( - (responsBrev: any): AltinnBrev => ({ - key: responsBrev.MessageId, - tittel: responsBrev.Subject, - status: responsBrev.Status, - datoSendt: new Date(responsBrev.CreatedDate), - portalview: responsBrev._links.portalview.href, - }) - ); - - const portalview: string = tiltaksbrev._links.portalview.href; - const finnesFlereBrev = alleBrevIRespons.length >= maksBrev; - const brev = alleBrevIRespons.slice(0, maksBrev); - return { portalview, brev, finnesFlereBrev }; -}; - -const hentAntallUleste = async (ulesteTiltaksbrevUrl: string) => { - const ulesteTiltaksbrev = await altinnFetch(ulesteTiltaksbrevUrl); - const antallUlesteIRespons: number = ulesteTiltaksbrev._embedded.messages.length; - return { antallUleste: antallUlesteIRespons }; -}; diff --git a/src/api/altinnApi.ts b/src/api/altinnApi.ts deleted file mode 100644 index f6159dfef..000000000 --- a/src/api/altinnApi.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { caseMiljo, gittMiljo } from '../utils/environment'; - -export const altinnUrl = gittMiljo({ - prod: 'https://altinn.no', - dev: 'https://tt02.altinn.no', - other: '/min-side-arbeidsgiver/mock/tt02.altinn.no', -}); - -export enum Status { - Ulest = 'Ulest', - Lest = 'Lest', -} - -export interface AltinnBrev { - key: string; - tittel: string; - status: Status; - portalview: string; - datoSendt: Date; -} - -export interface Meldingsboks { - brev: AltinnBrev[]; - finnesFlereBrev: boolean; - antallUleste: number; - portalview: string; -} - -// Map fra organisasjons-nummer til url for reportee messages api endpoint -export type ReporteeMessagesUrls = { - [orgnr: string]: string | undefined; -}; - -/* Autentiserer mot altinn på nytt, men gjør ingen ting hvis - * vi allerede har prøvd nylig. - */ -export const autentiserAltinnBruker = (returnUrl: string) => { - const storageName = 'altinn-redirect-time'; - const lastRedirect = parseInt(sessionStorage.getItem(storageName) ?? '0'); - const now = Date.now(); - const second = 1_000; /* i millisekunder */ - - function altinnLoginRedirect() { - if (lastRedirect < now - 60 * second) { - sessionStorage.setItem(storageName, now.toString()); - const encodedUri = encodeURIComponent(returnUrl); - window.location.replace( - `${altinnUrl}/Pages/ExternalAuthentication/Redirect.aspx?returnUrl=${encodedUri}` - ); - } - } - - caseMiljo({ - prod: () => { - altinnLoginRedirect(); - }, - dev: () => { - altinnLoginRedirect(); - }, - other: () => { - /* disable redirect outside prod. enable if needed */ - }, - }); -}; - -export const altinnFetch = async (info: RequestInfo) => { - const props: RequestInit = { - redirect: 'manual', - credentials: 'include', - headers: { - accept: 'application/hal+json', - /* Apikeys av typen 'nettleserapplikasjon' er ikke hemmeligheter. - * se https://altinn.github.io/docs/api/#api-key */ - apikey: gittMiljo({ - prod: 'DE7173AF-3A43-47E3-A7A2-E8AB4D88C253', - other: '2C585F91-5741-4568-8FD7-3807A45AFDD7', - }), - }, - }; - - const response = await fetch(info, props); - if (response.ok) { - return response.json(); - } else { - throw new Error(`fetch ${info}: http-status ${response.status}`); - } -}; - -export const hentAltinnRaporteeIdentiteter: () => Promise< - ReporteeMessagesUrls | Error -> = async () => { - try { - const body = await altinnFetch(`${altinnUrl}/api/reportees`); - const reportees = body._embedded.reportees; - const result: ReporteeMessagesUrls = {}; - reportees.forEach((element: any) => { - const orgnr: string = element.OrganizationNumber; - result[orgnr] = element._links.messages.href; - }); - return result; - } catch (error) { - return error instanceof Error ? error : new Error(`ukjent feil: ${error}`); - } -}; diff --git a/src/lenker.ts b/src/lenker.ts index 3e6904b7c..fa2c58881 100644 --- a/src/lenker.ts +++ b/src/lenker.ts @@ -1,8 +1,12 @@ -import {gittMiljo} from './utils/environment'; -import {altinnUrl} from "./api/altinnApi"; +import { gittMiljo } from './utils/environment'; -export const skjemaForArbeidsgiverURL = - 'https://www.nav.no/soknader/nb/bedrift'; +export const altinnUrl = gittMiljo({ + prod: 'https://altinn.no', + dev: 'https://tt02.altinn.no', + other: '/min-side-arbeidsgiver/mock/tt02.altinn.no', +}); + +export const skjemaForArbeidsgiverURL = 'https://www.nav.no/soknader/nb/bedrift'; export const innsynAaregURL = gittMiljo({ prod: 'https://arbeidsgiver.nav.no/arbeidsforhold/', @@ -20,7 +24,7 @@ export const refosoURL = gittMiljo({ prod: 'https://tiltak-refusjon.nav.no/refusjon', other: 'https://tiltak-refusjon.intern.dev.nav.no/refusjon', demo: ' https://tiltak-refusjon-arbeidsgiver-labs.ekstern.dev.nav.no/refusjon', -}) +}); export const arbeidsplassenURL = gittMiljo({ prod: 'https://arbeidsplassen.nav.no/bedrift', @@ -35,15 +39,14 @@ export const kandidatlisteURL = gittMiljo({ export const kontaktskjemaURL = gittMiljo({ prod: 'https://arbeidsgiver.nav.no/kontakt-oss/kontaktskjema', other: 'https://arbeidsgiver-kontakt-oss.intern.dev.nav.no/kontakt-oss/kontaktskjema', -}) +}); export const ringOssTLF = gittMiljo({ - prod: "tel:55553336", - other: "tel:00000000" -}) + prod: 'tel:55553336', + other: 'tel:00000000', +}); -export const infoOmTilgangsstyringURL = - 'https://www.nav.no/arbeidsgiver/tilganger' +export const infoOmTilgangsstyringURL = 'https://www.nav.no/arbeidsgiver/tilganger'; export const infoOmNærmesteLederURL = 'https://www.nav.no/no/bedrift/oppfolging/sykmeldt-arbeidstaker/digital-sykmelding-informasjon-til-arbeidsgivere/hvordan-melde-inn-naermeste-leder-for-en-sykmeldt_kap'; @@ -57,12 +60,11 @@ export const enhetsregisteretOverordnetenhetLink = (orgnr: string) => export const beOmTilgangIAltinnLink = ( orgnr: string, serviceKode: string, - serviceEditionKode: string, + serviceEditionKode: string ) => `${altinnUrl}/ui/DelegationRequest?offeredBy=${orgnr}&resources=${serviceKode}_${serviceEditionKode}`; -export const lenkeTilDittNavPerson = - 'https://www.nav.no/person/dittnav/'; +export const lenkeTilDittNavPerson = 'https://www.nav.no/person/dittnav/'; export const lenkeTilForebyggefravar = gittMiljo({ prod: 'https://arbeidsgiver.nav.no/forebygge-fravar/', @@ -87,6 +89,3 @@ export const tiltaksgjennomforingURL = gittMiljo({ demo: 'https://tiltaksgjennomforing-labs.ekstern.dev.nav.no/tiltaksgjennomforing/?part=arbeidsgiver', other: 'https://tiltaksgjennomforing.intern.dev.nav.no/tiltaksgjennomforing/?part=arbeidsgiver', }); - - - From 7bb4df11bbf196aa0c91cad763bfb8e60af6ef3c Mon Sep 17 00:00:00 2001 From: Peter Brottveit Bock Date: Thu, 21 Sep 2023 10:41:41 +0200 Subject: [PATCH 2/3] Oppdater tekst i info-boks om fjernede tiltaksbrev --- .../AltinnMeldingsboks/BrevFraAltinnContainer.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/App/Hovedside/AltinnMeldingsboks/BrevFraAltinnContainer.tsx b/src/App/Hovedside/AltinnMeldingsboks/BrevFraAltinnContainer.tsx index a4e7949f1..2a596cc59 100644 --- a/src/App/Hovedside/AltinnMeldingsboks/BrevFraAltinnContainer.tsx +++ b/src/App/Hovedside/AltinnMeldingsboks/BrevFraAltinnContainer.tsx @@ -8,10 +8,11 @@ const BrevFraAltinnContainer: React.FunctionComponent = (_) => { if (valgtOrganisasjon !== undefined && valgtOrganisasjon.altinntilgang.tilskuddsbrev) { return ( - - Tilskuddsbrev om NAV-tiltak fra Altinn innboks + + Hvor er tilskuddsbrevene? - Tilskuddsbrev om NAV-tiltak ligger i Altinn innboks. + For å finne tilskuddsbrev om NAV-tiltak må du gå til Altinn innboks på aktuell + virksomhet. Vi har fjernet lenken fra Min side – arbeidsgiver. ); } else { From f93488671ea5f678b6881edecdb78633224c4479 Mon Sep 17 00:00:00 2001 From: Peter Brottveit Bock Date: Thu, 21 Sep 2023 10:53:14 +0200 Subject: [PATCH 3/3] Kryss-ut for info om fjernede tiltaksbrev --- .../AltinnMeldingsboks/BrevFraAltinnContainer.tsx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/App/Hovedside/AltinnMeldingsboks/BrevFraAltinnContainer.tsx b/src/App/Hovedside/AltinnMeldingsboks/BrevFraAltinnContainer.tsx index 2a596cc59..e5ac3bbac 100644 --- a/src/App/Hovedside/AltinnMeldingsboks/BrevFraAltinnContainer.tsx +++ b/src/App/Hovedside/AltinnMeldingsboks/BrevFraAltinnContainer.tsx @@ -1,13 +1,19 @@ import React, { useContext } from 'react'; import { OrganisasjonsDetaljerContext } from '../../OrganisasjonDetaljerProvider'; import { Alert, Heading, BodyLong } from '@navikt/ds-react'; +import { useLocalStorage } from '../../hooks/useStorage'; const BrevFraAltinnContainer: React.FunctionComponent = (_) => { const { valgtOrganisasjon } = useContext(OrganisasjonsDetaljerContext); + const [kryssetUt, settKryssetUt] = useLocalStorage('tilskuddsbrev-borte-krysset-ut', false); - if (valgtOrganisasjon !== undefined && valgtOrganisasjon.altinntilgang.tilskuddsbrev) { + if ( + valgtOrganisasjon !== undefined && + valgtOrganisasjon.altinntilgang.tilskuddsbrev && + !kryssetUt + ) { return ( - + settKryssetUt(true)}> Hvor er tilskuddsbrevene?