1
1
import { useEffect , useState , type FC } from 'react' ;
2
2
import { useFormContext , type FieldArrayWithId , type UseFieldArrayReplace } from 'react-hook-form' ;
3
- import { isSameDay } from 'date-fns ' ;
3
+ import dayjs from 'dayjs ' ;
4
4
import { formatPeriod } from '@k9-sak-web/lib/dateUtils/dateUtils.js' ;
5
5
import { ScissorsIcon , TrashIcon } from '@navikt/aksel-icons' ;
6
6
import {
7
- Label ,
8
7
Button ,
9
8
RadioGroup ,
10
9
Radio ,
@@ -15,6 +14,8 @@ import {
15
14
Modal ,
16
15
DatePicker ,
17
16
VStack ,
17
+ ReadMore ,
18
+ List ,
18
19
} from '@navikt/ds-react' ;
19
20
import { PeriodeMedOverlappValg } from '@k9-sak-web/backend/k9sak/generated' ;
20
21
import { type VurderOverlappendeSakFormData } from './VurderOverlappendeSak' ;
@@ -50,14 +51,13 @@ const VurderOverlappendePeriodeForm: FC<Props> = ({
50
51
const [ skalViseSkjema , setSkalViseSkjema ] = useState < boolean > ( false ) ;
51
52
52
53
const harSplittedePerioder = ! originaleOverlappendePerioder . some ( originalPeriode => {
53
- return (
54
- isSameDay ( new Date ( originalPeriode . fom ) , new Date ( fom ) ) && isSameDay ( new Date ( originalPeriode . tom ) , new Date ( tom ) )
55
- ) ;
54
+ return dayjs ( originalPeriode . fom ) . isSame ( fom ) && dayjs ( originalPeriode . tom ) . isSame ( tom ) ;
56
55
} ) ;
57
56
const kanSlettes = harSplittedePerioder && ! readOnly ;
58
- const kanSplittes = ! isSameDay ( new Date ( fom ) , new Date ( tom ) ) && ! readOnly ;
57
+ const kanSplittes = ! dayjs ( fom ) . isSame ( tom ) && ! readOnly ;
59
58
const watchValg = watch ( `perioder.${ index } .valg` ) ;
60
59
const erEndretAutomatisk = getValues ( `perioder.${ index } .endretAutomatisk` ) ;
60
+ const [ velgDato , setVelgDato ] = useState < number > ( 0 ) ;
61
61
62
62
useEffect ( ( ) => { } , [ ] ) ;
63
63
@@ -68,47 +68,45 @@ const VurderOverlappendePeriodeForm: FC<Props> = ({
68
68
69
69
return (
70
70
< div >
71
- < HStack gap = { 'space-8' } align = "center" >
72
- < Label size = "small" >
73
- Vurder uttak for perioden{ ' ' }
74
- < BodyShort
75
- size = "small"
76
- as = "span"
77
- weight = "semibold"
78
- className = { erEndretAutomatisk ? styles [ 'uttaksPeriodeEndret' ] : '' }
79
- > { `${ formatPeriod ( fom || '' , tom || '' ) } ` } </ BodyShort >
80
- </ Label >
81
- { kanSplittes && (
82
- < Button
83
- onClick = { ( ) => setVisDatovelger ( true ) }
84
- variant = "tertiary"
85
- size = "small"
86
- type = "button"
87
- icon = { < ScissorsIcon title = "Splitt periode" /> }
88
- />
89
- ) }
90
-
91
- { kanSlettes && (
92
- < Button
93
- type = "button"
94
- onClick = { ( ) => slettPeriode ( index ) }
95
- variant = "tertiary"
96
- size = "small"
97
- icon = { < TrashIcon title = "Slett periode" /> }
98
- />
99
- ) }
100
-
101
- { erEndretAutomatisk && (
102
- < HelpText title = "Hvor kommer dette fra?" >
103
- Denne perioden ble justert automatisk for å fylle den overlappende perioden.
104
- </ HelpText >
105
- ) }
106
- </ HStack >
107
71
< VStack gap = { 'space-16' } >
108
72
< RadioGroup
109
73
size = "small"
110
- legend = { `Sett uttaksgrad i prosent for perioden ${ formatPeriod ( fom || '' , tom || '' ) } ` }
111
- hideLegend = { true }
74
+ legend = {
75
+ < HStack as = { 'span' } align = { 'center' } gap = { 'space-8' } >
76
+ < BodyShort size = "small" as = "span" weight = "semibold" >
77
+ Vurder uttak for perioden{ ' ' }
78
+ < BodyShort
79
+ size = "small"
80
+ as = "span"
81
+ weight = "semibold"
82
+ className = { erEndretAutomatisk ? styles [ 'uttaksPeriodeEndret' ] : '' }
83
+ > { `${ formatPeriod ( fom || '' , tom || '' ) } ` } </ BodyShort >
84
+ </ BodyShort >
85
+ { kanSplittes && (
86
+ < Button
87
+ onClick = { ( ) => setVisDatovelger ( true ) }
88
+ variant = "tertiary"
89
+ size = "small"
90
+ type = "button"
91
+ icon = { < ScissorsIcon title = "Splitt periode" /> }
92
+ />
93
+ ) }
94
+ { kanSlettes && (
95
+ < Button
96
+ type = "button"
97
+ onClick = { ( ) => slettPeriode ( index ) }
98
+ variant = "tertiary"
99
+ size = "small"
100
+ icon = { < TrashIcon title = "Slett periode" /> }
101
+ />
102
+ ) }
103
+ { erEndretAutomatisk && (
104
+ < HelpText title = "Hvor kommer dette fra?" >
105
+ Denne perioden ble justert automatisk for å fylle den overlappende perioden.
106
+ </ HelpText >
107
+ ) }
108
+ </ HStack >
109
+ }
112
110
onChange = { value => {
113
111
setValue ( `perioder.${ index } .valg` , value ) ;
114
112
} }
@@ -134,25 +132,55 @@ const VurderOverlappendePeriodeForm: FC<Props> = ({
134
132
/>
135
133
</ div >
136
134
) }
135
+
136
+ < ReadMore header = "Hva betyr de ulike valgene?" size = "small" >
137
+ Her tar du valg for hvordan uttaket skal være i denne saken.
138
+ < List size = "small" >
139
+ < List . Item >
140
+ Ingen uttak i perioden: Dette valget medfører at du nuller ut uttaket i den overlappende perioden. Velg
141
+ dette hvis du ønsker at bruker skal få alt uttak/utbetaling i den andre saken.
142
+ </ List . Item >
143
+ < List . Item >
144
+ Vanlig uttak i perioden: Ved å velge dette, bestemmer du at denne saken skal graderes som vanlig ut fra
145
+ informasjon om arbeidstid, inntekt, tilsyn osv. Du velger altså å la den gå sin gang, uten å bli påvirket
146
+ av den overlappende saken.
147
+ </ List . Item >
148
+ < List . Item >
149
+ Tilpass uttaksgrad: Her kan du manuelt bestemme hvor mange prosent pleiepenger bruker skal få i saken.
150
+ Dette valget brukes unntaksvis, da det vil medføre at man må overstyre hver gang det kommer en endring.
151
+ Man må også være mer obs på hvilken uttaksgrad den andre saken har, spesielt hvis ikke den også settes
152
+ manuelt.
153
+ </ List . Item >
154
+ </ List >
155
+ </ ReadMore >
137
156
</ VStack >
138
157
139
158
{ kanSplittes && (
140
159
< div >
141
160
< Modal
142
161
title = "Spesifiser periode"
143
- onClose = { ( ) => setVisDatovelger ( false ) }
162
+ onClose = { ( ) => {
163
+ setVelgDato ( 0 ) ;
164
+ setVisDatovelger ( false ) ;
165
+ } }
144
166
open = { visDatoVelger }
145
167
aria-label = "Spesifiser periode"
146
168
>
147
169
< Modal . Header closeButton > Spesifiser periode</ Modal . Header >
148
170
< Modal . Body >
149
171
< DatePicker . Standalone
172
+ dropdownCaption
173
+ defaultMonth = { new Date ( fom ) }
150
174
mode = "range"
151
175
disabled = { [ { before : new Date ( fom ) } , { after : new Date ( tom ) } ] }
152
176
onSelect = { ( val : undefined | { from : Date | undefined ; to ?: Date | undefined } ) => {
153
- if ( val ?. from && val . to ) {
154
- setVisDatovelger ( false ) ;
155
- splittPeriode ( val . from , val . to , index ) ;
177
+ if ( velgDato === 0 ) setVelgDato ( 1 ) ;
178
+ if ( velgDato === 1 ) {
179
+ if ( val ?. from && val . to ) {
180
+ setVisDatovelger ( false ) ;
181
+ splittPeriode ( val . from , val . to , index ) ;
182
+ setVelgDato ( 0 ) ;
183
+ }
156
184
}
157
185
} }
158
186
/>
0 commit comments