Skip to content
This repository was archived by the owner on Apr 12, 2023. It is now read-only.

Commit b446c4f

Browse files
authored
Merge pull request #3 from navikt/hjelpetekster-2
Hjelpetekster
2 parents f733720 + 94963fb commit b446c4f

15 files changed

+921
-460
lines changed

src/components/ActivitySelector.module.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
}
1313

1414
.summary {
15-
width: 20rem;
15+
width: 25rem;
1616
margin: auto;
1717
}
1818

Lines changed: 88 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
import styles from "./ActivitySelector.module.css";
2-
import { ChangeEvent, Dispatch, SetStateAction, useEffect, useState } from "react";
2+
import {
3+
ChangeEvent,
4+
Dispatch,
5+
SetStateAction,
6+
useEffect,
7+
useState,
8+
} from "react";
39
import { Button, Heading, Modal, Panel, TextField } from "@navikt/ds-react";
410
import { addDays, format } from "date-fns";
511
import Spacer from "./Spacer";
@@ -10,10 +16,9 @@ export type ActivitySelectorProps = {
1016
endDate: Date;
1117
savedDates: SavedDates;
1218
setSavedDates: Dispatch<SetStateAction<SavedDates>>;
13-
}
19+
};
1420

1521
export default function ActivitySelector(props: ActivitySelectorProps) {
16-
1722
const [open, setOpen] = useState(false);
1823
const [selectedDate, setSelectedDate] = useState<Date | null>(null);
1924
const [selectedType, setSelectedType] = useState<ActivityType | null>(null);
@@ -29,16 +34,16 @@ export default function ActivitySelector(props: ActivitySelectorProps) {
2934
setSelectedHours(savedDates[date.getTime()]?.hours);
3035
setSelectedDate(date);
3136
setOpen(true);
32-
}
37+
};
3338

3439
const dateTypeSelected = (type: ActivityType | null) => {
3540
setSelectedType(type);
3641
setSelectedHours(0);
37-
}
42+
};
3843

3944
const updateHours = (event: ChangeEvent<HTMLInputElement>) => {
4045
setSelectedHours(Number.parseFloat(event.target.value));
41-
}
46+
};
4247

4348
const saveDate = () => {
4449
if (selectedDate == null) {
@@ -50,7 +55,6 @@ export default function ActivitySelector(props: ActivitySelectorProps) {
5055
return;
5156
}
5257

53-
5458
const key = selectedDate.getTime();
5559

5660
// Delete object if its type is empty
@@ -64,13 +68,12 @@ export default function ActivitySelector(props: ActivitySelectorProps) {
6468
...savedDates,
6569
[key]: {
6670
type: selectedType,
67-
hours: hoursNumber
68-
}
71+
hours: hoursNumber,
72+
},
6973
});
7074
}
71-
7275
setOpen(false);
73-
}
76+
};
7477

