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 && (
{perioder.sort(comparePeriode).map((periode, i) => (
-
{periodeTilTekst(periode)}
))}
)}
);
}
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 };