@@ -55,7 +55,6 @@ const Home: React.FC = () => {
5555 setUsername,
5656 token,
5757 setToken,
58- error : authError ,
5958 getOctokit,
6059 } = useGitHubAuth ( ) ;
6160
@@ -82,14 +81,26 @@ const Home: React.FC = () => {
8281 // Fetch data when username, tab, or page changes
8382 useEffect ( ( ) => {
8483 if ( username ) {
85- fetchData ( username , page + 1 , ROWS_PER_PAGE ) ;
84+ fetchData ( username , page + 1 , ROWS_PER_PAGE , tab === 0 ? "issue" : "pr" , {
85+ search : searchTitle ,
86+ repo : selectedRepo ,
87+ startDate,
88+ endDate,
89+ state : tab === 0 ? issueFilter : prFilter ,
90+ } ) ;
8691 }
87- } , [ tab , page ] ) ;
92+ } , [ tab , page , issueFilter , prFilter ] ) ;
8893
8994 const handleSubmit = ( e : React . FormEvent < HTMLFormElement > ) : void => {
9095 e . preventDefault ( ) ;
9196 setPage ( 0 ) ;
92- fetchData ( username , 1 , ROWS_PER_PAGE ) ;
97+ fetchData ( username , 1 , ROWS_PER_PAGE , tab === 0 ? "issue" : "pr" , {
98+ search : searchTitle ,
99+ repo : selectedRepo ,
100+ startDate,
101+ endDate,
102+ state : tab === 0 ? issueFilter : prFilter ,
103+ } ) ;
93104 } ;
94105
95106 const handlePageChange = ( _ : unknown , newPage : number ) => {
@@ -99,45 +110,6 @@ const Home: React.FC = () => {
99110 const formatDate = ( dateString : string ) : string =>
100111 new Date ( dateString ) . toLocaleDateString ( ) ;
101112
102- const filterData = ( data : GitHubItem [ ] , filterType : string ) : GitHubItem [ ] => {
103- let filtered = [ ...data ] ;
104- if ( [ "open" , "closed" , "merged" ] . includes ( filterType ) ) {
105- filtered = filtered . filter ( ( item ) => {
106- if ( filterType === "merged" ) {
107- return ! ! item . pull_request ?. merged_at
108- }
109- else if ( filterType === "closed" ) {
110- return item . state === "closed" && ! item . pull_request ?. merged_at
111- }
112- else {
113- //open
114- return item . state === "open"
115- }
116- } ) ;
117- }
118- if ( searchTitle ) {
119- filtered = filtered . filter ( ( item ) =>
120- item . title . toLowerCase ( ) . includes ( searchTitle . toLowerCase ( ) )
121- ) ;
122- }
123- if ( selectedRepo ) {
124- filtered = filtered . filter ( ( item ) =>
125- item . repository_url . includes ( selectedRepo )
126- ) ;
127- }
128- if ( startDate ) {
129- filtered = filtered . filter (
130- ( item ) => new Date ( item . created_at ) >= new Date ( startDate )
131- ) ;
132- }
133- if ( endDate ) {
134- filtered = filtered . filter (
135- ( item ) => new Date ( item . created_at ) <= new Date ( endDate )
136- ) ;
137- }
138- return filtered ;
139- } ;
140-
141113 const getStatusIcon = ( item : GitHubItem ) => {
142114
143115 if ( item . pull_request ) {
@@ -158,16 +130,15 @@ const Home: React.FC = () => {
158130 } ;
159131
160132
161- // Current data and filtered data according to tab and filters
162- const currentRawData = tab === 0 ? issues : prs ;
163- const currentFilteredData = filterData ( currentRawData , tab === 0 ? issueFilter : prFilter ) ;
133+ // Current data according to tab
134+ const currentFilteredData = tab === 0 ? issues : prs ;
164135 const totalCount = tab === 0 ? totalIssues : totalPrs ;
165136
166137 return (
167138 < Container maxWidth = "lg" sx = { { mt : 4 , minHeight : "80vh" , color : theme . palette . text . primary } } >
168- { /* Auth Form */ }
169- < Paper elevation = { 1 } sx = { { p : 2 , mb : 4 , backgroundColor : theme . palette . background . paper } } >
170- < form onSubmit = { handleSubmit } >
139+ < form onSubmit = { handleSubmit } >
140+ { /* Auth Form */ }
141+ < Paper elevation = { 1 } sx = { { p : 2 , mb : 4 , backgroundColor : theme . palette . background . paper } } >
171142 < Box sx = { { display : "flex" , gap : 2 , flexWrap : "wrap" } } >
172143 < TextField
173144 label = "GitHub Username"
@@ -236,43 +207,43 @@ const Home: React.FC = () => {
236207 alignSelf : "flex-start" ,
237208 } }
238209 >
239- Fetch Data
210+ Fetch Data / Apply Filters
240211 </ Button >
241212 </ Box >
242- </ form >
243- </ Paper >
244-
245- { /* Filters */ }
246- < Box sx = { { mb : 2 , display : "flex" , flexWrap : "wrap" , gap : 2 } } >
247- < TextField
248- label = "Search Title"
249- value = { searchTitle }
250- onChange = { ( e ) => setSearchTitle ( e . target . value ) }
251- sx = { { minWidth : 200 } }
252- />
253- < TextField
254- label = "Repository"
255- value = { selectedRepo }
256- onChange = { ( e ) => setSelectedRepo ( e . target . value ) }
257- sx = { { minWidth : 200 } }
258- />
259- < TextField
260- label = "Start Date "
261- type = "date"
262- value = { startDate }
263- onChange = { ( e ) => setStartDate ( e . target . value ) }
264- InputLabelProps = { { shrink : true } }
265- sx = { { minWidth : 150 } }
266- />
267- < TextField
268- label = "End Date "
269- type = "date"
270- value = { endDate }
271- onChange = { ( e ) => setEndDate ( e . target . value ) }
272- InputLabelProps = { { shrink : true } }
273- sx = { { minWidth : 150 } }
274- / >
275- </ Box >
213+ </ Paper >
214+
215+ { /* Filters */ }
216+ < Box sx = { { mb : 2 , display : "flex" , flexWrap : "wrap" , gap : 2 } } >
217+ < TextField
218+ label = "Search Title"
219+ value = { searchTitle }
220+ onChange = { ( e ) => setSearchTitle ( e . target . value ) }
221+ sx = { { minWidth : 200 } }
222+ />
223+ < TextField
224+ label = "Repository"
225+ value = { selectedRepo }
226+ onChange = { ( e ) => setSelectedRepo ( e . target . value ) }
227+ sx = { { minWidth : 200 } }
228+ />
229+ < TextField
230+ label = "Start Date"
231+ type = "date "
232+ value = { startDate }
233+ onChange = { ( e ) => setStartDate ( e . target . value ) }
234+ InputLabelProps = { { shrink : true } }
235+ sx = { { minWidth : 150 } }
236+ />
237+ < TextField
238+ label = "End Date"
239+ type = "date "
240+ value = { endDate }
241+ onChange = { ( e ) => setEndDate ( e . target . value ) }
242+ InputLabelProps = { { shrink : true } }
243+ sx = { { minWidth : 150 } }
244+ />
245+ </ Box >
246+ </ form >
276247
277248 { /* Tabs + State Filter */ }
278249 < Box
@@ -300,11 +271,14 @@ const Home: React.FC = () => {
300271 < InputLabel sx = { { fontSize : "14px" } } > State</ InputLabel >
301272 < Select
302273 value = { tab === 0 ? issueFilter : prFilter }
303- onChange = { ( e ) =>
304- tab === 0
305- ? setIssueFilter ( e . target . value )
306- : setPrFilter ( e . target . value )
307- }
274+ onChange = { ( e ) => {
275+ setPage ( 0 ) ;
276+ if ( tab === 0 ) {
277+ setIssueFilter ( e . target . value ) ;
278+ } else {
279+ setPrFilter ( e . target . value ) ;
280+ }
281+ } }
308282 label = "State"
309283 sx = { {
310284 backgroundColor : theme . palette . background . paper ,
@@ -324,9 +298,9 @@ const Home: React.FC = () => {
324298 </ FormControl >
325299 </ Box >
326300
327- { ( authError || dataError ) && (
301+ { dataError && (
328302 < Alert severity = "error" sx = { { mb : 3 } } >
329- { authError || dataError }
303+ { dataError }
330304 </ Alert >
331305 ) }
332306
0 commit comments