@@ -3,51 +3,50 @@ import { ChangeEvent, Dispatch, SetStateAction, useEffect, useState } from "reac
3
3
import { Button , Heading , Modal , Panel , TextField } from "@navikt/ds-react" ;
4
4
import { addDays , format } from "date-fns" ;
5
5
import Spacer from "./Spacer" ;
6
+ import { ActivityType , SavedDates } from "../models/Data" ;
6
7
7
8
export type ActivitySelectorProps = {
8
9
startDate : Date ;
9
10
endDate : Date ;
10
- savedDates : {
11
- [ key : number ] : { type : string , hours : number } ;
12
- } ;
13
- setSavedDates : Dispatch < SetStateAction < { [ p : number ] : { type : string , hours : number } } > > ;
11
+ savedDates : SavedDates ;
12
+ setSavedDates : Dispatch < SetStateAction < { [ p : number ] : { type : ActivityType | null , hours : number | null } } > > ;
14
13
}
15
14
16
15
export default function ActivitySelector ( props : ActivitySelectorProps ) {
17
16
18
17
const [ open , setOpen ] = useState ( false ) ;
19
18
const [ selectedDate , setSelectedDate ] = useState < Date | null > ( null ) ;
20
- const [ selectedType , setSelectedType ] = useState < string > ( '' ) ;
21
- const [ selectedHours , setSelectedHours ] = useState < string | null > ( null ) ;
19
+ const [ selectedType , setSelectedType ] = useState < ActivityType | null > ( null ) ;
20
+ const [ selectedHours , setSelectedHours ] = useState < number | null > ( null ) ;
22
21
const { startDate, savedDates, setSavedDates } = props ;
23
22
24
23
useEffect ( ( ) => {
25
24
Modal . setAppElement ( "#__next" ) ;
26
25
} , [ ] ) ;
27
26
28
27
const dateSelected = ( date : Date ) => {
29
- setSelectedType ( savedDates [ date . getTime ( ) ] ?. type || '' ) ;
30
- setSelectedHours ( savedDates [ date . getTime ( ) ] ?. hours . toString ( ) ) ;
28
+ setSelectedType ( savedDates [ date . getTime ( ) ] ?. type ) ;
29
+ setSelectedHours ( savedDates [ date . getTime ( ) ] ?. hours ) ;
31
30
setSelectedDate ( date ) ;
32
31
setOpen ( true ) ;
33
32
}
34
33
35
- const dateTypeSelected = ( type : string ) => {
34
+ const dateTypeSelected = ( type : ActivityType | null ) => {
36
35
setSelectedType ( type ) ;
37
- setSelectedHours ( "0" ) ;
36
+ setSelectedHours ( 0 ) ;
38
37
}
39
38
40
39
const updateHours = ( event : ChangeEvent < HTMLInputElement > ) => {
41
- setSelectedHours ( event . target . value ) ;
40
+ setSelectedHours ( Number . parseFloat ( event . target . value ) ) ;
42
41
}
43
42
44
43
const saveDate = ( ) => {
45
44
if ( selectedDate == null ) {
46
45
return ;
47
46
}
48
47
49
- const hoursNUmber = Number ( selectedHours ) ;
50
- if ( isNaN ( + hoursNUmber ) || hoursNUmber < 0 || hoursNUmber > 24 ) {
48
+ const hoursNumber = Number ( selectedHours ) ;
49
+ if ( isNaN ( + hoursNumber ) || hoursNumber < 0 || hoursNumber > 24 ) {
51
50
return ;
52
51
}
53
52
@@ -56,7 +55,7 @@ export default function ActivitySelector(props: ActivitySelectorProps) {
56
55
57
56
// Delete object if its type is empty
58
57
// Else save
59
- if ( selectedType == '' ) {
58
+ if ( selectedType == null ) {
60
59
const state = { ...savedDates } ;
61
60
delete state [ key ] ;
62
61
setSavedDates ( state ) ;
@@ -65,7 +64,7 @@ export default function ActivitySelector(props: ActivitySelectorProps) {
65
64
...savedDates ,
66
65
[ key ] : {
67
66
type : selectedType ,
68
- hours : hoursNUmber
67
+ hours : hoursNumber
69
68
}
70
69
} ) ;
71
70
}
@@ -81,13 +80,13 @@ export default function ActivitySelector(props: ActivitySelectorProps) {
81
80
const currentData = savedDates [ currentDate . getTime ( ) ] ;
82
81
83
82
let addClass = styles . none ;
84
- if ( currentData ?. type == 'work' ) addClass = styles . work ;
85
- else if ( currentData ?. type == 'illness' ) addClass = styles . illness ;
86
- else if ( currentData ?. type == 'measures' ) addClass = styles . measures ;
87
- else if ( currentData ?. type == 'vacation' ) addClass = styles . vacation ;
83
+ if ( currentData ?. type == ActivityType . WORK ) addClass = styles . work ;
84
+ else if ( currentData ?. type == ActivityType . ILLNESS ) addClass = styles . illness ;
85
+ else if ( currentData ?. type == ActivityType . MEASURES ) addClass = styles . measures ;
86
+ else if ( currentData ?. type == ActivityType . VACATION ) addClass = styles . vacation ;
88
87
89
88
let hours = < > </ > ;
90
- if ( currentData ?. type == 'work' ) {
89
+ if ( currentData ?. type == ActivityType . WORK ) {
91
90
hours = < div className = { styles . workHours } > { currentData . hours } t</ div > ;
92
91
}
93
92
@@ -118,10 +117,10 @@ export default function ActivitySelector(props: ActivitySelectorProps) {
118
117
for ( const key in savedDates ) {
119
118
const currentData = savedDates [ key ] ;
120
119
121
- if ( currentData . type == 'work' ) workHours += currentData . hours ;
122
- else if ( currentData . type == 'illness' ) illnessDays += 1 ;
123
- else if ( currentData . type == 'measures' ) measuresDays += 1 ;
124
- else if ( currentData . type == 'vacation' ) vacationDays += 1 ;
120
+ if ( currentData . type == ActivityType . WORK ) workHours += ( currentData . hours || 0 ) ;
121
+ else if ( currentData . type == ActivityType . ILLNESS ) illnessDays += 1 ;
122
+ else if ( currentData . type == ActivityType . MEASURES ) measuresDays += 1 ;
123
+ else if ( currentData . type == ActivityType . VACATION ) vacationDays += 1 ;
125
124
}
126
125
127
126
let summaryWork = < > </ >
@@ -201,42 +200,42 @@ export default function ActivitySelector(props: ActivitySelectorProps) {
201
200
< div >
202
201
< button
203
202
type = "button"
204
- className = { styles . activityTypeButton + ' ' + styles . work + ' ' + ( ( selectedType == 'work' ) ? styles . selected : '' ) }
205
- onClick = { ( ) => dateTypeSelected ( 'work' ) } >
203
+ className = { styles . activityTypeButton + ' ' + styles . work + ' ' + ( ( selectedType == ActivityType . WORK ) ? styles . selected : '' ) }
204
+ onClick = { ( ) => dateTypeSelected ( ActivityType . WORK ) } >
206
205
Arbeid
207
206
</ button >
208
207
{
209
- ( selectedType == 'work' ) ? hoursInput : ''
208
+ ( selectedType == ActivityType . WORK ) ? hoursInput : ''
210
209
}
211
210
</ div >
212
211
< div >
213
212
< button
214
213
type = "button"
215
- className = { styles . activityTypeButton + ' ' + styles . illness + ' ' + ( ( selectedType == 'illness' ) ? styles . selected : '' ) }
216
- onClick = { ( ) => dateTypeSelected ( 'illness' ) } >
214
+ className = { styles . activityTypeButton + ' ' + styles . illness + ' ' + ( ( selectedType == ActivityType . ILLNESS ) ? styles . selected : '' ) }
215
+ onClick = { ( ) => dateTypeSelected ( ActivityType . ILLNESS ) } >
217
216
Syk
218
217
</ button >
219
218
</ div >
220
219
< div >
221
220
< button
222
221
type = "button"
223
- className = { styles . activityTypeButton + ' ' + styles . measures + ' ' + ( ( selectedType == 'measures' ) ? styles . selected : '' ) }
224
- onClick = { ( ) => dateTypeSelected ( 'measures' ) } >
222
+ className = { styles . activityTypeButton + ' ' + styles . measures + ' ' + ( ( selectedType == ActivityType . MEASURES ) ? styles . selected : '' ) }
223
+ onClick = { ( ) => dateTypeSelected ( ActivityType . MEASURES ) } >
225
224
Tiltak
226
225
</ button >
227
226
</ div >
228
227
< div >
229
228
< button
230
- className = { styles . activityTypeButton + ' ' + styles . vacation + ' ' + ( ( selectedType == 'vacation' ) ? styles . selected : '' ) }
231
- onClick = { ( ) => dateTypeSelected ( 'vacation' ) } >
229
+ className = { styles . activityTypeButton + ' ' + styles . vacation + ' ' + ( ( selectedType == ActivityType . VACATION ) ? styles . selected : '' ) }
230
+ onClick = { ( ) => dateTypeSelected ( ActivityType . VACATION ) } >
232
231
Fravær/ferie
233
232
</ button >
234
233
</ div >
235
234
< div >
236
235
< button
237
236
type = "button"
238
- className = { styles . activityTypeButton + ' ' + styles . none + ' ' + ( ( selectedType == '' ) ? styles . selected : '' ) }
239
- onClick = { ( ) => dateTypeSelected ( '' ) } >
237
+ className = { styles . activityTypeButton + ' ' + styles . none + ' ' + ( ( selectedType == null ) ? styles . selected : '' ) }
238
+ onClick = { ( ) => dateTypeSelected ( null ) } >
240
239
Ingenting
241
240
</ button >
242
241
</ div >
0 commit comments