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