@@ -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