1- import React , { useState , useEffect } from "react" ;
1+ import React , { useState , useEffect } from "react"
2+ import {
3+ IssueOpenedIcon ,
4+ IssueClosedIcon ,
5+ GitPullRequestIcon ,
6+ GitPullRequestClosedIcon ,
7+ GitMergeIcon ,
8+ } from '@primer/octicons-react' ;
29import {
310 Container ,
411 Box ,
@@ -39,7 +46,9 @@ interface GitHubItem {
3946}
4047
4148const Home : React . FC = ( ) => {
49+
4250 const theme = useTheme ( ) ;
51+
4352 const {
4453 username,
4554 setUsername,
@@ -48,7 +57,7 @@ const Home: React.FC = () => {
4857 error : authError ,
4958 getOctokit,
5059 } = useGitHubAuth ( ) ;
51- const octokit = getOctokit ( ) ;
60+
5261 const {
5362 issues,
5463 prs,
@@ -57,7 +66,7 @@ const Home: React.FC = () => {
5766 loading,
5867 error : dataError ,
5968 fetchData,
60- } = useGitHubData ( octokit ) ;
69+ } = useGitHubData ( getOctokit ) ;
6170
6271 const [ tab , setTab ] = useState ( 0 ) ;
6372 const [ page , setPage ] = useState ( 0 ) ;
@@ -74,7 +83,7 @@ const Home: React.FC = () => {
7483 if ( username ) {
7584 fetchData ( username , page + 1 , ROWS_PER_PAGE ) ;
7685 }
77- } , [ username , tab , page , fetchData ] ) ;
86+ } , [ tab , page ] ) ;
7887
7988 const handleSubmit = ( e : React . FormEvent < HTMLFormElement > ) : void => {
8089 e . preventDefault ( ) ;
@@ -121,12 +130,29 @@ const Home: React.FC = () => {
121130 return filtered ;
122131 } ;
123132
133+ const getStatusIcon = ( item : GitHubItem ) => {
134+
135+ if ( item . pull_request ) {
136+
137+ if ( item . pull_request . merged_at )
138+ return < GitMergeIcon size = { 16 } className = "icon-merged" /> ;
139+
140+ if ( item . state === 'closed' )
141+ return < GitPullRequestClosedIcon size = { 16 } className = "icon-pr-closed" /> ;
142+
143+ return < GitPullRequestIcon size = { 16 } className = "icon-pr-open" /> ;
144+ }
145+
146+ if ( item . state === 'closed' )
147+ return < IssueClosedIcon size = { 16 } className = "icon-issue-closed" /> ;
148+
149+ return < IssueOpenedIcon size = { 16 } className = "icon-issue-open" /> ;
150+ } ;
151+
152+
124153 // Current data and filtered data according to tab and filters
125154 const currentRawData = tab === 0 ? issues : prs ;
126- const currentFilteredData = filterData (
127- currentRawData ,
128- tab === 0 ? issueFilter : prFilter
129- ) ;
155+ const currentFilteredData = filterData ( currentRawData , tab === 0 ? issueFilter : prFilter ) ;
130156 const totalCount = tab === 0 ? totalIssues : totalPrs ;
131157
132158 return (
@@ -251,8 +277,11 @@ const Home: React.FC = () => {
251277 </ Box >
252278 ) : (
253279 < Box sx = { { maxHeight : "400px" , overflowY : "auto" } } >
280+
254281 < TableContainer component = { Paper } >
282+
255283 < Table size = "small" >
284+
256285 < TableHead >
257286 < TableRow >
258287 < TableCell > Title</ TableCell >
@@ -261,31 +290,41 @@ const Home: React.FC = () => {
261290 < TableCell > Created</ TableCell >
262291 </ TableRow >
263292 </ TableHead >
293+
264294 < TableBody >
265295 { currentFilteredData . map ( ( item ) => (
266296 < TableRow key = { item . id } >
267- < TableCell >
268- < Link
269- href = { item . html_url }
270- target = "_blank"
271- rel = "noopener noreferrer"
272- underline = "hover"
273- sx = { { color : theme . palette . primary . main } }
274- >
275- { item . title }
276- </ Link >
297+
298+ < TableCell sx = { { display : 'flex' , alignItems : 'center' , gap : 1 } } >
299+ { getStatusIcon ( item ) }
300+ < Link
301+ href = { item . html_url }
302+ target = "_blank"
303+ rel = "noopener noreferrer"
304+ underline = "hover"
305+ sx = { { color : theme . palette . primary . main } }
306+ >
307+ { item . title }
308+ </ Link >
277309 </ TableCell >
310+
311+
278312 < TableCell align = "center" >
279313 { item . repository_url . split ( "/" ) . slice ( - 1 ) [ 0 ] }
280314 </ TableCell >
315+
281316 < TableCell align = "center" >
282317 { item . pull_request ?. merged_at ? "merged" : item . state }
283318 </ TableCell >
319+
284320 < TableCell > { formatDate ( item . created_at ) } </ TableCell >
321+
285322 </ TableRow >
286323 ) ) }
287324 </ TableBody >
325+
288326 </ Table >
327+
289328 < TablePagination
290329 component = "div"
291330 count = { totalCount }
@@ -294,6 +333,7 @@ const Home: React.FC = () => {
294333 rowsPerPage = { ROWS_PER_PAGE }
295334 rowsPerPageOptions = { [ ROWS_PER_PAGE ] }
296335 />
336+
297337 </ TableContainer >
298338 </ Box >
299339 ) }
0 commit comments