diff --git a/src/app/personside/infotabs/varsel/VarslerNy.tsx b/src/app/personside/infotabs/varsel/VarslerNy.tsx new file mode 100644 index 000000000..a832e0efe --- /dev/null +++ b/src/app/personside/infotabs/varsel/VarslerNy.tsx @@ -0,0 +1,216 @@ +import { VStack, Alert } from '@navikt/ds-react'; +import { AlertStripeFeil } from 'nav-frontend-alertstriper'; +import varselResource from 'src/rest/resources/varselResource'; +import { Pagination, Table } from '@navikt/ds-react'; +import { + DittNavEvent, + FeiletVarsling, + isDittNavEvent, + UnifiedVarsel as UnifiedVarselModell, + UnifiedVarsel, + Varsel as VarselModell, + VarslerResult +} from 'src/models/varsel'; +import * as React from 'react'; +import { datoSynkende } from 'src/utils/date-utils'; +import { ReactNode, useState } from 'react'; +import { ENDASH, formaterDato } from 'src/utils/string-utils'; +import { emptyReplacement, getVarselTekst } from 'src/app/personside/infotabs/varsel/varsel-utils'; +import WarningIcon from '../../../../svg/WarningIcon'; +import CompletedIcon from '../../../../svg/CompletedIcon'; +import VarselMeldinger from './varselDetaljer/VarselMeldinger'; + +function VarslerNy() { + const [page, setPage] = useState(1); + const rowsPerPage = 22; + + const varslerResponse = varselResource.useFetch(); + const varslerResult: VarslerResult = varslerResponse.data || { feil: [], varsler: [] }; + const datoExtractor = (varsel: UnifiedVarsel) => { + if (isDittNavEvent(varsel)) { + return varsel.forstBehandlet; + } + return varsel.mottattTidspunkt; + }; + + const varselElementer = varslerResult.varsler.sort(datoSynkende(datoExtractor)); + const varselPagniated = varselElementer.slice((page - 1) * rowsPerPage, page * rowsPerPage); + + const DittNavInformasjonsLinje = ({ tittel, tekst }: { tittel: string; tekst: string }) => { + return ( +
+
{tittel}
+
{tekst}
+
+ ); + }; + + const DittNavInformasjonsLinjer = (varsel: { produsent: string; tekst: string; link: string }) => { + return ( +
+ + + +
+ ); + }; + + const FeilteVarslingerListe = ({ + tittel, + feilteVarslinger + }: { tittel: string; feilteVarslinger: FeiletVarsling[] }) => { + return ( +
+
{tittel}
+
+ {feilteVarslinger.map((varsling) => ( +
  • + {formaterDato(varsling.tidspunkt)} - {varsling.kanal}: {varsling.feilmelding} +
  • + ))} +
    +
    + ); + }; + + const DittNavInformasjonsLinjerV2 = (varsel: DittNavEvent) => { + const varslingsTidspunkt = varsel.varslingsTidspunkt; + + return ( + <> + + + {varslingsTidspunkt.renotifikasjonTidspunkt && ( + + )} + {varslingsTidspunkt.harFeilteVarslinger && ( + <> +
    + + + )} + {varslingsTidspunkt.harFeilteRevarslinger && ( + <> +
    + + + )} + + ); + }; + + const dataExtractor = ( + varsel: UnifiedVarselModell + ): { datoer: string[]; tittel: string; kanaler: string[]; harFeilteVarsel?: boolean; detaljer?: ReactNode } => { + if (isDittNavEvent(varsel)) { + const varslingsTidspunkt = varsel.varslingsTidspunkt; + const aktiv = varsel.aktiv ? '' : ' (Ferdigstilt)'; + const tittel = `Notifikasjon${aktiv}: ${varsel.tekst}`; + + if (!varslingsTidspunkt || !varslingsTidspunkt.tidspunkt) { + const datoer = [formaterDato(varsel.forstBehandlet)]; + const kanaler = ['DITT_NAV', ...varsel.eksternVarslingKanaler]; + + const detaljer = ( + + ); + + return { datoer, tittel, kanaler, detaljer }; + } + + const datoer = [formaterDato(varslingsTidspunkt.tidspunkt)]; + if (varslingsTidspunkt.renotifikasjonTidspunkt) { + datoer.push(formaterDato(varslingsTidspunkt.renotifikasjonTidspunkt)); + } + + const kanaler = [ + 'DITT_NAV', + ...varsel.eksternVarslingKanaler, + ...varslingsTidspunkt.renotifikasjonsKanaler + ].unique(); + + const harFeilteVarsel = varslingsTidspunkt.harFeilteVarslinger || varslingsTidspunkt.harFeilteRevarslinger; + const detaljer = ; + + return { datoer, tittel, kanaler, detaljer, harFeilteVarsel }; + } else { + const meldingsliste = item.meldingListe?.sort(datoSynkende((melding) => melding.utsendingsTidspunkt)) || []; + const datoer = meldingsliste.map((melding) => formaterDato(melding.utsendingsTidspunkt)).unique(); + const tittel = getVarselTekst(item); + const kanaler = meldingsliste.map((melding) => melding.kanal).unique(); + const detaljer = ; + return { datoer, tittel, kanaler, detaljer }; + } + }; + + return ( +
    + + Varsler vises kun ett år tilbake i tid. Dersom man trenger å se informasjon om eldre varsler kan man + lage en sak i porten for manuell uthenting. + + {varslerResult.feil.length > 0 && ( + {varsler.feil.join('. ')} + )} + + + + + Dato + Status + Type + Kanal + + + + {varselPagniated.map((item: VarselModell) => { + const data = dataExtractor(item); + return ( + <> + + + {data.datoer} + + + {data.harFeilteVarsel ? : } + + + {data.tittel} + + + {data.kanaler.join(', ')} + + + + ); + })} + +
    + +
    + ); +} + +export default VarslerNy; diff --git a/src/routes/new/person/varsler.lazy.tsx b/src/routes/new/person/varsler.lazy.tsx index df70d9337..93b5f3910 100644 --- a/src/routes/new/person/varsler.lazy.tsx +++ b/src/routes/new/person/varsler.lazy.tsx @@ -1,9 +1,6 @@ import { createLazyFileRoute } from '@tanstack/react-router'; +import VarslerNy from 'src/app/personside/infotabs/varsel/VarslerNy'; export const Route = createLazyFileRoute('/new/person/varsler')({ - component: RouteComponent + component: VarslerNy }); - -function RouteComponent() { - return
    Hello "/new/person/varsler"!
    ; -}