Skip to content

Saves klage info in storage on update, reloads klage if page reloads. #165

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

Merged
merged 1 commit into from
Sep 24, 2020
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
32 changes: 30 additions & 2 deletions src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@ import { withRouter } from 'react-router-dom';
import queryString from 'query-string';
import { getTemaObject } from './services/klageService';
import { useDispatch } from 'react-redux';
import { setValgtYtelse, setValgtTema } from './store/actions';
import { setValgtYtelse, setValgtTema, setKlageId } from './store/actions';
import NotFoundPage from './pages/not-found/not-found-page';
import NavFrontendSpinner from 'nav-frontend-spinner';
import { CenteredContainer } from './styled-components/main-styled-components';
import { Tema } from './types/tema';

const App = (props: any) => {
const [loading, setLoading] = useState<boolean>(true);
Expand All @@ -20,6 +21,33 @@ const App = (props: any) => {
useEffect(() => {
if (props.location.search !== '') {
const query = queryString.parse(props.location.search);

if (sessionStorage.getItem('nav.klage.klageId') && query && !query.klageid) {
if (query.tema) {
let cachedTema = sessionStorage.getItem('nav.klage.tema');
let cachedYtelse = sessionStorage.getItem('nav.klage.ytelse');
if (cachedTema === query.tema) {
if (
cachedYtelse === query.ytelse ||
(query.ytelse === undefined && cachedYtelse === Tema[cachedTema])
) {
if (query.saksnummer || sessionStorage.getItem('nav.klage.saksnr')) {
if (query.saksnummer === sessionStorage.getItem('nav.klage.saksnr')) {
dispatch(setKlageId(sessionStorage.getItem('nav.klage.klageId') as string));
} else {
sessionStorage.removeItem('nav.klage.saksnr');
}
} else {
dispatch(setKlageId(sessionStorage.getItem('nav.klage.klageId') as string));
}
}
}
} else {
dispatch(setKlageId(sessionStorage.getItem('nav.klage.klageId') as string));
}
setLoading(false);
}

if (query && query.tema) {
const tema = query.tema.toString();
dispatch(setValgtTema(tema));
Expand All @@ -43,7 +71,7 @@ const App = (props: any) => {
} else {
setLoading(false);
}
}, [dispatch, props.location.search]);
}, [dispatch, props.location.search, props.chosenYtelse]);

if (loading) {
return (
Expand Down
59 changes: 25 additions & 34 deletions src/components/begrunnelse/begrunnelse.tsx
Original file line number Diff line number Diff line change
@@ -1,30 +1,28 @@
import React, { useState, useRef, useEffect } from 'react';
import { Textarea, RadioPanelGruppe } from 'nav-frontend-skjema';
import React, { useEffect, useRef, useState } from 'react';
import { RadioPanelGruppe, Textarea } from 'nav-frontend-skjema';
import {
MarginContainer,
CenteredContainer,
FlexCenteredContainer,
Margin40Container,
Margin48Container,
Margin48TopContainer,
MarginTopContainer,
Margin40Container,
CenteredContainer
MarginContainer,
MarginTopContainer
} from '../../styled-components/main-styled-components';
import { Hovedknapp, Knapp } from 'nav-frontend-knapper';
import { Normaltekst, Undertittel, Element, Undertekst } from 'nav-frontend-typografi';
import { VEDLEGG_STATUS, VedleggProps, toVedleggProps, VedleggErrorMessages } from '../../types/vedlegg';
import { Element, Normaltekst, Undertekst, Undertittel } from 'nav-frontend-typografi';
import { toVedleggProps, VEDLEGG_STATUS, VedleggErrorMessages, VedleggProps } from '../../types/vedlegg';
import VedleggVisning from './vedlegg';
import { postNewKlage, updateKlage } from '../../store/actions';
import { useSelector, useDispatch } from 'react-redux';
import { postNewKlage, setKlageId, updateKlage } from '../../store/actions';
import { useDispatch, useSelector } from 'react-redux';
import { Store } from '../../store/reducer';
import { addVedleggToKlage, deleteVedlegg } from '../../services/fileService';
import { klageSkjemaBasertPaaVedtak, KlageSkjema } from '../../types/klage';
import { isValidDateString, toISOString } from '../../utils/date-util';
import { AlertStripeFeil } from 'nav-frontend-alertstriper';
import { KlageSkjema, klageSkjemaBasertPaaVedtak } from '../../types/klage';
import { toISOString } from '../../utils/date-util';
import AlertStripe, { AlertStripeFeil } from 'nav-frontend-alertstriper';
import { datoValg } from './datoValg';
import { Datovelger } from 'nav-datovelger';
import NavFrontendSpinner from 'nav-frontend-spinner';
import AlertStripe from 'nav-frontend-alertstriper';
import { Tema } from '../../types/tema';
import { getReferrer } from '../../services/klageService';

const Begrunnelse = (props: any) => {
Expand All @@ -41,36 +39,26 @@ const Begrunnelse = (props: any) => {
const [submitted, setSubmitted] = useState<boolean>(false);

useEffect(() => {
if ((!activeKlage || !activeKlage.id) && klageId === '') {
if (klageId === '') {
let klageskjema: KlageSkjema;
if (props.chosenVedtak) {
klageskjema = klageSkjemaBasertPaaVedtak(props.chosenVedtak);
klageskjema.referrer = getReferrer();
} else {
klageskjema = {
fritekst: activeBegrunnelse,
tema: 'UKJ',
ytelse: Tema['UKJ'],
datoalternativ: datoalternativ,
saksnummer: '',
referrer: getReferrer()
};
if (activeDatoISO !== '' && isValidDateString(activeDatoISO)) {
klageskjema.vedtaksdatoobjekt = new Date(activeDatoISO);
} else {
klageskjema.vedtaksdatoobjekt = undefined;
}
dispatch(postNewKlage(klageskjema));
}
dispatch(postNewKlage(klageskjema));
}
}, [activeKlage, dispatch, activeBegrunnelse, activeDatoISO, datoalternativ, props.chosenVedtak, klageId]);
}, [dispatch, props.chosenVedtak, klageId]);

useEffect(() => {
setActiveBegrunnelse(activeKlage.fritekst);
setDatoalternativ(activeKlageSkjema.datoalternativ);
if (activeKlage.id !== undefined) {
dispatch(setKlageId(String(activeKlage.id)));
}
if (activeKlageSkjema.vedtaksdatoobjekt) {
setActiveDatoISO(toISOString(activeKlageSkjema.vedtaksdatoobjekt));
}
}, [activeKlage, activeKlageSkjema]);
}, [dispatch, activeKlage, activeKlageSkjema]);

const INPUTDESCRIPTION =
'Skriv inn hvilke endringer du ønsker i vedtaket, og beskriv hva du begrunner klagen med. Legg ved dokumenter som du mener kan være til støtte for klagen.';
Expand Down Expand Up @@ -108,7 +96,10 @@ const Begrunnelse = (props: any) => {
console.log(response);
dispatch({
type: 'VEDLEGG_ADD_SUCCESS',
value: { status: VEDLEGG_STATUS.OK, vedlegg: toVedleggProps(response) }
value: {
status: VEDLEGG_STATUS.OK,
vedlegg: toVedleggProps(response)
}
});
setVedleggLoading(false);
})
Expand Down
20 changes: 13 additions & 7 deletions src/components/form-landing/form-landing.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,24 +11,31 @@ import Error from '../../components/error/error';

const FormLanding = (props: any) => {
const dispatch = useDispatch();
const { loading, chosenTema, chosenYtelse, getKlageError } = useSelector((state: Store) => state);
const { loading, chosenTema, chosenYtelse, getKlageError, klageId, activeKlage } = useSelector(
(state: Store) => state
);

const [chosenVedtak, setChosenVedtak] = useState<Vedtak>();
const [temaNotSet, setTemaNotSet] = useState<boolean>(false);

useEffect(() => {
if (validVedtakQuery(props.query)) {
dispatch(checkAuth(props.location.search));
if (props.query.klageid) {
dispatch(setKlageId(props.query.klageid as string))
dispatch(getExistingKlage(parseInt(props.query.klageid as string)))
if (props.query.klageid && klageId === '') {
dispatch(setKlageId(props.query.klageid as string));
} else {
setChosenVedtak(elementAsVedtak(props.query));
}
} else {
setTemaNotSet(chosenTema === '');
}
}, [dispatch, props.location.search, props.query, chosenTema]);
}, [dispatch, props.location.search, props.query, klageId, chosenTema]);

useEffect(() => {
if (klageId !== '' && activeKlage.tema === '') {
dispatch(getExistingKlage(parseInt(klageId)));
}
}, [dispatch, klageId, activeKlage]);

logInfo('Form landing page visited.', { chosenYtelse: chosenYtelse, referrer: document.referrer });

Expand All @@ -49,8 +56,7 @@ const FormLanding = (props: any) => {
<Error
error={{
code: 400,
text:
'Klagen du ba om kan ikke hentes. Prøv på nytt fra lenken på Ditt NAV.'
text: 'Klagen du ba om kan ikke hentes. Prøv på nytt fra lenken på Ditt NAV.'
}}
/>
);
Expand Down
3 changes: 1 addition & 2 deletions src/pages/form-landing-page/main-form-page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,7 @@ const MainFormPage = (props: Props) => {
};

const previous = () => {
history.push(activeRoutes[activeStep - 1].path);
setActiveStep(activeStep - 1);
history.goBack();
};

return (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,10 @@ const OppsummeringSkjemaPage = (props: any) => {
finalizeKlage(activeKlage.id)
.then(response => {
const finalizedDate = response.finalizedDate;
sessionStorage.removeItem('nav.klage.klageId');
sessionStorage.removeItem('nav.klage.tema');
sessionStorage.removeItem('nav.klage.ytelse');
sessionStorage.removeItem('nav.klage.saksnr');
history.push({ pathname: `/kvittering`, state: { finalizedDate } });
setIsLoading(false);
// TODO: Set success message
Expand Down
26 changes: 25 additions & 1 deletion src/store/actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ export function postNewKlage(klageskjema: KlageSkjema) {
return function (dispatch: Dispatch<ActionTypes>) {
return postKlage(klageSkjemaTilKlage(klageskjema))
.then(response => {
setKlageId((response.id as unknown) as string, response.tema, response.ytelse, response.saksnummer);
dispatch({ type: 'KLAGE_POST_SUCCESS', payload: response, klageskjema: klageskjema });
})
.catch(err => {
Expand All @@ -95,10 +96,17 @@ export function getExistingKlage(klageId: number) {
return function (dispatch: Dispatch<ActionTypes>) {
return getKlage(klageId)
.then(response => {
setStorageContent(response.tema, response.ytelse, response.saksnummer || '');
dispatch({ type: 'KLAGE_GET_SUCCESS', payload: response });
})
.catch(err => {
logError(err, 'Get existing klage failed');
if (err.response.status !== 401) {
sessionStorage.removeItem('nav.klage.klageId');
sessionStorage.removeItem('nav.klage.tema');
sessionStorage.removeItem('nav.klage.ytelse');
sessionStorage.removeItem('nav.klage.saksnr');
}
dispatch({ type: 'KLAGE_GET_ERROR' });
});
};
Expand All @@ -116,12 +124,28 @@ export function setValgtTema(tema: string) {
};
}

export function setKlageId(klageId: string) {
export function setKlageId(
klageId: string,
tema: string = '*UNKNOWN*',
ytelse: string = '*UNKNOWN*',
saksnr: string = ''
) {
sessionStorage.setItem('nav.klage.klageId', klageId);
if (tema !== '*UNKNOWN*' && ytelse !== '*UNKNOWN*') {
setStorageContent(tema, ytelse, saksnr);
}

return function (dispatch: Dispatch<ActionTypes>) {
return dispatch({ type: 'KLAGE_ID_SET', value: klageId });
};
}

export function setStorageContent(tema: string, ytelse: string, saksnr: string) {
sessionStorage.setItem('nav.klage.tema', tema);
sessionStorage.setItem('nav.klage.ytelse', ytelse);
sessionStorage.setItem('nav.klage.saksnr', saksnr);
}

export function sjekkAuth(response: Response, params: string) {
if (response.status === 401 || response.status === 403) {
window.location.assign(getLoginserviceRedirectUrl(encodeURIComponent(decodeURI(params))));
Expand Down
4 changes: 2 additions & 2 deletions src/store/reducer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,7 @@ const reducer = (state = initialState, action: ActionTypes): Store => {
return {
...state,
activeKlage: action.payload,
activeKlageSkjema: { ...state.activeKlageSkjema, ...action.klageskjema, ...action.payload },
klageId: action.payload.id?.toString() ?? initialState.klageId
activeKlageSkjema: { ...state.activeKlageSkjema, ...action.klageskjema, ...action.payload }
};
case 'KLAGE_GET_SUCCESS':
const incomingVedlegg = action.payload.vedlegg?.map(function (e): VedleggProps {
Expand All @@ -105,6 +104,7 @@ const reducer = (state = initialState, action: ActionTypes): Store => {
activeKlage: action.payload,
activeKlageSkjema: klageTilKlageSkjema(action.payload),
chosenYtelse: action.payload.ytelse,
chosenTema: action.payload.tema,
activeVedlegg: incomingVedlegg!!,
klageId: action.payload.id?.toString() ?? initialState.klageId
};
Expand Down