import { garanterListe } from '../'; export type Tiltak = { valgt: boolean; felt: string; alternativer: Alternativ[]; }; export const ARBEIDSTIDER_INTRODUSERT_VERSJON = 35; export type TILTAK_ARBEIDSTID = 'INNENFOR_ARBEIDSTID' | 'UTENFOR_ARBEIDSTID'; export type Alternativ = { kategori: string; felt: string; tekst: string; harEkstraSpoersmaal?: boolean; ekstraSpoersmaalValgt?: boolean; arbeidstider: TILTAK_ARBEIDSTID[]; valgt: boolean; vedlagteSkisserIder: Partial>; }; function sjekkGyldighetForTiltaksalternativer( state: Record = {}, forsendelsesversjon?: number ) { const arbeidstidKreves = forsendelsesversjon === undefined || ARBEIDSTIDER_INTRODUSERT_VERSJON <= forsendelsesversjon; const values = Object.values(state).flat(); const minstEtTiltakErGyldig = values.some((value) => { const tiltakErValgt = !!value.valgt; let minstEtAlternativErValgtOgHarTekst = false; if (value.alternativer) { minstEtAlternativErValgtOgHarTekst = value.alternativer.some( (alternativ) => (!alternativ.harEkstraSpoersmaal || alternativ.ekstraSpoersmaalValgt !== undefined) && !!alternativ.valgt && !!alternativ.tekst && (!arbeidstidKreves || garanterListe(alternativ.arbeidstider).length > 0) ); if (arbeidstidKreves) { const alleValgteAlternativerHarArbeidstider = value.alternativer.every( (alternativ) => !alternativ.valgt || garanterListe(alternativ.arbeidstider).length > 0 ); if (!alleValgteAlternativerHarArbeidstider) { return false; } } } return tiltakErValgt && minstEtAlternativErValgtOgHarTekst; }); const alleValgteTiltakErGyldige = values.every((value) => { const tiltakErValgt = !!value.valgt; const alleValgteAlternativerErGyldige = value.alternativer?.every( (alternativ) => { if (!alternativ.valgt) { // Hvis alternativet ikke er valgt trenger det ikke være gyldig return true; } const ekstraSpoersmaalErOk = !alternativ.harEkstraSpoersmaal || alternativ.ekstraSpoersmaalValgt !== undefined; const arbeidstidErOk = !arbeidstidKreves || garanterListe(alternativ.arbeidstider).length > 0; const tekstErOk = !!alternativ.tekst; return arbeidstidErOk && tekstErOk && ekstraSpoersmaalErOk; } ); return !tiltakErValgt || alleValgteAlternativerErGyldige; }); return minstEtTiltakErGyldig && alleValgteTiltakErGyldige; } function minstEtTiltakErHuketAv(tiltak: Record = {}) { return Object.values(tiltak).filter((tiltak) => tiltak.valgt).length > 0; } function tiltakHarAlternativerSomIkkeErValgt( tiltak: Record = {} ) { return ( Object.values(tiltak) .flat() .filter(({ valgt }) => valgt) .filter(({ alternativer = [] }) => { if (alternativer.length === 0) return true; return alternativer.every(({ valgt }) => !valgt); }).length > 0 ); } export { sjekkGyldighetForTiltaksalternativer, minstEtTiltakErHuketAv, tiltakHarAlternativerSomIkkeErValgt, };