@@ -16,25 +16,50 @@ import { KeyboardArrowRight } from '@material-ui/icons';
16
16
import Search from '../../../components/Search/Search' ;
17
17
import Pagination from '../../../components/Pagination/Pagination' ;
18
18
19
- export default function PushesTable ( props ) {
20
- const useStyles = makeStyles ( styles ) ;
19
+ interface CommitData {
20
+ commitTs ?: number ;
21
+ commitTimestamp ?: number ;
22
+ message : string ;
23
+ committer : string ;
24
+ author : string ;
25
+ authorEmail ?: string ;
26
+ }
27
+
28
+ interface PushData {
29
+ id : string ;
30
+ repo : string ;
31
+ branch : string ;
32
+ commitTo : string ;
33
+ commitData : CommitData [ ] ;
34
+ }
35
+
36
+ interface PushesTableProps {
37
+ [ key : string ] : any ;
38
+ }
39
+
40
+ const useStyles = makeStyles ( styles as any ) ;
41
+
42
+ const PushesTable : React . FC < PushesTableProps > = ( props ) => {
21
43
const classes = useStyles ( ) ;
22
- const [ data , setData ] = useState ( [ ] ) ;
23
- const [ filteredData , setFilteredData ] = useState ( [ ] ) ;
44
+ const [ data , setData ] = useState < PushData [ ] > ( [ ] ) ;
45
+ const [ filteredData , setFilteredData ] = useState < PushData [ ] > ( [ ] ) ;
24
46
const [ isLoading , setIsLoading ] = useState ( false ) ;
25
47
const [ isError , setIsError ] = useState ( false ) ;
26
48
const navigate = useNavigate ( ) ;
27
49
const [ , setAuth ] = useState ( true ) ;
28
50
const [ currentPage , setCurrentPage ] = useState ( 1 ) ;
29
51
const itemsPerPage = 5 ;
30
52
const [ searchTerm , setSearchTerm ] = useState ( '' ) ;
31
- const openPush = ( push ) => navigate ( `/dashboard/push/${ push } ` , { replace : true } ) ;
53
+
54
+ const openPush = ( pushId : string ) => navigate ( `/dashboard/push/${ pushId } ` , { replace : true } ) ;
32
55
33
56
useEffect ( ( ) => {
34
- const query = { } ;
35
- for ( const k in props ) {
36
- if ( k ) query [ k ] = props [ k ] ;
37
- }
57
+ const query = {
58
+ blocked : props . blocked ?? false ,
59
+ canceled : props . canceled ?? false ,
60
+ authorised : props . authorised ?? false ,
61
+ rejected : props . rejected ?? false ,
62
+ } ;
38
63
getPushes ( setIsLoading , setData , setAuth , setIsError , query ) ;
39
64
} , [ props ] ) ;
40
65
@@ -49,31 +74,29 @@ export default function PushesTable(props) {
49
74
( item ) =>
50
75
item . repo . toLowerCase ( ) . includes ( lowerCaseTerm ) ||
51
76
item . commitTo . toLowerCase ( ) . includes ( lowerCaseTerm ) ||
52
- item . commitData [ 0 ] . message . toLowerCase ( ) . includes ( lowerCaseTerm ) ,
77
+ item . commitData [ 0 ] ? .message . toLowerCase ( ) . includes ( lowerCaseTerm ) ,
53
78
)
54
79
: data ;
55
80
setFilteredData ( filtered ) ;
56
81
setCurrentPage ( 1 ) ;
57
82
} , [ searchTerm , data ] ) ;
58
83
59
- const handleSearch = ( term ) => setSearchTerm ( term . trim ( ) ) ;
84
+ const handleSearch = ( term : string ) => setSearchTerm ( term . trim ( ) ) ;
60
85
61
- const handlePageChange = ( page ) => {
86
+ const handlePageChange = ( page : number ) => {
62
87
setCurrentPage ( page ) ;
63
88
} ;
64
89
65
90
const indexOfLastItem = currentPage * itemsPerPage ;
66
91
const indexOfFirstItem = indexOfLastItem - itemsPerPage ;
67
92
const currentItems = filteredData . slice ( indexOfFirstItem , indexOfLastItem ) ;
68
93
69
- const paginate = ( pageNumber ) => setCurrentPage ( pageNumber ) ;
70
-
71
94
if ( isLoading ) return < div > Loading...</ div > ;
72
95
if ( isError ) return < div > Something went wrong ...</ div > ;
73
96
74
97
return (
75
98
< div >
76
- < Search onSearch = { handleSearch } /> { }
99
+ < Search onSearch = { handleSearch } />
77
100
< TableContainer component = { Paper } >
78
101
< Table className = { classes . table } aria-label = 'simple table' >
79
102
< TableHead >
@@ -91,16 +114,16 @@ export default function PushesTable(props) {
91
114
</ TableRow >
92
115
</ TableHead >
93
116
< TableBody >
94
- { currentItems . reverse ( ) . map ( ( row ) => {
117
+ { [ ... currentItems ] . reverse ( ) . map ( ( row ) => {
95
118
const repoFullName = row . repo . replace ( '.git' , '' ) ;
96
119
const repoBranch = row . branch . replace ( 'refs/heads/' , '' ) ;
120
+ const commitTimestamp =
121
+ row . commitData [ 0 ] ?. commitTs || row . commitData [ 0 ] ?. commitTimestamp ;
97
122
98
123
return (
99
124
< TableRow key = { row . id } >
100
125
< TableCell align = 'left' >
101
- { moment
102
- . unix ( row . commitData [ 0 ] . commitTs || row . commitData [ 0 ] . commitTimestamp )
103
- . toString ( ) }
126
+ { commitTimestamp ? moment . unix ( commitTimestamp ) . toString ( ) : 'N/A' }
104
127
</ TableCell >
105
128
< TableCell align = 'left' >
106
129
< a href = { `https://github.com/${ row . repo } ` } rel = 'noreferrer' target = '_blank' >
@@ -126,33 +149,41 @@ export default function PushesTable(props) {
126
149
</ a >
127
150
</ TableCell >
128
151
< TableCell align = 'left' >
129
- < a
130
- href = { `https://github.com/${ row . commitData [ 0 ] . committer } ` }
131
- rel = 'noreferrer'
132
- target = '_blank'
133
- >
134
- { row . commitData [ 0 ] . committer }
135
- </ a >
152
+ { row . commitData [ 0 ] ?. committer ? (
153
+ < a
154
+ href = { `https://github.com/${ row . commitData [ 0 ] . committer } ` }
155
+ rel = 'noreferrer'
156
+ target = '_blank'
157
+ >
158
+ { row . commitData [ 0 ] . committer }
159
+ </ a >
160
+ ) : (
161
+ 'N/A'
162
+ ) }
136
163
</ TableCell >
137
164
< TableCell align = 'left' >
138
- < a
139
- href = { `https://github.com/${ row . commitData [ 0 ] . author } ` }
140
- rel = 'noreferrer'
141
- target = '_blank'
142
- >
143
- { row . commitData [ 0 ] . author }
144
- </ a >
165
+ { row . commitData [ 0 ] ?. author ? (
166
+ < a
167
+ href = { `https://github.com/${ row . commitData [ 0 ] . author } ` }
168
+ rel = 'noreferrer'
169
+ target = '_blank'
170
+ >
171
+ { row . commitData [ 0 ] . author }
172
+ </ a >
173
+ ) : (
174
+ 'N/A'
175
+ ) }
145
176
</ TableCell >
146
177
< TableCell align = 'left' >
147
- { row . commitData [ 0 ] . authorEmail ? (
178
+ { row . commitData [ 0 ] ? .authorEmail ? (
148
179
< a href = { `mailto:${ row . commitData [ 0 ] . authorEmail } ` } >
149
180
{ row . commitData [ 0 ] . authorEmail }
150
181
</ a >
151
182
) : (
152
183
'No data...'
153
184
) }
154
185
</ TableCell >
155
- < TableCell align = 'left' > { row . commitData [ 0 ] . message } </ TableCell >
186
+ < TableCell align = 'left' > { row . commitData [ 0 ] ? .message || 'N/A' } </ TableCell >
156
187
< TableCell align = 'left' > { row . commitData . length } </ TableCell >
157
188
< TableCell component = 'th' scope = 'row' >
158
189
< Button variant = 'contained' color = 'primary' onClick = { ( ) => openPush ( row . id ) } >
@@ -165,14 +196,14 @@ export default function PushesTable(props) {
165
196
</ TableBody >
166
197
</ Table >
167
198
</ TableContainer >
168
- { /* Pagination Component */ }
169
199
< Pagination
170
200
itemsPerPage = { itemsPerPage }
171
201
totalItems = { filteredData . length }
172
- paginate = { paginate }
173
202
currentPage = { currentPage }
174
203
onPageChange = { handlePageChange }
175
204
/>
176
205
</ div >
177
206
) ;
178
- }
207
+ } ;
208
+
209
+ export default PushesTable ;
0 commit comments