Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🚸 Vedlegg array i mellomlagring #154

Merged
merged 4 commits into from
May 31, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion api/fetch.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import fetch from 'cross-fetch';

export const fetchPOST = async (url: string, payload: object) => {
export const fetchPOST = async (url: string, payload: object, options?: RequestInit) => {
const headers = {
'Content-Type': 'application/json',
...options?.headers,
};
try {
const res = await fetch(url, {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ export const MonthPickerWrapper = ({
dropdownCaption={dropdownCaption}
defaultSelected={selectedDate}
>
<MonthPicker.Input {...inputProps} label={label} error={error} />
<MonthPicker.Input {...inputProps} id={id} label={label} error={error} />
</MonthPicker>
);
};
4 changes: 2 additions & 2 deletions components/input/countryselector/CountrySelector.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ const CountrySelector = ({ name, label, className, onChange, value, error }: Pro
return Object.entries(countries.getNames('nb', { select: 'official' }))
.filter((country) => country[0] !== 'NO' && country[0] !== 'SJ')
.sort(
(a, b) => (a[1] > b[1] ? 1 : -1) // Sorterer alfabetisk på navn i stedet for landkode
(a, b) => (a[1] > b[1] ? 1 : -1), // Sorterer alfabetisk på navn i stedet for landkode
);
}, [countries]);

return (
<div className={className}>
<Select name={name} label={label} onChange={onChange} value={value} error={error}>
<Select id={name} name={name} label={label} onChange={onChange} value={value} error={error}>
{[
<option key="none" value="none">
Velg land
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,6 @@
.pidInput input {
max-width: 8rem;
}
.visuallyHidden {
composes: visuallyHidden from '/styles/visibility.module.css';
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {
BodyLong,
BodyShort,
Button,
ErrorSummary,
Heading,
HGrid,
Label,
Expand Down Expand Up @@ -160,6 +161,20 @@ const UtenlandsPeriodeVelger = ({
}
}}
>
<ErrorSummary
heading={formatMessage({ id: 'errorSummary.title' })}
aria-hidden={!errors?.length}
className={errors?.length ? '' : classes?.visuallyHidden}
tabIndex={0}
>
{errors?.length
? errors.map((error) => (
<ErrorSummary.Item key={error.path} href={`#${error.path}`}>
{error.message}
</ErrorSummary.Item>
))
: 'hidden'}
</ErrorSummary>
<CountrySelector
className={classes.countrySelector}
name={'land'}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,6 @@ const soknadContextInitial: SoknadContextState = {
],
},
requiredVedlegg,
søknadUrl: undefined,
};

describe('Vedlegg', () => {
Expand Down
2 changes: 0 additions & 2 deletions context/soknadcontext/soknadContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ export interface SoknadContextState {
søknad?: Soknad;
lagretStepList?: Array<StepType>;
requiredVedlegg: RequiredVedlegg[];
søknadUrl?: string;
sistLagret?: string;
}

Expand All @@ -20,7 +19,6 @@ export const soknadContextInititalState: SoknadContextState = {
version: SOKNAD_VERSION,
søknad: undefined,
requiredVedlegg: [],
søknadUrl: undefined,
type: SøknadType.STANDARD,
};

Expand Down
15 changes: 13 additions & 2 deletions hooks/useDebounceLagreSoknad.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { useCallback } from 'react';
import { formatDateTime } from 'utils/date';
import { setSistLagret, useAppStateContext } from 'context/appStateContext';
import { SoknadContextState } from 'context/soknadcontext/soknadContext';
import { søknadVedleggStateTilFilIdString } from 'utils/vedlegg';

export function useDebounceLagreSoknad<SoknadStateType>() {
const { appStateDispatch } = useAppStateContext();
Expand All @@ -19,8 +20,8 @@ export function useDebounceLagreSoknad<SoknadStateType>() {
lagretStepList: stepList,
sistLagret: formatDateTime(new Date()),
};
const res = await fetchPOST(`/aap/soknad/api/mellomlagring/lagre`, payload);
if (res.ok) setSistLagret(formatDateTime(new Date()), appStateDispatch);
const res = await mellomLagreSøknad(payload);
if (res?.ok) setSistLagret(formatDateTime(new Date()), appStateDispatch);
}

const debouncedLagre = () => {
Expand All @@ -32,3 +33,13 @@ export function useDebounceLagreSoknad<SoknadStateType>() {
};
return useCallback(debouncedLagre(), []);
}
export async function mellomLagreSøknad(contextState: SoknadContextState) {
if (contextState.søknad) {
const vedleggString = søknadVedleggStateTilFilIdString(contextState.søknad);
return await fetchPOST(`/aap/soknad/api/mellomlagring/lagre`, contextState, {
headers: {
vedlegg: vedleggString,
},
});
}
}
38 changes: 2 additions & 36 deletions pages/api/innsending/soknadinnsending.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import { SOKNAD_VERSION } from 'context/soknadcontext/soknadContext';
import { deleteCache } from 'mock/mellomlagringsCache';
import { simpleTokenXProxy } from 'lib/utils/api/simpleTokenXProxy';
import { IncomingMessage } from 'http';
import { søknadVedleggStateTilFilArray } from 'utils/vedlegg';

// TODO: Sjekke om vi må generere pdf på samme språk som bruker har valgt når de fyller ut søknaden
function getIntl() {
Expand Down Expand Up @@ -73,21 +74,7 @@ const handler = beskyttetApi(async (req: NextApiRequest, res: NextApiResponse) =
søknad: Soknad;
requiredVedlegg: RequiredVedlegg[];
};

const filer: Fil[] = Object.keys(søknad.vedlegg ?? {})
.map((key) => {
const vedleggArray = søknad?.vedlegg?.[key];
const filerArray: Fil[] =
vedleggArray?.map((vedlegg) => {
return {
id: vedlegg.vedleggId,
tittel: mapVedleggTypeTilVedleggTekst(key),
};
}) ?? [];

return filerArray;
})
.flat();
const filer: Fil[] = søknadVedleggStateTilFilArray(søknad);

const etterspurtDokumentasjon = requiredVedlegg?.map((vedlegg) => vedlegg.type);

Expand Down Expand Up @@ -122,27 +109,6 @@ const handler = beskyttetApi(async (req: NextApiRequest, res: NextApiResponse) =
}
});

function mapVedleggTypeTilVedleggTekst(vedleggType: AttachmentType): string {
switch (vedleggType) {
case 'LØNN_OG_ANDRE_GODER':
return 'Dokumentasjon om lønn og andre goder';
case 'OMSORGSSTØNAD':
return 'Dokumentasjon om omsorgsstønad';
case 'UTLANDSSTØNAD':
return 'Dokumentasjon om utenlandsstønad';
case 'SYKESTIPEND':
return 'Dokumentasjon om sykestipend';
case 'LÅN':
return 'Dokumentasjon om lån';
case 'AVBRUTT_STUDIE':
return 'Dokumentasjon om avbrutt studie';
case 'ANNET':
return 'Annen dokumentasjon';
default:
return 'Dokumentasjon om barn eller fosterbarn';
}
}

export const sendSoknadViaAapInnsending = async (
innsending: SoknadInnsendingRequestBody,
req: IncomingMessage,
Expand Down
2 changes: 1 addition & 1 deletion pages/api/mellomlagring/lagre.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ export const mellomlagreSøknad = async (data: object, req: IncomingMessage) =>
if (isMock()) return await lagreCache(JSON.stringify(data));
try {
const result = await simpleTokenXProxy({
url: `${process.env.INNSENDING_URL}/mellomlagring/søknad`,
url: `${process.env.INNSENDING_URL}/mellomlagring/søknad/v2`,
method: 'POST',
audience: process.env.INNSENDING_AUDIENCE!,
body: data,
Expand Down
12 changes: 7 additions & 5 deletions pages/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import React, { useEffect, useRef, useState } from 'react';
import { useRouter } from 'next/router';
import { GetServerSidePropsResult, NextPageContext } from 'next/types';
import { beskyttetSide } from 'auth/beskyttetSide';
import { fetchPOST } from 'api/fetch';
import { StepType } from 'components/StepWizard/Step';
import { logSkjemaStartetEvent } from 'utils/amplitude';
import metrics from 'utils/metrics';
Expand All @@ -13,6 +12,7 @@ import { hentMellomlagring } from 'pages/api/mellomlagring/les';
import { isFunctionalTest } from 'utils/environments';
import { logError, logInfo } from '@navikt/aap-felles-utils';
import { Person, getPerson } from 'pages/api/oppslagapi/person';
import { mellomLagreSøknad } from 'hooks/useDebounceLagreSoknad';

interface PageProps {
person: Person;
Expand Down Expand Up @@ -54,13 +54,15 @@ const Introduksjon = ({ person }: PageProps) => {
setIsLoading(true);
setHasError(false);
logSkjemaStartetEvent();
const result = await fetchPOST('/aap/soknad/api/mellomlagring/lagre', {
const initState: SoknadContextState = {
version: SOKNAD_VERSION,
søknad: {},
søknad: { vedlegg: {} },
lagretStepList: defaultStepList,
});
requiredVedlegg: [],
};
const result = await mellomLagreSøknad(initState);

if (!result.ok) {
if (!result?.ok) {
setIsLoading(false);
setHasError(true);
} else {
Expand Down
50 changes: 50 additions & 0 deletions utils/vedlegg.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import { Soknad } from 'types/Soknad';
import { AttachmentType } from 'types/SoknadContext';

export interface Fil {
id: string;
tittel: string;
}
export const søknadVedleggStateTilFilArray = (søknad: Soknad) => {
const filer: Fil[] = Object.keys(søknad.vedlegg ?? {})
.map((key) => {
const vedleggArray = søknad?.vedlegg?.[key];
const filerArray: Fil[] =
vedleggArray?.map((vedlegg) => {
return {
id: vedlegg.vedleggId,
tittel: mapVedleggTypeTilVedleggTekst(key),
};
}) ?? [];

return filerArray;
})
.flat();
return filer;
};

export const søknadVedleggStateTilFilIdString = (søknad: Soknad) => {
return søknadVedleggStateTilFilArray(søknad)
.map((fil) => fil.id)
.join(',');
};
function mapVedleggTypeTilVedleggTekst(vedleggType: AttachmentType): string {
switch (vedleggType) {
case 'LØNN_OG_ANDRE_GODER':
return 'Dokumentasjon om lønn og andre goder';
case 'OMSORGSSTØNAD':
return 'Dokumentasjon om omsorgsstønad';
case 'UTLANDSSTØNAD':
return 'Dokumentasjon om utenlandsstønad';
case 'SYKESTIPEND':
return 'Dokumentasjon om sykestipend';
case 'LÅN':
return 'Dokumentasjon om lån';
case 'AVBRUTT_STUDIE':
return 'Dokumentasjon om avbrutt studie';
case 'ANNET':
return 'Annen dokumentasjon';
default:
return 'Dokumentasjon om barn eller fosterbarn';
}
}
Loading