Skip to content

Commit 139e875

Browse files
committed
fix: custom date range selector
1 parent cd1c13f commit 139e875

1 file changed

Lines changed: 42 additions & 46 deletions

File tree

src/components/TotalOrgSummary/VolunteerTrendsLineChart/VolunteerTrendsLineChart.jsx

Lines changed: 42 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,7 @@ const dateToYYYYMMDD = date => {
5050
return date.toISOString().split('T')[0];
5151
};
5252

53-
export default function VolunteerTrendsLineChart(props) {
54-
const { darkMode } = props;
53+
export default function VolunteerTrendsLineChart({ darkMode }) {
5554
const [isLoading, setIsLoading] = useState(true);
5655
const [data, setData] = useState(null);
5756
const [fetchError, setFetchError] = useState(false);
@@ -60,40 +59,29 @@ export default function VolunteerTrendsLineChart(props) {
6059
const [requestTimeFrame, setRequestTimeFrame] = useState(1);
6160
const [requestOffset, setRequestOffset] = useState('week');
6261
const [showDatePicker, setShowDatePicker] = useState(false);
63-
6462
const [customDateRange, setCustomDateRange] = useState([null, null]);
65-
const [startDate = new Date(), endDate = new Date()] = customDateRange;
63+
const [customStartDate = new Date(), customEndDate = new Date()] = customDateRange;
6664

6765
useEffect(() => {
6866
// Gets backend data
6967
const getData = async () => {
70-
try {
71-
// TODO: NEED TO ABSTRACT THIS TO ITS OWN REDUX REDUCER
72-
const url = ENDPOINTS.VOLUNTEER_TRENDS(requestTimeFrame, requestOffset);
73-
const response = await axios.get(url);
74-
const rawData = formatChartData(response.data);
75-
setData(rawData);
76-
} catch (err) {
77-
setFetchError(err);
78-
} finally {
79-
setIsLoading(false);
80-
}
81-
};
82-
getData();
83-
}, [requestTimeFrame, requestOffset]);
84-
85-
useEffect(() => {
86-
// Gets backend data using custom date ranges
87-
const getData = async () => {
88-
try {
89-
// TODO: NEED TO ABSTRACT THIS TO ITS OWN REDUX REDUCER
68+
// TODO: NEED TO ABSTRACT THIS TO ITS OWN REDUX REDUCER
69+
let url;
70+
if (customDateRange.every(date => date)) {
71+
// URL for custom dates
9072
const formattedDateRange = customDateRange.map(date => dateToYYYYMMDD(date));
91-
const url = ENDPOINTS.VOLUNTEER_TRENDS(
73+
url = ENDPOINTS.VOLUNTEER_TRENDS(
9274
requestTimeFrame,
9375
requestOffset,
9476
formattedDateRange[0],
9577
formattedDateRange[1],
9678
);
79+
} else {
80+
// URL for pre-set timeframes
81+
url = ENDPOINTS.VOLUNTEER_TRENDS(requestTimeFrame, requestOffset);
82+
}
83+
84+
try {
9785
const response = await axios.get(url);
9886
const rawData = formatChartData(response.data);
9987
setData(rawData);
@@ -103,8 +91,8 @@ export default function VolunteerTrendsLineChart(props) {
10391
setIsLoading(false);
10492
}
10593
};
106-
if (customDateRange.every(date => date)) getData();
107-
}, [customDateRange]);
94+
getData();
95+
}, [requestTimeFrame, requestOffset, customDateRange]);
10896

10997
useEffect(() => {
11098
// Add event listener to set chart width on window resize
@@ -182,23 +170,25 @@ export default function VolunteerTrendsLineChart(props) {
182170
return null;
183171
};
184172

185-
const setDateFilter = e => {
186-
if (e.target.value === 'custom-date') {
173+
const setTimeframeFilter = e => {
174+
if (e.target.value === 'yearsCustom') {
187175
return setShowDatePicker(true);
188176
}
189177

190178
setCustomDateRange([null, null]);
191179
setShowDatePicker(false);
192-
const [years, offset] = e.target.value.split('-');
193-
const numberOfYears = years.substring(5);
180+
const numberOfYears = e.target.value.substring(5);
194181
setIsLoading(true);
195182
setRequestTimeFrame(numberOfYears);
196-
setRequestOffset(offset);
197183
return undefined;
198184
};
199185

186+
const setOffsetFilter = e => {
187+
const offset = e.target.value;
188+
setRequestOffset(offset);
189+
};
190+
200191
const handleCustomDateRange = updatedDateRange => {
201-
console.log(updatedDateRange);
202192
setCustomDateRange(updatedDateRange);
203193
if (updatedDateRange[1]) {
204194
setShowDatePicker(false);
@@ -213,25 +203,31 @@ export default function VolunteerTrendsLineChart(props) {
213203
return (
214204
<div className="chart-container">
215205
{/* DATE FILTER */}
216-
<select name="date-filter" id="date-filter" onChange={setDateFilter}>
217-
<option value="years1-week">This year by week</option>
218-
<option value="years1-month">This year by month</option>
219-
<option value="years2-month">Last 2 years by month</option>
220-
<option value="years3-month">Last 3 years by month</option>
221-
<option value="years5-month">Last 5 years by month</option>
222-
<option value="years10-month">Last 10 years by month</option>
223-
<option value="years0-month">All-time</option>
224-
<option value="custom-date">Choose Date Range</option>
225-
</select>
206+
<div className="date-filter-container">
207+
<select name="timeframe-filter" id="timeframe-filter" onChange={setTimeframeFilter}>
208+
<option value="years1">This year</option>
209+
<option value="years2">Last 2 years</option>
210+
<option value="years3">Last 3 years</option>
211+
<option value="years5">Last 5 years</option>
212+
<option value="years10">Last 10 years</option>
213+
<option value="years0">All-time</option>
214+
<option value="yearsCustom">Choose Date Range</option>
215+
</select>
216+
by
217+
<select name="offset-filter" id="offset-filter" onChange={setOffsetFilter}>
218+
<option value="week">week</option>
219+
<option value="month">month</option>
220+
</select>
221+
</div>
226222

227223
{/* DATE PICKER */}
228224
<div className="date-picker-container">
229225
{showDatePicker && (
230226
<DatePicker
231-
selected={startDate}
227+
selected={customStartDate}
232228
onChange={handleCustomDateRange}
233-
startDate={startDate}
234-
endDate={endDate}
229+
startDate={customStartDate}
230+
endDate={customEndDate}
235231
selectsRange
236232
inline
237233
dateFormat="MM-dd-yyyy"

0 commit comments

Comments
 (0)