@@ -2,6 +2,9 @@ import React, { useCallback, useContext, useEffect, useState } from "react";
22import { useParams } from 'react-router-dom' ;
33import { styled } from "@mui/material/styles" ;
44import { Button , Tab , Typography } from "@mui/material" ;
5+ import MenuItem from '@mui/material/MenuItem' ;
6+ import FormControl from '@mui/material/FormControl' ;
7+ import TextField from '@mui/material/TextField' ;
58import { TabContext , TabList , TabPanel } from "@mui/lab" ;
69import { AppContext } from "../context/AppContext" ;
710import {
@@ -51,6 +54,13 @@ const validTabName = (name) => {
5154 name = "received" ;
5255 }
5356 return name ;
57+ }
58+
59+ const DateRange = {
60+ THREE_MONTHS : '3mo' ,
61+ SIX_MONTHS : '6mo' ,
62+ ONE_YEAR : '1yr' ,
63+ ALL_TIME : 'all'
5464} ;
5565
5666const KudosPage = ( ) => {
@@ -66,24 +76,48 @@ const KudosPage = () => {
6676 const [ receivedKudosLoading , setReceivedKudosLoading ] = useState ( true ) ;
6777 const [ sentKudos , setSentKudos ] = useState ( [ ] ) ;
6878 const [ sentKudosLoading , setSentKudosLoading ] = useState ( true ) ;
79+ const [ dateRange , setDateRange ] = useState ( DateRange . THREE_MONTHS ) ;
80+
81+ const isInRange = ( requestDate ) => {
82+ const oldestDate = new Date ( ) ;
83+ switch ( dateRange ) {
84+ case DateRange . SIX_MONTHS :
85+ oldestDate . setMonth ( oldestDate . getMonth ( ) - 6 ) ;
86+ break ;
87+ case DateRange . ONE_YEAR :
88+ oldestDate . setFullYear ( oldestDate . getFullYear ( ) - 1 ) ;
89+ break ;
90+ case DateRange . ALL_TIME :
91+ return true ;
92+ case DateRange . THREE_MONTHS :
93+ default :
94+ oldestDate . setMonth ( oldestDate . getMonth ( ) - 3 ) ;
95+ }
96+
97+ if ( Array . isArray ( requestDate ) ) {
98+ requestDate = new Date ( requestDate . join ( '/' ) ) ;
99+ // have to do for Safari
100+ }
101+ return requestDate >= oldestDate ;
102+ } ;
69103
70104 const loadReceivedKudos = useCallback ( async ( ) => {
71105 setReceivedKudosLoading ( true ) ;
72106 const res = await getReceivedKudos ( currentUser . id , csrf ) ;
73107 if ( res ?. payload ?. data && ! res . error ) {
74108 setReceivedKudosLoading ( false ) ;
75- return res . payload . data ;
109+ return res . payload . data . filter ( ( k ) => isInRange ( k . dateCreated ) ) ;
76110 }
77- } , [ csrf , dispatch , currentUser . id ] ) ;
111+ } , [ csrf , dispatch , currentUser . id , dateRange ] ) ;
78112
79113 const loadSentKudos = useCallback ( async ( ) => {
80114 setSentKudosLoading ( true ) ;
81115 const res = await getSentKudos ( currentUser . id , csrf ) ;
82116 if ( res ?. payload ?. data && ! res . error ) {
83117 setSentKudosLoading ( false ) ;
84- return res . payload . data ;
118+ return res . payload . data . filter ( ( k ) => isInRange ( k . dateCreated ) ) ;
85119 }
86- } , [ csrf , dispatch , currentUser . id ] ) ;
120+ } , [ csrf , dispatch , currentUser . id , dateRange ] ) ;
87121
88122 const loadAndSetReceivedKudos = ( ) => {
89123 loadReceivedKudos ( ) . then ( ( data ) => {
@@ -110,7 +144,7 @@ const KudosPage = () => {
110144 loadAndSetSentKudos ( ) ;
111145 }
112146 // eslint-disable-next-line react-hooks/exhaustive-deps
113- } , [ csrf , currentUser , kudosTab ] ) ;
147+ } , [ csrf , currentUser , kudosTab , dateRange ] ) ;
114148
115149 const handleTabChange = useCallback (
116150 ( event , newTab ) => {
@@ -127,6 +161,23 @@ const KudosPage = () => {
127161 open = { kudosDialogOpen }
128162 onClose = { ( ) => setKudosDialogOpen ( false ) }
129163 />
164+ < FormControl className = { classes . textField } >
165+ < TextField
166+ id = "select-time"
167+ select
168+ fullWidth
169+ size = "small"
170+ label = "Show kudos within"
171+ onChange = { e => setDateRange ( e . target . value ) }
172+ value = { dateRange }
173+ variant = "outlined"
174+ >
175+ < MenuItem value = { DateRange . THREE_MONTHS } > Past 3 months</ MenuItem >
176+ < MenuItem value = { DateRange . SIX_MONTHS } > Past 6 months</ MenuItem >
177+ < MenuItem value = { DateRange . ONE_YEAR } > Past year</ MenuItem >
178+ < MenuItem value = { DateRange . ALL_TIME } > All time</ MenuItem >
179+ </ TextField >
180+ </ FormControl >
130181 { selectHasCreateKudosPermission ( state ) && < Button
131182 className = "kudos-dialog-open"
132183 variant = "outlined"
0 commit comments