diff --git a/components/pageComponents/standard/Kvittering/Kvittering.tsx b/components/pageComponents/standard/Kvittering/Kvittering.tsx index ee3fa06d..1cdb77ff 100644 --- a/components/pageComponents/standard/Kvittering/Kvittering.tsx +++ b/components/pageComponents/standard/Kvittering/Kvittering.tsx @@ -1,17 +1,18 @@ import { Alert, BodyLong, BodyShort, Button, Heading, Link } from '@navikt/ds-react'; import React from 'react'; import * as classes from './Kvittering.module.css'; -import { KontaktInfoView, SøkerView } from 'context/sokerOppslagContext'; import { SuccessStroke } from '@navikt/ds-icons'; import { clientSideIsProd, isFunctionalTest } from 'utils/environments'; import { FormattedMessage, useIntl } from 'react-intl'; +import { KrrKontaktInfo } from 'pages/api/oppslag/krr'; +import { Person } from 'pages/api/oppslagapi/person'; -interface StudentProps { - søker: SøkerView; - kontaktinformasjon?: KontaktInfoView; +interface Props { + person: Person; + kontaktinformasjon?: KrrKontaktInfo; } -const Kvittering = ({ søker, kontaktinformasjon }: StudentProps) => { +const Kvittering = ({ person, kontaktinformasjon }: Props) => { const { formatMessage } = useIntl(); const mineAapUrl = () => { @@ -39,7 +40,7 @@ const Kvittering = ({ søker, kontaktinformasjon }: StudentProps) => { aria-hidden={true} /> - + {formatMessage({ id: 'søknad.kvittering.alert.text' })} diff --git a/components/pageComponents/standard/Oppsummering/Oppsummering.tsx b/components/pageComponents/standard/Oppsummering/Oppsummering.tsx index c96efb51..2a8ce58e 100644 --- a/components/pageComponents/standard/Oppsummering/Oppsummering.tsx +++ b/components/pageComponents/standard/Oppsummering/Oppsummering.tsx @@ -48,17 +48,19 @@ import { useFormErrors } from 'hooks/FormErrorHook'; import { setFocusOnErrorSummary } from 'components/schema/FormErrorSummary'; import { useSoknad } from 'hooks/SoknadHook'; import { updateSøknadData } from 'context/soknadcontext/actions'; -import { KontaktInfoView } from 'context/sokerOppslagContext'; import { OppsummeringBarn } from 'components/pageComponents/standard/Oppsummering/OppsummeringBarn/OppsummeringBarn'; // eslint-disable-next-line max-len import { OppsummeringManuelleBarn } from 'components/pageComponents/standard/Oppsummering/OppsummeringBarn/OppsummeringManuelleBarn'; +import { Person } from 'pages/api/oppslagapi/person'; +import { KrrKontaktInfo } from 'pages/api/oppslag/krr'; interface OppsummeringProps { onBackClick: () => void; onSubmitSoknad: () => Promise; submitErrorMessageRef: React.MutableRefObject; hasSubmitError: boolean; - kontaktinformasjon: KontaktInfoView | null; + kontaktinformasjon: KrrKontaktInfo | null; + person: Person; } const Oppsummering = ({ @@ -67,6 +69,7 @@ const Oppsummering = ({ submitErrorMessageRef, hasSubmitError, kontaktinformasjon, + person, }: OppsummeringProps) => { const { formatMessage } = useIntl(); const [nextIsLoading, setNextIsLoading] = useState(false); @@ -181,7 +184,7 @@ const Oppsummering = ({ showEdit={false} toggleAll={toggleAll} > - + { +const OppsummeringKontaktinfo = ({ kontaktinformasjon, person }: Props) => { const { formatMessage } = useIntl(); - const { søker } = useSokerOppslag(); return ( <>
- {søker?.fulltNavn} + {person?.navn}
- {søker?.fullAdresse && ( + {person?.adresse && (
- {søker?.fullAdresse} + {person.adresse} void; - søker: SokerOppslagState; + person: Person; } -export const Steg0 = ({ onNext, søker }: Props) => { +export const Steg0 = ({ onNext, person }: Props) => { const { formatMessage } = useIntl(); return ( @@ -21,7 +20,7 @@ export const Steg0 = ({ onNext, søker }: Props) => { onNext={onNext} nextButtonText={formatMessage({ id: 'navigation.next' })} > - +
- +
handleSubmit(event)} autoComplete="off"> ; -}; - -export type SøkerView = { - fulltNavn?: string; - fullAdresse?: string; - fødselsnummer?: string; -}; -export type KontaktInfoView = { - epost?: string; - mobil?: string; -}; -export type SokerOppslagState = { - søker: Soker; - behandlere: Fastlege[]; - kontaktinformasjon?: KontaktInfoView; -}; -const søkerOppslagInitialValue = { - barn: [], -}; -type SokerOppslagContextState = { - oppslagDispatch: Dispatch; - søker: SøkerView; - kontaktInfo?: KontaktInfoView; -}; -const SokerOppslagContext = createContext(undefined); - -function stateReducer(state: SokerOppslagState, action: DispatchSokerOppslagAction) { - switch (action.type) { - case 'SET_SOKER_OPPSLAG': { - return { ...state, ...action.payload }; - } - default: { - throw new Error(`Unhandled action type: ${action.type}`); - } - } -} -interface Props { - children: ReactNode; -} -function SokerOppslagProvider({ children }: Props) { - const [state, dispatch] = useReducer(stateReducer, søkerOppslagInitialValue); - const søker: SøkerView | undefined = useMemo( - () => ({ - fulltNavn: formatNavn(state?.søker?.navn), - fullAdresse: state?.søker?.adresse ? formatFullAdresse(state?.søker?.adresse) : '', - fødselsnummer: state?.søker?.fødselsnummer, - }), - [state], - ); - const kontaktInfo: KontaktInfoView | undefined = useMemo( - () => ({ - epost: state?.kontaktinformasjon?.epost, - mobil: state?.kontaktinformasjon?.mobil, - }), - [state], - ); - const contextValue = useMemo(() => { - return { - oppslagDispatch: dispatch, - søker, - kontaktInfo, - }; - }, [state, dispatch]); - return ( - {children} - ); -} - -export const setSokerOppslagFraProps = ( - oppslag: SokerOppslagState, - dispatch: Dispatch, -) => { - dispatch({ - type: 'SET_SOKER_OPPSLAG', - payload: oppslag, - }); - return oppslag; -}; - -function useSokerOppslag() { - const context = useContext(SokerOppslagContext); - if (context === undefined) { - throw new Error('useRegisterOppslag must be used within a RegisterOppslagProvider'); - } - return context; -} - -export { SokerOppslagProvider, useSokerOppslag }; diff --git "a/lib/s\303\270ker.ts" "b/lib/s\303\270ker.ts" deleted file mode 100644 index 91799978..00000000 --- "a/lib/s\303\270ker.ts" +++ /dev/null @@ -1,5 +0,0 @@ -import { Soker } from '../context/sokerOppslagContext'; - -export const getFulltNavn = (søker: Soker) => { - return `${søker.navn.fornavn ?? ''} ${søker.navn.mellomnavn ?? ''} ${søker.navn.etternavn ?? ''}`; -}; diff --git a/lib/utils/TokenxProxy.ts b/lib/utils/TokenxProxy.ts deleted file mode 100644 index 3081c02a..00000000 --- a/lib/utils/TokenxProxy.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { proxyApiRouteRequest } from '@navikt/next-api-proxy'; -import { NextApiRequest, NextApiResponse } from 'next'; -import { getAccessTokenFromRequest, getTokenX, logError, logInfo } from '@navikt/aap-felles-utils'; -import metrics from '../../utils/metrics'; - -export const tokenXProxy = async ( - req: NextApiRequest, - res: NextApiResponse, - path: string, - prometheusPath: string, -) => { - const accessToken = getAccessTokenFromRequest(req)?.substring('Bearer '.length)!; - let tokenxToken; - try { - tokenxToken = await getTokenX(accessToken, process.env.SOKNAD_API_AUDIENCE!); - } catch (err: any) { - logError('getTokenXError', err); - } - const stopTimer = metrics.backendApiDurationHistogram.startTimer({ path: prometheusPath }); - const result = await proxyApiRouteRequest({ - req, - res, - hostname: 'soknad-api', - path: path, - bearerToken: tokenxToken, - https: false, - }); - - logInfo(`res from tokenXProxy: ${res.status}`); - stopTimer(); - - return result; -}; diff --git a/mock/krr.ts b/mock/krr.ts index 41503ec6..ea67976e 100644 --- a/mock/krr.ts +++ b/mock/krr.ts @@ -1,6 +1,6 @@ -import { KontaktInfoView } from 'context/sokerOppslagContext'; +import { KrrKontaktInfo } from 'pages/api/oppslag/krr'; -export const mockKrr = (): KontaktInfoView => ({ +export const mockKrr = (): KrrKontaktInfo => ({ epost: 'mail@nomail.example', mobil: '999 99 999', }); diff --git a/mock/person.ts b/mock/person.ts index 7b1d1db2..5996632d 100644 --- a/mock/person.ts +++ b/mock/person.ts @@ -3,7 +3,7 @@ import { Person } from 'pages/api/oppslagapi/person'; import { formatDate } from 'utils/date'; export const MockPerson: Person = { - navn: 'Jackie Li', + navn: 'Jackie LiLi', fnr: '12345678910', adresse: 'Oslo', fødseldato: formatDate(sub(new Date(), { years: 30 }), 'yyyy-MM-dd')!, diff --git a/pages/[step].tsx b/pages/[step].tsx index 229ed833..ac42db98 100644 --- a/pages/[step].tsx +++ b/pages/[step].tsx @@ -5,12 +5,6 @@ import { completeAndGoToNextStep, goToPreviousStep, setStepList } from 'context/ import { useStepWizard } from 'hooks/StepWizardHook'; import { useDebounceLagreSoknad } from 'hooks/useDebounceLagreSoknad'; import { StepWizard } from 'components/StepWizard'; -import { - KontaktInfoView, - setSokerOppslagFraProps, - SokerOppslagState, - useSokerOppslag, -} from 'context/sokerOppslagContext'; import { Soknad } from 'types/Soknad'; import { fetchPOST } from 'api/fetch'; import { StepNames } from './index'; @@ -26,7 +20,6 @@ import Oppsummering from 'components/pageComponents/standard/Oppsummering/Oppsum import { beskyttetSide } from 'auth/beskyttetSide'; import { GetServerSidePropsResult, NextPageContext } from 'next'; import { getAccessToken } from 'auth/accessToken'; -import { getSøker } from './api/oppslag/soeker'; import { logSkjemaFullførtEvent, logVeiledningVistEvent } from 'utils/amplitude'; import metrics from 'utils/metrics'; import { scrollRefIntoView } from 'utils/dom'; @@ -40,30 +33,29 @@ import { addFastlegeIfMissing, setSoknadStateFraProps, } from 'context/soknadcontext/actions'; -import { getKrr } from 'pages/api/oppslag/krr'; +import { getKrr, KrrKontaktInfo } from 'pages/api/oppslag/krr'; import { Barn, getBarn } from 'pages/api/oppslag/barn'; -import { formatNavn } from 'utils/StringFormatters'; import { hentMellomlagring } from 'pages/api/mellomlagring/les'; import { RequiredVedlegg } from 'types/SoknadContext'; import { logError, logInfo, logWarning } from '@navikt/aap-felles-utils'; 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'; interface PageProps { - søker: SokerOppslagState; mellomlagretSøknad: SoknadContextState; - kontaktinformasjon: KontaktInfoView | null; + kontaktinformasjon: KrrKontaktInfo | null; + person: Person; barn: Barn[]; fastlege: Fastlege[]; } -const Steps = ({ søker, mellomlagretSøknad, kontaktinformasjon, barn, fastlege }: PageProps) => { +const Steps = ({ person, mellomlagretSøknad, kontaktinformasjon, barn, fastlege }: PageProps) => { const router = useRouter(); const { step } = router.query; const { søknadState, søknadDispatch } = useSoknad(); - const { oppslagDispatch } = useSokerOppslag(); const { currentStep, stepList, stepWizardDispatch } = useStepWizard(); const debouncedLagre = useDebounceLagreSoknad(); @@ -76,7 +68,6 @@ const Steps = ({ søker, mellomlagretSøknad, kontaktinformasjon, barn, fastlege if (mellomlagretSøknad.lagretStepList && mellomlagretSøknad?.lagretStepList?.length > 0) { setStepList([...mellomlagretSøknad.lagretStepList], stepWizardDispatch); } - setSokerOppslagFraProps(søker, oppslagDispatch); if (barn) addBarnIfMissing(søknadDispatch, barn); if (fastlege) addFastlegeIfMissing(søknadDispatch, fastlege); @@ -161,7 +152,7 @@ const Steps = ({ søker, mellomlagretSøknad, kontaktinformasjon, barn, fastlege
{step === '0' ? ( { router.push('1', undefined, { scroll: true }); }} @@ -190,6 +181,7 @@ const Steps = ({ søker, mellomlagretSøknad, kontaktinformasjon, barn, fastlege submitErrorMessageRef={submitErrorMessageRef} hasSubmitError={showFetchErrorMessage} kontaktinformasjon={kontaktinformasjon} + person={person} /> )} @@ -221,8 +213,8 @@ export const getServerSideProps = beskyttetSide( path: '/[steg]', }); const bearerToken = getAccessToken(ctx); - const søker = await getSøker(bearerToken); - let kontaktinformasjon = null; + const person = await getPerson(ctx.req); + let kontaktinformasjon: KrrKontaktInfo | null = null; try { kontaktinformasjon = await getKrr(bearerToken); } catch (e) { @@ -271,7 +263,7 @@ export const getServerSideProps = beskyttetSide( } return { - props: { søker, mellomlagretSøknad, kontaktinformasjon, barn, fastlege }, + props: { person, mellomlagretSøknad, kontaktinformasjon, barn, fastlege }, }; }, ); diff --git a/pages/_app.tsx b/pages/_app.tsx index d71307a8..d28a554d 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -6,7 +6,6 @@ import { IntlProvider } from 'react-intl'; import { AppProps } from 'next/app'; import links from 'translations/links.json'; import { messages, flattenMessages } from 'utils/message'; -import { SokerOppslagProvider } from 'context/sokerOppslagContext'; import { StepWizardProvider } from 'context/stepWizardContext'; import { initAmplitude } from 'utils/amplitude'; import { AppStateContextProvider } from 'context/appStateContext'; @@ -53,16 +52,14 @@ const CustomApp = ({ Component, pageProps }: AppProps) => { return ( - - - - - Søknad om arbeidsavklaringspenger (AAP) - - - - - + + + + Søknad om arbeidsavklaringspenger (AAP) + + + + ); diff --git a/pages/api/oppslag/journalpost.ts b/pages/api/oppslag/journalpost.ts deleted file mode 100644 index 308afb20..00000000 --- a/pages/api/oppslag/journalpost.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { NextApiRequest, NextApiResponse } from 'next'; -import { beskyttetApi } from 'auth/beskyttetApi'; -import { getStringFromPossiblyArrayQuery } from 'utils/string'; -import { tokenXProxy } from '../../../lib/utils/TokenxProxy'; - -const handler = beskyttetApi(async (req: NextApiRequest, res: NextApiResponse) => { - const journalpostId = getStringFromPossiblyArrayQuery(req.query.journalpostId); - if (!journalpostId) { - res.status(400).json({ error: 'journalpostId må være en string' }); - } - - return await tokenXProxy( - req, - res, - `/oppslag/soeknad/journalpost/${journalpostId}`, - 'oppslag/soeknad/journalpost/{journalpostId}' - ); -}); - -export const config = { - api: { - responseLimit: '50mb', - }, -}; - -export default handler; diff --git a/pages/api/oppslag/krr.ts b/pages/api/oppslag/krr.ts index 80e32257..feb33822 100644 --- a/pages/api/oppslag/krr.ts +++ b/pages/api/oppslag/krr.ts @@ -4,7 +4,6 @@ import { beskyttetApi } from 'auth/beskyttetApi'; import { logError, tokenXApiProxy } from '@navikt/aap-felles-utils'; import { isMock } from 'utils/environments'; import metrics from 'utils/metrics'; -import { KontaktInfoView } from 'context/sokerOppslagContext'; import { mockKrr } from 'mock/krr'; import { z } from 'zod'; @@ -12,13 +11,14 @@ const KrrInfo = z.object({ epost: z.string().nullable(), mobil: z.string().nullable(), }); +export type KrrKontaktInfo = z.infer; const handler = beskyttetApi(async (req: NextApiRequest, res: NextApiResponse) => { const accessToken = getAccessTokenFromRequest(req); res.status(200).json(await getKrr(accessToken)); }); export const getKrr = async (accessToken?: string) => { - const krr: KontaktInfoView = isMock() + const krr: KrrKontaktInfo = isMock() ? mockKrr() : await tokenXApiProxy({ url: `${process.env.OPPSLAG_URL}/krr`, @@ -32,7 +32,7 @@ export const getKrr = async (accessToken?: string) => { const validatedResponse = KrrInfo.safeParse(krr); if (!validatedResponse.success) { logError(`oppslag/krr valideringsfeil: ${validatedResponse.error.message}`); - return {}; + return null; } return validatedResponse.data; }; diff --git a/pages/api/oppslag/soeker.ts b/pages/api/oppslag/soeker.ts deleted file mode 100644 index 50aa798a..00000000 --- a/pages/api/oppslag/soeker.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { NextApiRequest, NextApiResponse } from 'next'; -import { getAccessTokenFromRequest } from 'auth/accessToken'; -import { beskyttetApi } from 'auth/beskyttetApi'; -import { tokenXApiProxy } from '@navikt/aap-felles-utils'; -import { mockSøker } from 'mock/søker'; -import { isMock } from 'utils/environments'; -import metrics from 'utils/metrics'; -import { SokerOppslagState } from 'context/sokerOppslagContext'; - -const handler = beskyttetApi(async (req: NextApiRequest, res: NextApiResponse) => { - const accessToken = getAccessTokenFromRequest(req); - res.status(200).json(await getSøker(accessToken)); -}); -export const getSøker = async (accessToken?: string): Promise => { - if (isMock()) return mockSøker; - const søker = await tokenXApiProxy({ - url: `${process.env.SOKNAD_API_URL}/oppslag/soeker`, - prometheusPath: 'oppslag/soeker', - method: 'GET', - audience: process.env.SOKNAD_API_AUDIENCE!, - bearerToken: accessToken, - metricsStatusCodeCounter: metrics.backendApiStatusCodeCounter, - metricsTimer: metrics.backendApiDurationHistogram, - }); - return søker; -}; - -export default handler; diff --git a/pages/index.tsx b/pages/index.tsx index 1368c354..5cb48e2f 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -1,6 +1,5 @@ import { Veiledning } from 'components/pageComponents/standard/Veiledning/Veiledning'; import React, { useEffect, useRef, useState } from 'react'; -import { SøkerView } from 'context/sokerOppslagContext'; import { useRouter } from 'next/router'; import { GetServerSidePropsResult, NextPageContext } from 'next/types'; import { beskyttetSide } from 'auth/beskyttetSide'; @@ -51,17 +50,6 @@ const Introduksjon = ({ person }: PageProps) => { const errorMessageRef = useRef(null); - const [soker, setSoker] = useState({}); - - useEffect(() => { - if (person.navn) { - const _søker: SøkerView = { - fulltNavn: person.navn, - }; - setSoker(_søker); - } - }, [person, setSoker]); - const startSoknad = async () => { setIsLoading(true); setHasError(false); @@ -89,7 +77,7 @@ const Introduksjon = ({ person }: PageProps) => { return ( <> { +const KvitteringPage = ({ person, kontaktinformasjon }: PageProps) => { const [soker, setSoker] = useState({}); - useEffect(() => { - if (søker?.søker) { - const _søker: SøkerView = { - fulltNavn: `${søker.søker.navn.fornavn ?? ''} ${søker.søker.navn.mellomnavn ?? ''} ${ - søker.søker.navn.etternavn ?? '' - }`, - }; - setSoker(_søker); - } - }, [søker, setSoker]); - return ( <>­ }} /> - + ); }; @@ -47,12 +35,12 @@ export const getServerSideProps = beskyttetSide( path: '/kvittering', }); const bearerToken = getAccessToken(ctx); - const søker = await getSøker(bearerToken); + const person = await getPerson(ctx.req); const kontaktinformasjon = await getKrr(bearerToken); stopTimer(); return { - props: { søker, kontaktinformasjon }, + props: { person, kontaktinformasjon }, }; }, );