11import React , { useCallback , useContext , useEffect , useState } from "react" ;
22import { styled } from "@mui/material/styles" ;
33import { Button , Tab , Typography } from "@mui/material" ;
4+ import MenuItem from '@mui/material/MenuItem' ;
5+ import FormControl from '@mui/material/FormControl' ;
6+ import TextField from '@mui/material/TextField' ;
47import { TabContext , TabList , TabPanel } from "@mui/lab" ;
58import { AppContext } from "../context/AppContext" ;
69import {
@@ -40,6 +43,13 @@ const Root = styled("div")({
4043 } ,
4144} ) ;
4245
46+ const DateRange = {
47+ THREE_MONTHS : '3mo' ,
48+ SIX_MONTHS : '6mo' ,
49+ ONE_YEAR : '1yr' ,
50+ ALL_TIME : 'all'
51+ } ;
52+
4353const KudosPage = ( ) => {
4454 const { state, dispatch } = useContext ( AppContext ) ;
4555 const csrf = selectCsrfToken ( state ) ;
@@ -52,24 +62,48 @@ const KudosPage = () => {
5262 const [ receivedKudosLoading , setReceivedKudosLoading ] = useState ( true ) ;
5363 const [ sentKudos , setSentKudos ] = useState ( [ ] ) ;
5464 const [ sentKudosLoading , setSentKudosLoading ] = useState ( true ) ;
65+ const [ dateRange , setDateRange ] = useState ( DateRange . THREE_MONTHS ) ;
66+
67+ const isInRange = ( requestDate ) => {
68+ const oldestDate = new Date ( ) ;
69+ switch ( dateRange ) {
70+ case DateRange . SIX_MONTHS :
71+ oldestDate . setMonth ( oldestDate . getMonth ( ) - 6 ) ;
72+ break ;
73+ case DateRange . ONE_YEAR :
74+ oldestDate . setFullYear ( oldestDate . getFullYear ( ) - 1 ) ;
75+ break ;
76+ case DateRange . ALL_TIME :
77+ return true ;
78+ case DateRange . THREE_MONTHS :
79+ default :
80+ oldestDate . setMonth ( oldestDate . getMonth ( ) - 3 ) ;
81+ }
82+
83+ if ( Array . isArray ( requestDate ) ) {
84+ requestDate = new Date ( requestDate . join ( '/' ) ) ;
85+ // have to do for Safari
86+ }
87+ return requestDate >= oldestDate ;
88+ } ;
5589
5690 const loadReceivedKudos = useCallback ( async ( ) => {
5791 setReceivedKudosLoading ( true ) ;
5892 const res = await getReceivedKudos ( currentUser . id , csrf ) ;
5993 if ( res ?. payload ?. data && ! res . error ) {
6094 setReceivedKudosLoading ( false ) ;
61- return res . payload . data ;
95+ return res . payload . data . filter ( ( k ) => isInRange ( k . dateCreated ) ) ;
6296 }
63- } , [ csrf , dispatch , currentUser . id ] ) ;
97+ } , [ csrf , dispatch , currentUser . id , dateRange ] ) ;
6498
6599 const loadSentKudos = useCallback ( async ( ) => {
66100 setSentKudosLoading ( true ) ;
67101 const res = await getSentKudos ( currentUser . id , csrf ) ;
68102 if ( res ?. payload ?. data && ! res . error ) {
69103 setSentKudosLoading ( false ) ;
70- return res . payload . data ;
104+ return res . payload . data . filter ( ( k ) => isInRange ( k . dateCreated ) ) ;
71105 }
72- } , [ csrf , dispatch , currentUser . id ] ) ;
106+ } , [ csrf , dispatch , currentUser . id , dateRange ] ) ;
73107
74108 const loadAndSetReceivedKudos = ( ) => {
75109 loadReceivedKudos ( ) . then ( ( data ) => {
@@ -96,7 +130,7 @@ const KudosPage = () => {
96130 loadAndSetSentKudos ( ) ;
97131 }
98132 // eslint-disable-next-line react-hooks/exhaustive-deps
99- } , [ csrf , currentUser , kudosTab ] ) ;
133+ } , [ csrf , currentUser , kudosTab , dateRange ] ) ;
100134
101135 const handleTabChange = useCallback (
102136 ( event , newTab ) => {
@@ -124,6 +158,23 @@ const KudosPage = () => {
124158 open = { kudosDialogOpen }
125159 onClose = { ( ) => setKudosDialogOpen ( false ) }
126160 />
161+ < FormControl className = { classes . textField } >
162+ < TextField
163+ id = "select-time"
164+ select
165+ fullWidth
166+ size = "small"
167+ label = "Show kudos within"
168+ onChange = { e => setDateRange ( e . target . value ) }
169+ value = { dateRange }
170+ variant = "outlined"
171+ >
172+ < MenuItem value = { DateRange . THREE_MONTHS } > Past 3 months</ MenuItem >
173+ < MenuItem value = { DateRange . SIX_MONTHS } > Past 6 months</ MenuItem >
174+ < MenuItem value = { DateRange . ONE_YEAR } > Past year</ MenuItem >
175+ < MenuItem value = { DateRange . ALL_TIME } > All time</ MenuItem >
176+ </ TextField >
177+ </ FormControl >
127178 { selectHasCreateKudosPermission ( state ) && < Button
128179 className = "kudos-dialog-open"
129180 variant = "outlined"
0 commit comments