import React, { ReactNode } from 'react'; import { comparePeriode, garanterListe, GyldighetsRegistrerer, isPeriode, ledetekst, OppsummeringBlokk, OppsummeringTabell, periodeTilTekst, PERIODISERING_DAGER, PERIODISERING_TIMER, PERIODISERING_UKER, TYPE_DAGER_HELE_UKEN, TYPE_DAGER_HELG, TYPE_DAGER_HVERDAGER, useOppsummering, VerdiEllerInfoMangler, } from '..'; import { Vegarbeidsperiode } from '../domene/Soknad'; import { formaterDato } from '../pynt/dato'; import { validerVegarbeidperiode } from '../validering/VegarbeidperiodeValidering'; import { TilbakemeldingForSteg } from './tilbakemelding/TilbakemeldingForSteg'; import isEqual from 'lodash/isEqual'; import { erLikeReactElementer } from './utils'; const ARBEIDSTIDER_INTRODUSERT_VERSJON = 36; export function typeDagerTilLedetekst(typeDager) { switch (typeDager) { case TYPE_DAGER_HVERDAGER: return ledetekst.getTekst( 'arbeidsvarsling.soknad.Vegarbeidperiode.tillatelsesperiode.arbeidsperiode.arbeidsdager.hverdag' ); case TYPE_DAGER_HELG: return ledetekst.getTekst( 'arbeidsvarsling.soknad.Vegarbeidperiode.tillatelsesperiode.arbeidsperiode.arbeidsdager.helg' ); case TYPE_DAGER_HELE_UKEN: return ledetekst.getTekst( 'arbeidsvarsling.soknad.Vegarbeidperiode.tillatelsesperiode.arbeidsperiode.arbeidsdager.heleuken' ); default: return ''; } } function periodiseringTilLedetekst(periodisering) { switch (periodisering) { case PERIODISERING_DAGER: return ledetekst.getTekst( 'arbeidsvarsling.soknad.Vegarbeidperiode.tillatelsesperiode.varighet.dager' ); case PERIODISERING_UKER: return ledetekst.getTekst( 'arbeidsvarsling.soknad.Vegarbeidperiode.tillatelsesperiode.varighet.uker' ); case PERIODISERING_TIMER: return ledetekst.getTekst( 'arbeidsvarsling.soknad.Vegarbeidperiode.tillatelsesperiode.varighet.timer' ); default: return ''; } } function TidPaaDoegnetOgPerioder({ vegarbeidsperiode }) { const { arbeidstidsperioder } = vegarbeidsperiode; const perioder = garanterListe(arbeidstidsperioder).filter(isPeriode); const { forsendelsesversjon } = useOppsummering(); const skalHaArbeidstidsperioder = ARBEIDSTIDER_INTRODUSERT_VERSJON <= forsendelsesversjon; if (!skalHaArbeidstidsperioder) { return null; } return ( {perioder.length > 0 && ( )} ); } function hentDataForVegarbeidperiode( vegarbeidperiode: Vegarbeidsperiode ): ReactNode[] { const arbeidsvarighet = vegarbeidperiode?.arbeidsvarighet && vegarbeidperiode?.arbeidsvarighet?.periodisering && vegarbeidperiode?.arbeidsvarighet?.varighet && vegarbeidperiode?.arbeidsvarighet; return [ vegarbeidperiode?.fra ? formaterDato(vegarbeidperiode.fra) : '', vegarbeidperiode?.til ? formaterDato(vegarbeidperiode.til) : '', arbeidsvarighet ? `${arbeidsvarighet?.varighet} ${periodiseringTilLedetekst( arbeidsvarighet?.periodisering )}` : '', typeDagerTilLedetekst(vegarbeidperiode?.typeDager), , ]; } function VegarbeidperiodeOppsummering() { const { id: soknadId, kunLesbar, vegarbeid, gyldighet, soknad, forrigeSoknad, } = useOppsummering(); const vegarbeidperiode = vegarbeid.vegarbeidsperiode || {}; const redigeringsLenke = !kunLesbar && `#/${soknadId}/vegarbeidperiode`; const valideringsfeil = !kunLesbar && validerVegarbeidperiode(soknad); const overskrifter = [ 'arbeidsvarsling.soknad.Oppsummering.Vegarbeidperiode.fra', 'arbeidsvarsling.soknad.Oppsummering.Vegarbeidperiode.til', 'arbeidsvarsling.soknad.Vegarbeidperiode.tillatelsesperiode.varighet', 'arbeidsvarsling.soknad.Oppsummering.Vegarbeidperiode.arbeidsdager', 'arbeidsvarsling.soknad.Oppsummering.Vegarbeidperiode.arbeidstid', ].map(ledetekst.getTekst); const kolonner = hentDataForVegarbeidperiode(vegarbeidperiode); const data = [ { kolonner: kolonner, markerEndring: !!forrigeSoknad && erVegarbeidperiodeEndret( kolonner, forrigeSoknad.vegarbeid?.vegarbeidsperiode, vegarbeidperiode ), }, ]; return ( <> ); } function erVegarbeidperiodeEndret( kolonner: any[], vegarbeidperiodeForrigeSoknad?: Vegarbeidsperiode, vegarbeidperiode?: Vegarbeidsperiode ): boolean { if (!vegarbeidperiodeForrigeSoknad) return true; const kolonnerForrigeSoknad = hentDataForVegarbeidperiode( vegarbeidperiodeForrigeSoknad ); const endretAntallTidsperioder = garanterListe(vegarbeidperiode?.arbeidstidsperioder).filter(isPeriode) ?.length !== garanterListe( vegarbeidperiodeForrigeSoknad?.arbeidstidsperioder ).filter(isPeriode)?.length; const endretTidsperioder = garanterListe( vegarbeidperiode?.arbeidstidsperioder ).map((periode, index) => { const forrigePerioder = garanterListe( vegarbeidperiodeForrigeSoknad?.arbeidstidsperioder ).filter(isPeriode); if (index >= forrigePerioder.length) { return true; } return !isEqual(periode, forrigePerioder[index]); }); return ( endretAntallTidsperioder || endretTidsperioder.some(Boolean) || !kolonnerForrigeSoknad.every((value, indeks) => { if ( indeks === 4 && React.isValidElement(value) && React.isValidElement(kolonner[indeks]) ) { return erLikeReactElementer(value, kolonner[indeks]); } return value === kolonner[indeks]; }) ); } export { VegarbeidperiodeOppsummering };