Skip to content

Commit c7b057b

Browse files
authored
Oppdateringer - ung (#2873)
* Korrigere date-parsing i oppgaver * Oppdatert struktur for inntekt fra areg * KorrigerInntekt update * Storybook * Layout * Utløpt status * Fjerne inntektsperioder * OppgaveContext * Cleanup * Fix import * Mer cleanup * Scroll-fix
1 parent 57ec550 commit c7b057b

File tree

54 files changed

+554
-694
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+554
-694
lines changed

apps/ungdomsytelse-deltaker/mock/msw/mocks/soker1/deltakelser/harSøkt.ts

+39-9
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export const deltakelserHarSøkt: DeltakelsePeriodInfo[] = [
1818
},
1919
status: OppgaveStatus.ULØST,
2020
opprettetDato: '2025-02-22T11:43:29.048157Z',
21-
løstDato: undefined,
21+
løstDato: '2025-02-23T05:00:12.048157Z',
2222
},
2323
{
2424
id: 'fc2c6f01-8746-4ca0-b77a-40cc48bba216',
@@ -29,22 +29,35 @@ export const deltakelserHarSøkt: DeltakelsePeriodInfo[] = [
2929
veilederRef: 'Pål Hønesen, Andeby',
3030
meldingFraVeileder: 'Jeg endrer sluttdatoen som vi avtalte på møtet forrige uke.',
3131
},
32-
status: OppgaveStatus.LØST,
32+
status: OppgaveStatus.UTLØPT,
3333
opprettetDato: '2025-02-22T11:43:29.048157Z',
3434
løstDato: '2025-02-23T05:00:12.048157Z',
3535
},
3636
{
3737
id: 'fc2c6f01-8746-4ca0-b77a-40cc48bba216',
3838
oppgavetype: Oppgavetype.BEKREFT_KORRIGERT_INNTEKT,
3939
oppgavetypeData: {
40-
type: 'BEKREFT_KORRIGERT_INNTEKT',
4140
periodeForInntekt: {
4241
fraOgMed: '2026-01-01',
4342
tilOgMed: '2026-01-31',
4443
},
4544
inntektFraAinntekt: {
46-
arbeidstakerOgFrilansInntekt: 7500,
47-
inntektFraYtelse: 1500,
45+
arbeidsgivere: [
46+
{
47+
navn: 'Flåklypa barteservice',
48+
beløp: 1232,
49+
},
50+
{
51+
navn: 'Hopen klyp og klem',
52+
beløp: 50,
53+
},
54+
],
55+
ytelser: [
56+
{
57+
navn: 'Sykepenger',
58+
beløp: 4200,
59+
},
60+
],
4861
},
4962
inntektFraDeltaker: {
5063
arbeidstakerOgFrilansInntekt: undefined,
@@ -53,27 +66,44 @@ export const deltakelserHarSøkt: DeltakelsePeriodInfo[] = [
5366
},
5467
status: OppgaveStatus.ULØST,
5568
opprettetDato: '2025-02-22T11:43:29.048157Z',
56-
løstDato: undefined,
69+
løstDato: '2025-02-23T05:00:12.048157Z',
5770
},
5871
],
5972
rapporteringsPerioder: [
6073
{
6174
fraOgMed: '2024-12-02',
6275
tilOgMed: '2024-12-31',
6376
harRapportert: false,
64-
inntekt: undefined,
77+
arbeidstakerOgFrilansInntekt: undefined,
78+
inntektFraYtelse: undefined,
6579
},
6680
{
6781
fraOgMed: '2025-01-01',
6882
tilOgMed: '2025-01-31',
6983
harRapportert: false,
70-
inntekt: undefined,
84+
arbeidstakerOgFrilansInntekt: undefined,
85+
inntektFraYtelse: undefined,
7186
},
7287
{
7388
fraOgMed: '2025-02-01',
7489
tilOgMed: '2025-02-26',
7590
harRapportert: false,
76-
inntekt: undefined,
91+
arbeidstakerOgFrilansInntekt: undefined,
92+
inntektFraYtelse: undefined,
93+
},
94+
{
95+
fraOgMed: '2025-03-01',
96+
tilOgMed: '2025-03-31',
97+
harRapportert: false,
98+
arbeidstakerOgFrilansInntekt: undefined,
99+
inntektFraYtelse: undefined,
100+
},
101+
{
102+
fraOgMed: '2025-04-01',
103+
tilOgMed: '2025-04-30',
104+
harRapportert: false,
105+
arbeidstakerOgFrilansInntekt: undefined,
106+
inntektFraYtelse: undefined,
77107
},
78108
],
79109
},

apps/ungdomsytelse-deltaker/src/apps/innsyn/InnsynApp.tsx

