Skip to content

Commit

Permalink
Bedre validering av fravær og arbeidssituasjon
Browse files Browse the repository at this point in the history
  • Loading branch information
frodehansen2 committed Jan 9, 2024
1 parent 0de0707 commit 242f994
Show file tree
Hide file tree
Showing 4 changed files with 82 additions and 7 deletions.
13 changes: 9 additions & 4 deletions apps/omsorgspengerutbetaling-soknad/src/app/i18n/appMessages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -146,10 +146,15 @@ export const appMessages: MessageFileFormat = {
'Du må svare ja eller nei på om du har flere enn én virksomhet som er aktiv.',
'validation.selvstendig_virksomhet.noValue': 'Du har ikke registrert informasjon om virksomheten din.',

'validation.arbeidssituasjon.arbeidsperiodeStarterEtterFraværsperiode':
'Du har registrert fraværsdager utenfor perioden du har registrert arbeid.',
'validation.arbeidssituasjon.arbeidsperiodeSlutterFørEllerIFraværsperiode':
'Du har registrert fraværsdager utenfor perioden du har registrert arbeid.',
'validation.arbeidssituasjon.situasjon.frilanser': 'frilanser',
'validation.arbeidssituasjon.situasjon.sn': 'selvstendig næringsdrivende',
'validation.arbeidssituasjon.situasjon.frilanserOgSn': 'frilanser og selvstendig næringsdrivende',

'validation.arbeidssituasjon_tidsrom.arbeidsperiodeStarterEtterFraværsperiode':
'Du har registrert fraværsdager utenfor perioden du har oppgitt som {situasjon}. Du kan kun søke for dager du har vært frilanser eller selvstendig næringsdrivende.',
'validation.arbeidssituasjon_tidsrom.arbeidsperiodeSlutterFørEllerIFraværsperiode':
'Du har registrert fraværsdager utenfor perioden du har oppgitt som {situasjon}. Du kan kun søke for dager du har vært frilanser eller selvstendig næringsdrivende.',

'validation.aktivitetFravær.noValue': 'Du må velge hvilket arbeid du hadde fravær fra {dato}.',
'validation.harBoddUtenforNorgeSiste12Mnd.yesOrNoIsUnanswered':
'Du må svare på om du har bodd i utlandet i hele eller deler av de siste 12 månedene.',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import SelvstendigNæringsdrivendeFormPart from './form-parts/SelvstendigNæring
import {
getArbeidssituasjonStepInitialValues,
getArbeidssituasjonSøknadsdataFromFormValues,
getFrilanserSnSituasjon,
validateArbeidssituasjonTidsrom,
} from './arbeidssituasjonStepUtils';
import { FormikInputGroup } from '@navikt/sif-common-formik-ds';
Expand Down Expand Up @@ -115,12 +116,23 @@ const ArbeidssituasjonStep = () => {
<FormikInputGroup
name={'arbeidssituasjon_tidsrom'}
hideLegend={true}
errorPropagation={false}
legend="Registrer frilans og/eller selvstendig næringsdrivende"
validate={() => {
return validateArbeidssituasjonTidsrom(
const error = validateArbeidssituasjonTidsrom(
values,
søknadsdata.fravaer?.førsteOgSisteDagMedFravær,
);
const situasjon = getFrilanserSnSituasjon(values);
if (error && situasjon) {
return {
key: error,
values: {
situasjon,
},
};
}
return undefined;
}}>
<div>
<FormBlock>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,23 @@ const getSelvstendigNæringsdrivendeFormValuesFromSøknadsdata = (selvstendig: A
}
};

export const getFrilanserSnSituasjon = (
values: Partial<ArbeidssituasjonFormValues>,
): 'frilanser' | 'sn' | 'frilanserOgSn' | undefined => {
const erFrilanser = values.frilans_erFrilanser === YesOrNo.YES;
const erSn = values.selvstendig_erSelvstendigNæringsdrivende === YesOrNo.YES;
if (erFrilanser && erSn) {
return 'frilanserOgSn';
}
if (erFrilanser) {
return 'frilanser';
}
if (erSn) {
return 'sn';
}
return;
};

export const validateArbeidssituasjonTidsrom = (
values: Partial<ArbeidssituasjonFormValues>,
fraværsperiode?: DateRange,
Expand All @@ -215,12 +232,12 @@ export const validateArbeidssituasjonTidsrom = (

if (arbeidsperiode.from) {
if (dayjs(arbeidsperiode.from).isAfter(fraværsperiode.from, 'day')) {
return 'arbeidsperiodeStarterEtterFraværsperiode';
return `arbeidsperiodeStarterEtterFraværsperiode`;
}
}
if (arbeidsperiode.to) {
if (dayjs(arbeidsperiode.to).isBefore(fraværsperiode.to, 'day')) {
return 'arbeidsperiodeSlutterFørEllerIFraværsperiode';
return `arbeidsperiodeSlutterFørEllerIFraværsperiode`;
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import { Fieldset, FieldsetProps } from '@navikt/ds-react';
import React from 'react';
import { FastField, Field, FieldProps } from 'formik';
import { TypedFormInputValidationProps, UseFastFieldProps } from '../../types';
import { getErrorPropForFormikInput } from '../../utils/typedFormErrorUtils';
import { TypedFormikFormContext } from '../typed-formik-form/TypedFormikForm';

interface OwnProps<FieldName> extends Omit<FieldsetProps, 'name'> {
name: FieldName;
}

export type FormikInputGroupProps<ErrorType, FieldName> = OwnProps<FieldName> &
TypedFormInputValidationProps<FieldName, ErrorType> &
UseFastFieldProps;

function FormikInputGroup<ErrorType, FieldName>({
name,
error,
id,
validate,
useFastField,
...restProps
}: FormikInputGroupProps<ErrorType, FieldName>) {
const context = React.useContext(TypedFormikFormContext);
const FieldComponent = useFastField ? FastField : Field;
return (
<FieldComponent validate={validate ? (value: any) => validate(value, name) : undefined} name={name}>
{({ field, form }: FieldProps) => {
return (
<Fieldset
{...restProps}
error={getErrorPropForFormikInput({ field, form, context, error })}
id={id}
tabIndex={id ? -1 : undefined}
/>
);
}}
</FieldComponent>
);
}
export default FormikInputGroup;

0 comments on commit 242f994

Please sign in to comment.