-
-
Notifications
You must be signed in to change notification settings - Fork 70
Expand file tree
/
Copy pathVARSelectWeek.jsx
More file actions
83 lines (70 loc) · 2.05 KB
/
Copy pathVARSelectWeek.jsx
File metadata and controls
83 lines (70 loc) · 2.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import React from 'react';
import PropTypes from 'prop-types';
import { format, startOfWeek, endOfWeek, subWeeks } from 'date-fns';
/**
* Helper to generate recent week ranges
*/
const generateWeeks = (count = 8) => {
const weeks = [];
const today = new Date();
for (let i = 0; i < count; i += 1) {
const start = startOfWeek(subWeeks(today, i), { weekStartsOn: 1 });
const end = endOfWeek(start, { weekStartsOn: 1 });
weeks.push({
label: `${format(start, 'MMMM d')} – ${format(end, 'MMMM d, yyyy')}`,
startDate: format(start, 'yyyy-MM-dd'),
endDate: format(end, 'yyyy-MM-dd'),
});
}
return weeks;
};
const VARSelectWeek = ({ selectedWeek, onUpdate, errorMessage }) => {
const weeks = generateWeeks();
const handleChange = (e) => {
const week = weeks.find(w => w.startDate === e.target.value);
if (week && onUpdate) {
onUpdate(week);
}
};
return (
<div className="VARSelectWeek-wrapper">
<label className="VARSelectWeek-label">
Logging Activity for Week of: <span className="required">*</span>
</label>
<select
className={`VARSelectWeek-dropdown ${errorMessage ? 'error' : ''}`}
value={selectedWeek?.startDate || ''}
onChange={handleChange}
>
<option value="" disabled>
Select a week
</option>
{weeks.map((week) => (
<option key={week.startDate} value={week.startDate}>
{week.label}
</option>
))}
</select>
{!errorMessage && (
<div className="VARSelectWeek-helper">
Use dropdown to select an earlier week
</div>
)}
{errorMessage && (
<div className="VARSelectWeek-error">
{errorMessage}
</div>
)}
</div>
);
};
VARSelectWeek.propTypes = {
selectedWeek: PropTypes.shape({
label: PropTypes.string.isRequired,
startDate: PropTypes.string.isRequired,
endDate: PropTypes.string.isRequired,
}),
onUpdate: PropTypes.func,
errorMessage: PropTypes.string,
};
export default VARSelectWeek;