+1-5
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,7 @@ const InnsynApp = () => {
1111
return (
1212
<Page title="Din ungdomsytelse">
1313
<VStack gap="8">
14-
<VStack gap="8">
15-
<VStack gap="2">
16-
<DeltakelseHeader deltakelse={deltakelse} />
17-
</VStack>
18-
</VStack>
14+
<DeltakelseHeader deltakelse={deltakelse} />
1915

2016
<DeltakelseContent deltakelse={deltakelse} />
2117

apps/ungdomsytelse-deltaker/src/apps/innsyn/components/DeltakelseContent.tsx

+11-15
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,31 @@
11
import { Box, Heading, VStack } from '@navikt/ds-react';
22
import { Deltakelse as DeltakelseContent, OppgaveStatus } from '@navikt/ung-common';
3-
import { getGjeldendeRapporteringsperiode, getTidligereRapporteringsperioder } from '../utils/deltakelseUtils';
4-
import FremhevetInntektsperiode from './fremhevet-inntektsperiode/FremhevetInntektsperiode';
3+
import { getPeriodeÅpenForInntektsrapportering } from '../utils/deltakelseUtils';
54
import OppgavePanel from './oppgaver/OppgavePanel';
6-
import Periodeliste from './Periodeliste';
75
import LøsteOppgaver from './løste-oppgaver/LøsteOppgaver';
86
import { DeltakelsePeriode } from '@navikt/ung-common/src/types/DeltakelsePeriode';
7+
import RapporterInntekt from './rapporter-inntekt/RapporterInntekt';
98

109
interface Props {
1110
deltakelse: DeltakelsePeriode;
1211
}
1312

1413
const DeltakelseContent = ({ deltakelse }: Props) => {
1514
const { rapporteringsPerioder, oppgaver, programPeriode, id } = deltakelse;
16-
const gjeldendePeriode = getGjeldendeRapporteringsperiode(rapporteringsPerioder || []);
17-
const tidligerePerioder = getTidligereRapporteringsperioder(rapporteringsPerioder || []);
15+
// const tidligerePerioder = getTidligereRapporteringsperioder(rapporteringsPerioder || []);
16+
const rapporterInntektPeriode = getPeriodeÅpenForInntektsrapportering(rapporteringsPerioder || []);
1817

19-
const uløsteOppgaver = oppgaver.filter(
20-
(oppgave) => oppgave.løstDato === undefined && oppgave.status === OppgaveStatus.ULØST,
21-
);
22-
const løsteOppgaver = oppgaver.filter(
23-
(oppgave) => oppgave.løstDato !== undefined && oppgave.status !== OppgaveStatus.ULØST,
24-
);
18+
const uløsteOppgaver = oppgaver.filter((oppgave) => oppgave.status === OppgaveStatus.ULØST);
19+
const løsteOppgaver = oppgaver.filter((oppgave) => oppgave.status !== OppgaveStatus.ULØST);
2520

2621
return (
2722
<VStack gap="8">
2823
{uløsteOppgaver.map((oppgave, index) => (
2924
<OppgavePanel key={index} oppgave={oppgave} deltakelseId={id} programPeriode={programPeriode} />
3025
))}
31-
{gjeldendePeriode ? <FremhevetInntektsperiode rapporteringsperiode={gjeldendePeriode} /> : null}
32-
<Box>
26+
{rapporterInntektPeriode ? <RapporterInntekt rapporteringsperiode={rapporterInntektPeriode} /> : null}
27+
28+
{/* <Box>
3329
<Heading level="2" size="medium" spacing={true}>
3430
Perioder og inntekt
3531
</Heading>
@@ -38,11 +34,11 @@ const DeltakelseContent = ({ deltakelse }: Props) => {
3834
perioder={tidligerePerioder || []}
3935
programperiodeStartDato={deltakelse.programPeriode.from}
4036
/>
41-
</Box>
37+
</Box> */}
4238
{løsteOppgaver.length > 0 ? (
4339
<Box>
4440
<Heading level="2" size="medium" spacing={true}>
45-
Tidligere oppgaver
41+
Historikk
4642
</Heading>
4743
<LøsteOppgaver oppgaver={løsteOppgaver} />
4844
</Box>

apps/ungdomsytelse-deltaker/src/apps/innsyn/components/inntekt-tabell/InntektTabell.tsx

+21-23
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,36 @@
1-
import { Table } from '@navikt/ds-react';
1+
import { BodyShort, Table } from '@navikt/ds-react';
22
import { FormattedNumber } from 'react-intl';
33

4-
interface Props {}
4+
export interface InntektTabellRad {
5+
navn: string;
6+
beløp: number;
7+
}
58

6-
const InntektTabell = ({}: Props) => {
7-
const data = [
8-
{
9-
navn: 'Godlia video og persienner',
10-
inntekt: 213,
11-
},
12-
{
13-
navn: 'Mix kiosk',
14-
inntekt: 3500,
15-
},
16-
{
17-
navn: 'Sykepenger',
18-
inntekt: 500,
19-
},
20-
];
9+
interface Props {
10+
header: string;
11+
inntekt: InntektTabellRad[];
12+
}
13+
14+
const InntektTabell = ({ header, inntekt }: Props) => {
2115
return (
2216
<Table zebraStripes>
2317
<Table.Header>
2418
<Table.Row>
25-
<Table.HeaderCell scope="col">Arbeidsgiver/ytelse</Table.HeaderCell>
26-
<Table.HeaderCell scope="col">Inntekt</Table.HeaderCell>
19+
<Table.HeaderCell scope="col">{header}</Table.HeaderCell>
20+
<Table.HeaderCell scope="col" className="w-16 text-right text-nowrap">
21+
Inntekt
22+
</Table.HeaderCell>
2723
</Table.Row>
2824
</Table.Header>
2925
<Table.Body>
30-
{data.map(({ navn, inntekt }, i) => {
26+
{inntekt.map(({ navn, beløp }, i) => {
3127
return (
3228
<Table.Row key={i + navn}>
33-
<Table.HeaderCell scope="row">{navn}</Table.HeaderCell>
34-
<Table.DataCell>
35-
<FormattedNumber value={inntekt} />
29+
<Table.HeaderCell scope="row">
30+
<BodyShort weight="regular">{navn}</BodyShort>
31+
</Table.HeaderCell>
32+
<Table.DataCell className="w-16 text-right text-nowrap">
33+
<FormattedNumber value={beløp} />
3634
</Table.DataCell>
3735
</Table.Row>
3836
);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { OppgaveProvider } from './OppgaveContext';
2+
3+
interface Props {
4+
children: React.ReactNode;
5+
}
6+
7+
const Oppgave = ({ children }: Props) => {
8+
return <OppgaveProvider>{children}</OppgaveProvider>;
9+
};
10+
11+
export default Oppgave;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import { ReactNode, useContext, useState, createContext } from 'react';
2+
import { UngdomsytelseOppgavebekreftelse } from '@navikt/k9-brukerdialog-prosessering-api';
3+
import { deltakerApiService } from '../../../../api/deltakerApiService';
4+
5+
interface OppgaveContextProps {
6+
visSkjema?: boolean;
7+
erBesvart?: boolean;
8+
pending?: boolean;
9+
error?: string | null;
10+
setErBesvart: (visSkjema: boolean) => void;
11+
setVisSkjema: (visSkjema: boolean) => void;
12+
sendSvar: (svar: UngdomsytelseOppgavebekreftelse) => Promise<void>;
13+
}
14+
15+
const OppgaveContext = createContext<OppgaveContextProps | undefined>(undefined);
16+
17+
export const OppgaveProvider = ({ children }: { children: ReactNode }) => {
18+
const [visSkjema, setVisSkjema] = useState<boolean>(false);
19+
const [erBesvart, setErBesvart] = useState<boolean>(false);
20+
const [pending, setPending] = useState(false);
21+
const [error, setError] = useState<string | null>(null);
22+
23+
const sendSvar = (svar: UngdomsytelseOppgavebekreftelse) => {
24+
setPending(true);
25+
return deltakerApiService
26+
.sendOppgavebekreftelse(svar)
27+
.then(() => {
28+
setErBesvart(true);
29+
})
30+
.catch((error) => {
31+
setError('Besvar endret oppgave feiler');
32+
console.log(error);
33+
})
34+
.finally(() => {
35+
setPending(false);
36+
});
37+
};
38+
39+
return (
40+
<OppgaveContext.Provider value={{ visSkjema, setVisSkjema, erBesvart, setErBesvart, pending, error, sendSvar }}>
41+
{children}
42+
</OppgaveContext.Provider>
43+
);
44+
};
45+
46+
export const useOppgaveContext = () => {
47+
const context = useContext(OppgaveContext);
48+
if (!context) {
49+
throw new Error('useOppgaveContext must be used within an OppgaveProvider');
50+
}
51+
return context;
52+
};

apps/ungdomsytelse-deltaker/src/apps/innsyn/components/oppgaver/EndretSluttdatoOppgaveForm.tsx

+9-5
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ import {
1313
import { useAppIntl } from '../../../../i18n';
1414
import { getDateValidator, getStringValidator, getYesOrNoValidator } from '@navikt/sif-validation';
1515
import { UngdomsytelseOppgavebekreftelse } from '@navikt/k9-brukerdialog-prosessering-api';
16-
import { useBesvarOppgave } from '../../hooks/useBesvarOppgave';
1716
import { CalendarIcon } from '@navikt/aksel-icons';
17+
import { useOppgaveContext } from '../oppgave/OppgaveContext';
1818

1919
interface Props {
2020
deltakelseId: string;
@@ -44,7 +44,7 @@ const { FormikWrapper, Form, YesOrNoQuestion, Textarea, DatePicker } = getTypedF
4444

4545
const EndretSluttdatoOppgaveForm = ({ deltakelseId, oppgave, opprinneligSluttdato }: Props) => {
4646
const { intl } = useAppIntl();
47-
const { sendSvar, error, pending, besvart } = useBesvarOppgave();
47+
const { sendSvar, error, pending, setVisSkjema } = useOppgaveContext();
4848
const nySluttdatoTekst = dateFormatter.dayDateMonthYear(oppgave.oppgavetypeData.nySluttdato);
4949

5050
const handleSubmit = async (values: FormValues) => {
@@ -77,7 +77,7 @@ const EndretSluttdatoOppgaveForm = ({ deltakelseId, oppgave, opprinneligSluttdat
7777
</HStack>
7878
}
7979
tittel="Din deltakerperiode blir endret"
80-
besvart={besvart}
80+
svarfrist={oppgave.svarfrist}
8181
beskrivelse={
8282
<>
8383
<BodyShort>
@@ -118,11 +118,15 @@ const EndretSluttdatoOppgaveForm = ({ deltakelseId, oppgave, opprinneligSluttdat
118118
<FormikWrapper
119119
initialValues={{}}
120120
onSubmit={handleSubmit}
121-
renderForm={({ values }) => {
121+
renderForm={({ values, resetForm }) => {
122122
return (
123123
<Form
124-
submitButtonLabel="Send inn svar"
124+
submitButtonLabel="Send"
125125
cancelButtonLabel="Avbryt"
126+
onCancel={() => {
127+
resetForm();
128+
setVisSkjema(false);
129+
}}
126130
submitPending={pending}
127131
includeValidationSummary={true}
128132
formErrorHandler={getIntlFormErrorHandler(intl, 'inntektForm.validation')}>

apps/ungdomsytelse-deltaker/src/apps/innsyn/components/oppgaver/EndretStartdatoOppgaveForm.tsx

+9-5
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ import {
1313
import { useAppIntl } from '../../../../i18n';
1414
import { getDateValidator, getStringValidator, getYesOrNoValidator } from '@navikt/sif-validation';
1515
import { UngdomsytelseOppgavebekreftelse } from '@navikt/k9-brukerdialog-prosessering-api';
16-
import { useBesvarOppgave } from '../../hooks/useBesvarOppgave';
1716
import { CalendarIcon } from '@navikt/aksel-icons';
17+
import { useOppgaveContext } from '../oppgave/OppgaveContext';
1818

1919
interface Props {
2020
deltakelseId: string;
@@ -44,7 +44,7 @@ const { FormikWrapper, Form, YesOrNoQuestion, Textarea, DatePicker } = getTypedF
4444

4545
const EndretStartdatoOppgaveForm = ({ deltakelseId, oppgave }: Props) => {
4646
const { intl } = useAppIntl();
47-
const { sendSvar, error, pending, besvart } = useBesvarOppgave();
47+
const { sendSvar, error, pending, setVisSkjema } = useOppgaveContext();
4848
const nyStartdatoTekst = dateFormatter.dayDateMonthYear(oppgave.oppgavetypeData.nyStartdato);
4949

5050
const handleSubmit = async (values: FormValues) => {
@@ -76,8 +76,8 @@ const EndretStartdatoOppgaveForm = ({ deltakelseId, oppgave }: Props) => {
7676
Endret deltakerperiode
7777
</HStack>
7878
}
79+
svarfrist={oppgave.svarfrist}
7980
tittel="Din deltakerperiode blir endret"
80-
besvart={besvart}
8181
beskrivelse={
8282
<>
8383
<BodyShort>
@@ -106,11 +106,15 @@ const EndretStartdatoOppgaveForm = ({ deltakelseId, oppgave }: Props) => {
106106
<FormikWrapper
107107
initialValues={{}}
108108
onSubmit={handleSubmit}
109-
renderForm={({ values }) => {
109+
renderForm={({ values, resetForm }) => {
110110
return (
111111
<Form
112-
submitButtonLabel="Send inn svar"
112+
submitButtonLabel="Send"
113113
cancelButtonLabel="Avbryt"
114+
onCancel={() => {
115+
resetForm();
116+
setVisSkjema(false);
117+
}}
114118
submitPending={pending}
115119
includeValidationSummary={true}
116120
formErrorHandler={getIntlFormErrorHandler(intl, 'inntektForm.validation')}>

0 commit comments

Comments
 (0)