diff --git a/components/pageComponents/standard/Oppsummering/SoknadUtenVedleggModal.tsx b/components/pageComponents/standard/Oppsummering/SoknadUtenVedleggModal.tsx new file mode 100644 index 00000000..4ec6cbde --- /dev/null +++ b/components/pageComponents/standard/Oppsummering/SoknadUtenVedleggModal.tsx @@ -0,0 +1,36 @@ +import { BodyLong, Button, Heading, Modal } from '@navikt/ds-react'; + +export const SoknadUtenVedleggModal = ({ + showModal, + onSendSoknad, + onClose, +}: { + showModal: boolean; + onSendSoknad: () => void; + onClose: () => void; +}) => { + return ( + + + + Klarte ikke sende inn søknad med vedlegg + + + + + Vi klarte ikke sende inn søknaden din med vedlegg. Du kan prøve å sende inn søknaden uten + vedlegg, eller prøve igjen senere. + + Du kan alltid ettersende vedlegg til søknaden din senere. + + + + + + + ); +}; diff --git a/pages/[step].tsx b/pages/[step].tsx index ac42db98..9390b5b3 100644 --- a/pages/[step].tsx +++ b/pages/[step].tsx @@ -5,7 +5,7 @@ import { completeAndGoToNextStep, goToPreviousStep, setStepList } from 'context/ import { useStepWizard } from 'hooks/StepWizardHook'; import { useDebounceLagreSoknad } from 'hooks/useDebounceLagreSoknad'; import { StepWizard } from 'components/StepWizard'; -import { Soknad } from 'types/Soknad'; +import { Soknad, SoknadVedlegg } from 'types/Soknad'; import { fetchPOST } from 'api/fetch'; import { StepNames } from './index'; import StartDato from 'components/pageComponents/standard/StartDato/StartDato'; @@ -31,6 +31,7 @@ import { useSoknad } from 'hooks/SoknadHook'; import { addBarnIfMissing, addFastlegeIfMissing, + deleteVedlegg, setSoknadStateFraProps, } from 'context/soknadcontext/actions'; import { getKrr, KrrKontaktInfo } from 'pages/api/oppslag/krr'; @@ -42,6 +43,8 @@ import { parse } from 'date-fns'; import { Fastlege, getFastlege } from 'pages/api/oppslag/fastlege'; import { migrerMellomlagretBehandler } from 'lib/utils/migrerMellomlagretBehandler'; import { getPerson, Person } from 'pages/api/oppslagapi/person'; +import { SoknadUtenVedleggModal } from 'components/pageComponents/standard/Oppsummering/SoknadUtenVedleggModal'; +import { isDev, isMock } from 'utils/environments'; interface PageProps { mellomlagretSøknad: SoknadContextState; @@ -60,6 +63,7 @@ const Steps = ({ person, mellomlagretSøknad, kontaktinformasjon, barn, fastlege const debouncedLagre = useDebounceLagreSoknad(); const [showFetchErrorMessage, setShowFetchErrorMessage] = useState(false); + const [showVedleggErrorMessage, setShowVedleggErrorMessage] = useState(false); const submitErrorMessageRef = useRef(null); useEffect(() => { @@ -98,6 +102,7 @@ const Steps = ({ person, mellomlagretSøknad, kontaktinformasjon, barn, fastlege const submitSoknad = async () => { if (currentStep?.name === StepNames.OPPSUMMERING) { setShowFetchErrorMessage(false); + setShowVedleggErrorMessage(false); const postResponse = await postSøknadMedAAPInnsending( søknadState.søknad, @@ -117,6 +122,8 @@ const Steps = ({ person, mellomlagretSøknad, kontaktinformasjon, barn, fastlege router.push('kvittering'); return true; + } else if (postResponse?.status === 412) { + setShowVedleggErrorMessage(true); } else { setShowFetchErrorMessage(true); } @@ -126,6 +133,16 @@ const Steps = ({ person, mellomlagretSøknad, kontaktinformasjon, barn, fastlege return false; }; + const removeAllVedleggFromSoknadAndSubmit = () => { + const alleVedlegg = søknadState?.søknad?.vedlegg; + Object.keys(alleVedlegg ?? {}).forEach((key) => { + const vedlegg = alleVedlegg?.[key]; + vedlegg?.forEach((vedlegg) => { + deleteVedlegg(søknadDispatch, vedlegg, key); + }); + }); + }; + const postSøknadMedAAPInnsending = async (søknad?: Soknad, requiredVedlegg?: RequiredVedlegg[]) => fetchPOST('/aap/soknad/api/innsending/soknadinnsending/', { søknad, @@ -186,6 +203,16 @@ const Steps = ({ person, mellomlagretSøknad, kontaktinformasjon, barn, fastlege )} )} + { + removeAllVedleggFromSoknadAndSubmit(); + setShowVedleggErrorMessage(false); + }} + onClose={() => { + setShowVedleggErrorMessage(false); + }} + /> )} diff --git a/pages/api/innsending/soknadinnsending.ts b/pages/api/innsending/soknadinnsending.ts index b5fff598..99f2f8bd 100644 --- a/pages/api/innsending/soknadinnsending.ts +++ b/pages/api/innsending/soknadinnsending.ts @@ -2,7 +2,7 @@ import { beskyttetApi } from 'auth/beskyttetApi'; import { logError, tokenXApiProxy } from '@navikt/aap-felles-utils'; import { NextApiRequest, NextApiResponse } from 'next'; import metrics from 'utils/metrics'; -import { ErrorMedStatus } from 'auth/ErrorMedStatus'; +import { ErrorMedStatus } from 'lib/utils/api/ErrorMedStatus'; import { isFunctionalTest, isMock } from 'utils/environments'; import { createIntl } from 'react-intl'; import { flattenMessages, messages } from 'utils/message'; @@ -117,7 +117,11 @@ export const sendSoknadViaAapInnsending = async ( return 'Vi har mottat søknaden din.'; } if (isMock()) { - await deleteCache(); + try { + await deleteCache(); + } catch (e) { + console.error(e); + } return 'Vi har mottat søknaden din.'; } try { @@ -131,6 +135,9 @@ export const sendSoknadViaAapInnsending = async ( return søknad; } catch (error) { logError('Noe gikk galt ved innsending av søknad', error); + if (error instanceof ErrorMedStatus) { + throw error; + } throw new Error('Error sending søknad via aap-innsending'); } };