1
+
1
2
import { useEffect , useState } from "react" ;
2
3
import { DataTable } from "primereact/datatable" ;
3
4
import { Column } from "primereact/column" ;
@@ -9,13 +10,14 @@ export default function Home() {
9
10
const [ jobs , setJobs ] = useState ( [ ] ) ;
10
11
const [ rows , setRows ] = useState ( [ ] ) ;
11
12
const [ expandedRows , setExpandedRows ] = useState ( [ ] ) ;
13
+ const [ requiredFilter , setRequiredFilter ] = useState ( false ) ;
12
14
13
15
useEffect ( ( ) => {
14
16
const fetchData = async ( ) => {
15
17
let data = { } ;
16
18
17
19
if ( process . env . NODE_ENV === "development" ) {
18
- data = ( await import ( "../job_stats.json" ) ) . default ;
20
+ data = ( await import ( "../data/ job_stats.json" ) ) . default ;
19
21
} else {
20
22
const response = await fetch (
21
23
"https://raw.githubusercontent.com/kata-containers/kata-containers.github.io" +
@@ -43,15 +45,25 @@ export default function Home() {
43
45
44
46
useEffect ( ( ) => {
45
47
setLoading ( true ) ;
48
+ // Filter based on required tag.
49
+ let filteredJobs = jobs ;
50
+ if ( requiredFilter ) {
51
+ filteredJobs = filteredJobs . filter ( ( job ) => job . required ) ;
52
+ }
46
53
47
- // Create rows to set into table.
48
- const rows = jobs . map ( ( job ) => ( {
49
- ...job ,
50
- weather : getWeatherIndex ( job ) ,
51
- } ) ) ;
52
- setRows ( rows ) ;
54
+ //Set the rows for the table.
55
+ setRows (
56
+ filteredJobs . map ( ( job ) => ( {
57
+ name : job . name ,
58
+ runs : job . runs ,
59
+ fails : job . fails ,
60
+ skips : job . skips ,
61
+ required : job . required ,
62
+ weather : getWeatherIndex ( job ) ,
63
+ } ) )
64
+ ) ;
53
65
setLoading ( false ) ;
54
- } , [ jobs ] ) ;
66
+ } , [ jobs , requiredFilter ] ) ;
55
67
56
68
const toggleRow = ( rowData ) => {
57
69
const isRowExpanded = expandedRows . includes ( rowData ) ;
@@ -66,6 +78,11 @@ export default function Home() {
66
78
setExpandedRows ( updatedExpandedRows ) ;
67
79
} ;
68
80
81
+ const buttonClass = ( active ) => `tab md:px-4 px-2 py-2 border-2
82
+ ${ active ? "border-blue-500 bg-blue-500 text-white"
83
+ : "border-gray-300 bg-white hover:bg-gray-100" } `;
84
+
85
+
69
86
// Template for rendering the Name column as a clickable item
70
87
const nameTemplate = ( rowData ) => {
71
88
return (
@@ -178,9 +195,14 @@ export default function Home() {
178
195
"m-0 h-full p-4 overflow-x-hidden overflow-y-auto bg-surface-ground font-normal text-text-color antialiased select-text"
179
196
}
180
197
>
198
+ < button
199
+ className = { buttonClass ( requiredFilter ) }
200
+ onClick = { ( ) => setRequiredFilter ( ! requiredFilter ) } >
201
+ Required Jobs Only
202
+ </ button >
181
203
< div > { renderTable ( ) } </ div >
182
204
< div className = "mt-4 text-lg" > Total Rows: { rows . length } </ div >
183
205
</ main >
184
206
</ div >
185
207
) ;
186
- }
208
+ }
0 commit comments