Skip to content

Commit 2bda296

Browse files
committed
wip
1 parent 327f068 commit 2bda296

17 files changed

+224
-115
lines changed

src/actions/form/submitForm.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { KartleggingssporsmalForm, kartleggingssporsmalFormSchema } from '@/doma
44
import { getServerEnv, isLocalOrDemo } from '@/constants/envs'
55
import { verifyUserLoggedIn } from '@/auth/rsc'
66
import { exchangeIdportenTokenForMeroppfolgingBackendTokenx } from '@/auth/tokenUtils'
7+
import { mapAppFormToSnapshot } from '@/utils/form'
78

89
export async function submitFormAction(formValues: KartleggingssporsmalForm) {
910
//await new Promise((resolve) => setTimeout(resolve, 2000))
@@ -22,8 +23,10 @@ export async function submitFormAction(formValues: KartleggingssporsmalForm) {
2223

2324
const { MEROPPFOLGING_BACKEND_URL } = getServerEnv()
2425
const url = new URL('/api/v1/kartleggingssporsmal', MEROPPFOLGING_BACKEND_URL)
26+
27+
const fieldSnapshots = mapAppFormToSnapshot({ values: parsed.data })
28+
2529
try {
26-
console.log('fieldsnapshot: ', formData)
2730
await fetch(url, {
2831
method: 'POST',
2932
headers: {
@@ -35,7 +38,7 @@ export async function submitFormAction(formValues: KartleggingssporsmalForm) {
3538
formIdentifier: 'kartleggingsporsmal',
3639
formSemanticVersion: '1.0.0',
3740
formSnapshotVersion: '1.0.0',
38-
fieldSnapshots: formData,
41+
fieldSnapshots: fieldSnapshots,
3942
},
4043
}),
4144
})

src/app/form/FormClient.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ import { submitFormAction } from '@/actions/form/submitForm'
1313
import NextLink from 'next/link'
1414
import { CONTACT_NAV_URL } from '@/constants'
1515
import KartleggingssporsmalFormSummary, {
16-
type FormSummaryItem,
17-
} from '@/features/kartleggingssporsmal/KartleggingssporsmalFormSummary'
16+
FormSummaryItem,
17+
} from '@/features/kartleggingssporsmal/summary/KartleggingssporsmalFormSummary'
1818

1919
type Props = { alreadyAnswered: boolean; initialSummaryItems?: FormSummaryItem[] | null }
2020

@@ -73,7 +73,6 @@ export default function FormClient({ alreadyAnswered, initialSummaryItems }: Pro
7373

7474
return (
7575
<>
76-
<h1>Kartlegging av din situasjon</h1>
7776
{displaySummary && (
7877
<>
7978
{justSubmitted && (
@@ -95,7 +94,7 @@ export default function FormClient({ alreadyAnswered, initialSummaryItems }: Pro
9594
</Link>{' '}
9695
(åpner i ny fane) hvis det skulle være noe.{' '}
9796
</BodyShort>
98-
<KartleggingssporsmalFormSummary items={summaryItems} />
97+
<KartleggingssporsmalFormSummary items={summaryItems || []} />
9998
</>
10099
)}
101100

src/app/form/page.tsx

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,5 @@
1-
import { fetchKandidatStatus } from '@/services/meroppfolging/meroppfolging-service'
1+
import FormClient from '@/app/form/FormClient'
22

33
export default async function FormPage() {
4-
let lastestResponse = null
5-
let initialSummaryItems: FormSummaryItem[] | null = null
6-
7-
try {
8-
const status = await fetchKandidatStatus()
9-
lastestResponse = status.formResponse?.formSnapshot
10-
if (lastestResponse) {
11-
initialSummaryItems = mapFormSnapshotResponseToSummaryItems(lastestResponse)
12-
}
13-
} catch {}
14-
15-
return <FormClient alreadyAnswered={!!lastestResponse} initialSummaryItems={initialSummaryItems} />
4+
return <FormClient alreadyAnswered={false} initialSummaryItems={null} />
165
}

src/app/layout.tsx

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,35 @@ import Script from 'next/script'
55
import '@navikt/ds-css'
66
import { fetchDecoratorReact } from '@navikt/nav-dekoratoren-moduler/ssr'
77

8-
import { Page } from '@navikt/ds-react'
8+
import { Box, Page } from '@navikt/ds-react'
99
import { PageBlock } from '@navikt/ds-react/Page'
10+
import { publicEnv } from '@/constants/envs'
1011

1112
export const metadata: Metadata = {
1213
title: 'Behovsrettet oppfølging',
1314
description: 'Skjema for behovsrettet oppfølging',
1415
}
1516

17+
function getDecoratorEnv(): 'dev' | 'prod' {
18+
switch (publicEnv.NEXT_PUBLIC_RUNTIME_ENVIRONMENT) {
19+
case 'local':
20+
case 'test':
21+
case 'dev':
22+
return 'dev'
23+
default:
24+
return 'prod'
25+
}
26+
}
27+
1628
const RootLayout = async ({ children }: Readonly<{ children: React.ReactNode }>) => {
1729
const Decorator = await fetchDecoratorReact({
18-
env: 'dev',
30+
env: getDecoratorEnv(),
31+
params: {
32+
language: 'nb',
33+
context: 'privatperson',
34+
logoutWarning: true,
35+
redirectToApp: true,
36+
},
1937
})
2038

2139
return (
@@ -27,7 +45,7 @@ const RootLayout = async ({ children }: Readonly<{ children: React.ReactNode }>)
2745
<Page footer={<Decorator.Footer />}>
2846
<Decorator.Header />
2947
<PageBlock as="main" width="lg" gutters>
30-
{children}
48+
<Box className="pt-6">{children}</Box>
3149
</PageBlock>
3250
<Decorator.Scripts loader={Script} />
3351
</Page>

src/domain/kartleggingsspormaFormValues.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,17 @@ export const kartleggingsspormalFormQuestions = {
1818
label: 'Hvordan vil du beskrive samarbeidet og relasjonen mellom deg og arbeidsgiveren din?',
1919
required: true,
2020
options: [
21-
{ id: '2a', label: 'Jeg opplever forholdet vårt som godt' },
22-
{ id: '2b', label: 'Jeg opplever ikke forholdet vårt som godt' },
21+
{ id: '2a', label: 'Jeg opplever samarbeidet og relasjonen som god' },
22+
{ id: '2b', label: 'Jeg opplever samarbeidet og relasjonen som dårlig' },
2323
],
2424
},
2525
naarTilbakeTilJobben: {
2626
type: 'RADIO_GROUP',
27-
label: 'Hvor lenge tror du at du har behov for å være sykmeldt?',
27+
label: 'Hvor lenge tror du at du kommer til å være sykmeldt?',
2828
required: true,
2929
options: [
30-
{ id: '3a', label: 'Mindre enn 26 uker (6 måneder) totalt' },
31-
{ id: '3b', label: 'Mer enn 26 uker (6 måneder) totalt' },
30+
{ id: '3a', label: 'Mindre enn seks måneder' },
31+
{ id: '3b', label: 'Mer enn seks måneder' },
3232
],
3333
},
3434
} as const satisfies QuestionsObject
Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,33 @@
11
'use client'
22

3-
import { mapFormSnapshotToSummaryItems } from '@/utils/form'
43
import NoAccessInformation from '@/features/no-access/NoAccess'
5-
import { FieldSnapshotsResponse, KandidatStatusResponse } from '@/services/meroppfolging/schemas/formSnapshotSchema'
4+
import {
5+
FieldSnapshotsRequest,
6+
FieldSnapshotsResponse,
7+
KandidatStatusResponse,
8+
} from '@/services/meroppfolging/schemas/formSnapshotSchema'
69
import { useState } from 'react'
7-
import KartleggingssporsmalFormSummary from '@/features/kartleggingssporsmal/summary/KartleggingssporsmalFormSummary'
810
import KartleggingssporsmalFormPage from '@/features/kartleggingssporsmal/form/KartleggingssporsmalFormPage'
11+
import KartleggingssporsmalFormSummaryPage from '@/features/kartleggingssporsmal/summary/KartleggingssporsmalFormSummaryPage'
12+
13+
export type KartleggingssporsmalFieldValues = {
14+
fieldSnapshots: FieldSnapshotsRequest | FieldSnapshotsResponse
15+
createdAt: Date
16+
}
17+
export type NullableKartleggingssporsmalFieldValues = KartleggingssporsmalFieldValues | null
918

1019
export default function KartleggingssporsmalLanding({ kandidatStatus }: { kandidatStatus: KandidatStatusResponse }) {
11-
const fieldSnapshots = kandidatStatus.formResponse?.formSnapshot.fieldSnapshots || null
12-
const [formValues, setFormValues] = useState<FieldSnapshotsResponse | null>(fieldSnapshots)
13-
const [justSubmitted, setJustSubmitted] = useState<boolean>(false)
20+
const [formValues, setFormValues] = useState<NullableKartleggingssporsmalFieldValues>(null)
1421

1522
if (kandidatStatus.isKandidat === false) {
1623
return <NoAccessInformation />
1724
}
1825

19-
if (formValues && formValues?.length > 0) {
20-
const summaryItems = mapFormSnapshotToSummaryItems(formValues)
21-
return <KartleggingssporsmalFormSummary items={summaryItems} />
26+
const formResponse = kandidatStatus.formResponse?.formSnapshot || formValues
27+
28+
if (formResponse) {
29+
return <KartleggingssporsmalFormSummaryPage formSnapshot={formResponse} />
2230
}
2331

24-
return <KartleggingssporsmalFormPage setSummaryItems={setFormValues} setJustSubmitted={setJustSubmitted} />
32+
return <KartleggingssporsmalFormPage setSummaryItems={setFormValues} />
2533
}

src/features/kartleggingssporsmal/form/KartleggingssporsmalForm.tsx

Lines changed: 34 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,18 @@ import {
66
kartleggingssporsmalFormSchema,
77
} from '@/domain/kartleggingsspormaFormValues'
88
import { useAppForm } from '@/hooks/form'
9-
import { Box, Button } from '@navikt/ds-react'
9+
import { Button } from '@navikt/ds-react'
1010
import { revalidateLogic } from '@tanstack/form-core'
1111
import { type Dispatch, type SetStateAction, useState } from 'react'
1212
import { submitFormAction } from '@/actions/form/submitForm'
13-
import { mapAppFormToSnapshot, mapFormSnapshotToSummaryItems } from '@/utils/form'
14-
import { type FormSummaryItem } from '@/features/kartleggingssporsmal/KartleggingssporsmalFormSummary'
13+
import { mapAppFormToSnapshot } from '@/utils/form'
14+
import { NullableKartleggingssporsmalFieldValues } from '@/features/kartleggingssporsmal/KartleggingssporsmalLanding'
1515

1616
type Props = {
17-
setSummaryItems: Dispatch<SetStateAction<FormSummaryItem[]>>
18-
setJustSubmitted: Dispatch<SetStateAction<boolean>>
17+
setSummaryItems: Dispatch<SetStateAction<NullableKartleggingssporsmalFieldValues>>
1918
}
2019

21-
export default function KartleggingssporsmalForm({ setSummaryItems, setJustSubmitted }: Props) {
20+
export default function KartleggingssporsmalForm({ setSummaryItems }: Props) {
2221
const [submitting, setSubmitting] = useState<boolean>(false)
2322

2423
const form = useAppForm({
@@ -35,9 +34,7 @@ export default function KartleggingssporsmalForm({ setSummaryItems, setJustSubmi
3534
setSubmitting(true)
3635
await submitFormAction(value)
3736
const fieldSnapshots = mapAppFormToSnapshot({ values: value })
38-
const summaryItems = mapFormSnapshotToSummaryItems(fieldSnapshots)
39-
setSummaryItems(summaryItems)
40-
setJustSubmitted(true)
37+
setSummaryItems({ fieldSnapshots: fieldSnapshots, createdAt: new Date() })
4138
} catch (e) {
4239
console.error('Submission failed', e)
4340
} finally {
@@ -47,34 +44,33 @@ export default function KartleggingssporsmalForm({ setSummaryItems, setJustSubmi
4744
})
4845

4946
return (
50-
<Box background="bg-subtle" padding="6" borderRadius="large" borderColor="border-subtle" borderWidth="1">
51-
<form
52-
onSubmit={(e) => {
53-
e.preventDefault()
54-
e.stopPropagation()
55-
}}
56-
>
57-
<form.AppForm>
58-
<div className={'grid gap-4 mb-4'}>
59-
<form.AppField name="hvorSannsynligTilbakeTilJobben">
60-
{(field) => (
61-
<field.RadioGroup question={kartleggingsspormalFormQuestions['hvorSannsynligTilbakeTilJobben']} />
62-
)}
63-
</form.AppField>
64-
<form.AppField name="samarbeidOgRelasjonTilArbeidsgiver">
65-
{(field) => (
66-
<field.RadioGroup question={kartleggingsspormalFormQuestions['samarbeidOgRelasjonTilArbeidsgiver']} />
67-
)}
68-
</form.AppField>
69-
<form.AppField name="naarTilbakeTilJobben">
70-
{(field) => <field.RadioGroup question={kartleggingsspormalFormQuestions['naarTilbakeTilJobben']} />}
71-
</form.AppField>
72-
</div>
73-
<Button type="submit" className="mt-4" onClick={() => form.handleSubmit()} disabled={submitting}>
74-
{submitting ? 'Sender…' : 'Send skjema'}
75-
</Button>
76-
</form.AppForm>
77-
</form>
78-
</Box>
47+
<form
48+
onSubmit={(e) => {
49+
e.preventDefault()
50+
e.stopPropagation()
51+
}}
52+
className="mt-8"
53+
>
54+
<form.AppForm>
55+
<div className={'grid gap-4 mb-4'}>
56+
<form.AppField name="hvorSannsynligTilbakeTilJobben">
57+
{(field) => (
58+
<field.RadioGroup question={kartleggingsspormalFormQuestions['hvorSannsynligTilbakeTilJobben']} />
59+
)}
60+
</form.AppField>
61+
<form.AppField name="samarbeidOgRelasjonTilArbeidsgiver">
62+
{(field) => (
63+
<field.RadioGroup question={kartleggingsspormalFormQuestions['samarbeidOgRelasjonTilArbeidsgiver']} />
64+
)}
65+
</form.AppField>
66+
<form.AppField name="naarTilbakeTilJobben">
67+
{(field) => <field.RadioGroup question={kartleggingsspormalFormQuestions['naarTilbakeTilJobben']} />}
68+
</form.AppField>
69+
</div>
70+
<Button type="submit" className="mt-4" onClick={() => form.handleSubmit()} disabled={submitting}>
71+
{submitting ? 'Sender…' : 'Send svarene til Nav'}
72+
</Button>
73+
</form.AppForm>
74+
</form>
7975
)
8076
}

src/features/kartleggingssporsmal/form/KartleggingssporsmalFormPage.ts

Lines changed: 0 additions & 19 deletions
This file was deleted.
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import KartleggingssporsmalForm from './KartleggingssporsmalForm'
2+
import { type Dispatch, type SetStateAction } from 'react'
3+
import { BodyShort, Heading } from '@navikt/ds-react'
4+
import { NullableKartleggingssporsmalFieldValues } from '@/features/kartleggingssporsmal/KartleggingssporsmalLanding'
5+
6+
type KartleggingssporsmalFormPageProps = {
7+
setSummaryItems: Dispatch<SetStateAction<NullableKartleggingssporsmalFieldValues>>
8+
}
9+
10+
export default function KartleggingssporsmalFormPage({ setSummaryItems }: KartleggingssporsmalFormPageProps) {
11+
return (
12+
<>
13+
<Heading size={'large'} level="1" spacing>
14+
Kartlegging av din situasjon
15+
</Heading>
16+
<BodyShort spacing>
17+
Siden du har vært sykmeldt en stund, ønsker vi å få bedre kjennskap til din situasjon ved at du svarer på disse
18+
tre spørsmålene.
19+
</BodyShort>
20+
<BodyShort spacing>
21+
Svarene dine blir kun delt med Nav og gir oss innsikt i hvordan vi kan følge deg opp fremover.
22+
</BodyShort>
23+
<KartleggingssporsmalForm setSummaryItems={setSummaryItems} />
24+
</>
25+
)
26+
}
Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { BodyShort } from '@navikt/ds-react'
21
import { FormSummary as AkselFormSummary } from '@navikt/ds-react'
32
import {
43
FormSummaryAnswer,
@@ -15,31 +14,23 @@ export type FormSummaryItem = {
1514
}
1615

1716
type Props = {
18-
title?: string
19-
items?: FormSummaryItem[] | null
17+
items: FormSummaryItem[]
2018
}
2119

2220
export default function KartleggingssporsmalFormSummary({ items }: Props) {
23-
const hasItems = !!items && items.length > 0
24-
2521
return (
26-
<AkselFormSummary className="max-w-3xl">
22+
<AkselFormSummary>
2723
<FormSummaryHeader>
2824
<FormSummaryHeading level="2">Oppsummering av svar</FormSummaryHeading>
2925
</FormSummaryHeader>
30-
31-
{!hasItems && <BodyShort>Skjemaet er sendt inn. Takk for svarene dine.</BodyShort>}
32-
33-
{hasItems && (
34-
<FormSummaryAnswers>
35-
{items!.map((it, idx) => (
36-
<FormSummaryAnswer key={idx}>
37-
<FormSummaryLabel>{it.label}</FormSummaryLabel>
38-
<FormSummaryValue>{it.value}</FormSummaryValue>
39-
</FormSummaryAnswer>
40-
))}
41-
</FormSummaryAnswers>
42-
)}
26+
<FormSummaryAnswers>
27+
{items.map((it, idx) => (
28+
<FormSummaryAnswer key={idx}>
29+
<FormSummaryLabel>{it.label}</FormSummaryLabel>
30+
<FormSummaryValue>{it.value}</FormSummaryValue>
31+
</FormSummaryAnswer>
32+
))}
33+
</FormSummaryAnswers>
4334
</AkselFormSummary>
4435
)
4536
}

0 commit comments

Comments
 (0)