7578
// Building day grid
7679
const days = [];
@@ -81,9 +84,12 @@ export default function ActivitySelector(props: ActivitySelectorProps) {
8184

8285
let addClass = styles.none;
8386
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;
87+
else if (currentData?.type == ActivityType.ILLNESS)
88+
addClass = styles.illness;
89+
else if (currentData?.type == ActivityType.MEASURES)
90+
addClass = styles.measures;
91+
else if (currentData?.type == ActivityType.VACATION)
92+
addClass = styles.vacation;
8793

8894
let hours = <></>;
8995
if (currentData?.type == ActivityType.WORK) {
@@ -94,66 +100,25 @@ export default function ActivitySelector(props: ActivitySelectorProps) {
94100
<div key={currentDate.getTime()}>
95101
<button
96102
type="button"
97-
className={styles.activityGridButton + ' ' + addClass}
98-
onClick={() => dateSelected(currentDate)}>
103+
className={styles.activityGridButton + " " + addClass}
104+
onClick={() => dateSelected(currentDate)}
105+
>
99106
{currentDateStr}
100107
</button>
101108
{hours}
102109
</div>
103110
);
104111
}
105112

106-
const hoursInput = <TextField label="Antall timer"
107-
type="number"
108-
step="0.5"
109-
value={selectedHours || 0}
110-
onChange={updateHours} />
111-
112-
// Summary
113-
let workHours = 0;
114-
let illnessDays = 0;
115-
let measuresDays = 0;
116-
let vacationDays = 0;
117-
for (const key in savedDates) {
118-
const currentData = savedDates[key];
119-
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;
124-
}
125-
126-
let summaryWork = <></>
127-
if (workHours > 0) {
128-
summaryWork = <div className={styles.summaryLine + ' ' + styles.work}>
129-
<div>Arbeid</div>
130-
<div>{workHours} {(workHours == 1) ? 'time' : 'timer'}</div>
131-
</div>
132-
}
133-
134-
let summaryIllness = <></>
135-
if (illnessDays > 0) {
136-
summaryIllness = <div className={styles.summaryLine + ' ' + styles.illness}>
137-
<div>Syk</div>
138-
<div>{illnessDays} {(illnessDays == 1) ? 'dag' : 'dager'}</div>
139-
</div>
140-
}
141-
142-
let summaryMeasures = <></>
143-
if (measuresDays > 0) {
144-
summaryMeasures = <div className={styles.summaryLine + ' ' + styles.measures}>
145-
<div>Tiltak</div>
146-
<div>{measuresDays} {(measuresDays == 1) ? 'dag' : 'dager'}</div>
147-
</div>
148-
}
149-
150-
let summaryVacation = <></>
151-
if (vacationDays > 0) {
152-
summaryVacation = <div className={styles.summaryLine + ' ' + styles.vacation}>
153-
<div>Fravær/ferie</div>
154-
<div>{vacationDays} {(vacationDays == 1) ? 'dag' : 'dager'}</div>
155-
</div>
156-
}
113+
const hoursInput = (
114+
<TextField
115+
label="Antall timer"
116+
type="number"
117+
step="0.5"
118+
value={selectedHours || 0}
119+
onChange={updateHours}
120+
/>
121+
);
157122

158123
return (
159124
<div className={styles.container}>
@@ -165,31 +130,19 @@ export default function ActivitySelector(props: ActivitySelectorProps) {
165130
<div>fre</div>
166131
<div>lør</div>
167132
<div>søn</div>
168-
{
169-
days
170-
}
133+
{days}
171134
</div>
172135

173136
<Spacer />
174137

175-
{
176-
Object.keys(savedDates).length !== 0 &&
177-
<div className={styles.summary}>
178-
<div className={styles.summaryHeader}>Sammenlagt for meldeperioden:</div>
179-
{summaryWork}
180-
{summaryIllness}
181-
{summaryMeasures}
182-
{summaryVacation}
183-
</div>
184-
}
185-
186-
187138
<Modal
188139
open={open}
189140
aria-label="Modal demo"
190141
closeButton={true}
191142
shouldCloseOnOverlayClick={false}
192-
onClose={() => setOpen((x) => !x)}
143+
onClose={() => {
144+
setOpen((x) => !x);
145+
}}
193146
aria-labelledby="modal-heading"
194147
>
195148
<Modal.Content>
@@ -200,42 +153,75 @@ export default function ActivitySelector(props: ActivitySelectorProps) {
200153
<div>
201154
<button
202155
type="button"
203-
className={styles.activityTypeButton + ' ' + styles.work + ' ' + ((selectedType == ActivityType.WORK) ? styles.selected : '')}
204-
onClick={() => dateTypeSelected(ActivityType.WORK)}>
156+
className={
157+
styles.activityTypeButton +
158+
" " +
159+
styles.work +
160+
" " +
161+
(selectedType == ActivityType.WORK ? styles.selected : "")
162+
}
163+
onClick={() => dateTypeSelected(ActivityType.WORK)}
164+
>
205165
Arbeid
206166
</button>
207-
{
208-
(selectedType == ActivityType.WORK) ? hoursInput : ''
209-
}
167+
{selectedType == ActivityType.WORK ? hoursInput : ""}
210168
</div>
211169
<div>
212170
<button
213171
type="button"
214-
className={styles.activityTypeButton + ' ' + styles.illness + ' ' + ((selectedType == ActivityType.ILLNESS) ? styles.selected : '')}
215-
onClick={() => dateTypeSelected(ActivityType.ILLNESS)}>
172+
className={
173+
styles.activityTypeButton +
174+
" " +
175+
styles.illness +
176+
" " +
177+
(selectedType == ActivityType.ILLNESS ? styles.selected : "")
178+
}
179+
onClick={() => dateTypeSelected(ActivityType.ILLNESS)}
180+
>
216181
Syk
217182
</button>
218183
</div>
219184
<div>
220185
<button
221186
type="button"
222-
className={styles.activityTypeButton + ' ' + styles.measures + ' ' + ((selectedType == ActivityType.MEASURES) ? styles.selected : '')}
223-
onClick={() => dateTypeSelected(ActivityType.MEASURES)}>
187+
className={
188+
styles.activityTypeButton +
189+
" " +
190+
styles.measures +
191+
" " +
192+
(selectedType == ActivityType.MEASURES ? styles.selected : "")
193+
}
194+
onClick={() => dateTypeSelected(ActivityType.MEASURES)}
195+
>
224196
Tiltak
225197
</button>
226198
</div>
227199
<div>
228200
<button
229-
className={styles.activityTypeButton + ' ' + styles.vacation + ' ' + ((selectedType == ActivityType.VACATION) ? styles.selected : '')}
230-
onClick={() => dateTypeSelected(ActivityType.VACATION)}>
201+
className={
202+
styles.activityTypeButton +
203+
" " +
204+
styles.vacation +
205+
" " +
206+
(selectedType == ActivityType.VACATION ? styles.selected : "")
207+
}
208+
onClick={() => dateTypeSelected(ActivityType.VACATION)}
209+
>
231210
Fravær/ferie
232211
</button>
233212
</div>
234213
<div>
235214
<button
236215
type="button"
237-
className={styles.activityTypeButton + ' ' + styles.none + ' ' + ((selectedType == null) ? styles.selected : '')}
238-
onClick={() => dateTypeSelected(null)}>
216+
className={
217+
styles.activityTypeButton +
218+
" " +
219+
styles.none +
220+
" " +
221+
(selectedType == null ? styles.selected : "")
222+
}
223+
onClick={() => dateTypeSelected(null)}
224+
>
239225
Ingenting
240226
</button>
241227
</div>
@@ -244,13 +230,17 @@ export default function ActivitySelector(props: ActivitySelectorProps) {
244230
<Button variant="secondary" onClick={() => setOpen(false)}>
245231
Avbryt
246232
</Button>
247-
<Button variant="primary" onClick={() => saveDate()}>
233+
<Button
234+
variant="primary"
235+
onClick={() => {
236+
saveDate();
237+
}}
238+
>
248239
Lagre
249240
</Button>
250241
</Panel>
251242
</Modal.Content>
252243
</Modal>
253-
254244
</div>
255245
);
256246
}

0 commit comments

Comments
 (0)