@@ -12,6 +12,7 @@ export default function Home() {
12
12
const [ jobs , setJobs ] = useState ( [ ] ) ;
13
13
const [ rows , setRows ] = useState ( [ ] ) ;
14
14
const [ expandedRows , setExpandedRows ] = useState ( [ ] ) ;
15
+ const [ requiredFilter , setRequiredFilter ] = useState ( false ) ;
15
16
16
17
useEffect ( ( ) => {
17
18
const fetchData = async ( ) => {
@@ -44,17 +45,34 @@ export default function Home() {
44
45
fetchData ( ) ;
45
46
} , [ ] ) ;
46
47
48
+
49
+ // Filter based on required tag.
50
+ const filterRequired = ( filteredJobs ) => {
51
+ if ( requiredFilter ) {
52
+ filteredJobs = filteredJobs . filter ( ( job ) => job . required ) ;
53
+ }
54
+ return filteredJobs ;
55
+ } ;
56
+
47
57
useEffect ( ( ) => {
48
58
setLoading ( true ) ;
49
59
50
- // Create rows to set into table.
51
- const rows = jobs . map ( ( job ) => ( {
52
- ...job ,
53
- weather : getWeatherIndex ( job ) ,
54
- } ) ) ;
55
- setRows ( rows ) ;
60
+ // Filter based on required tag.
61
+ let filteredJobs = filterRequired ( jobs ) ;
62
+
63
+ //Set the rows for the table.
64
+ setRows (
65
+ filteredJobs . map ( ( job ) => ( {
66
+ name : job . name ,
67
+ runs : job . runs ,
68
+ fails : job . fails ,
69
+ skips : job . skips ,
70
+ required : job . required ,
71
+ weather : getWeatherIndex ( job ) ,
72
+ } ) )
73
+ ) ;
56
74
setLoading ( false ) ;
57
- } , [ jobs ] ) ;
75
+ } , [ jobs , requiredFilter ] ) ;
58
76
59
77
const toggleRow = ( rowData ) => {
60
78
const isRowExpanded = expandedRows . includes ( rowData ) ;
@@ -69,6 +87,11 @@ export default function Home() {
69
87
setExpandedRows ( updatedExpandedRows ) ;
70
88
} ;
71
89
90
+ const buttonClass = ( active ) => `tab md:px-4 px-2 py-2 border-2
91
+ ${ active ? "border-blue-500 bg-blue-500 text-white"
92
+ : "border-gray-300 bg-white hover:bg-gray-100" } `;
93
+
94
+
72
95
// Template for rendering the Name column as a clickable item
73
96
const nameTemplate = ( rowData ) => {
74
97
return (
@@ -292,6 +315,11 @@ export default function Home() {
292
315
"m-0 h-full p-4 overflow-x-hidden overflow-y-auto bg-surface-ground font-normal text-text-color antialiased select-text"
293
316
}
294
317
>
318
+ < button
319
+ className = { buttonClass ( requiredFilter ) }
320
+ onClick = { ( ) => setRequiredFilter ( ! requiredFilter ) } >
321
+ Required Jobs Only
322
+ </ button >
295
323
< div className = "mt-4 text-lg" > Total Rows: { rows . length } </ div >
296
324
< div > { renderTable ( ) } </ div >
297
325
</ main >
0 commit comments