Skip to content

Commit eb3d51a

Browse files
committed
dashboard: Add filter for required tests
Added a checkbox that filters based on whether a test was required. Fixes #2 Signed-off-by: Anna Finn <[email protected]>
1 parent 2b7e4c2 commit eb3d51a

File tree

1 file changed

+35
-7
lines changed

1 file changed

+35
-7
lines changed

pages/index.js

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export default function Home() {
1010
const [jobs, setJobs] = useState([]);
1111
const [rows, setRows] = useState([]);
1212
const [expandedRows, setExpandedRows] = useState([]);
13+
const [requiredFilter, setRequiredFilter] = useState(false);
1314

1415
useEffect(() => {
1516
const fetchData = async () => {
@@ -42,17 +43,34 @@ export default function Home() {
4243
fetchData();
4344
}, []);
4445

46+
47+
// Filter based on required tag.
48+
const filterRequired = (filteredJobs) => {
49+
if (requiredFilter){
50+
filteredJobs = filteredJobs.filter((job) => job.required);
51+
}
52+
return filteredJobs;
53+
};
54+
4555
useEffect(() => {
4656
setLoading(true);
4757

48-
// Create rows to set into table.
49-
const rows = jobs.map((job) => ({
50-
...job,
51-
weather: getWeatherIndex(job),
52-
}));
53-
setRows(rows);
58+
// Filter based on required tag.
59+
let filteredJobs = filterRequired(jobs);
60+
61+
//Set the rows for the table.
62+
setRows(
63+
filteredJobs.map((job) => ({
64+
name : job.name,
65+
runs : job.runs,
66+
fails : job.fails,
67+
skips : job.skips,
68+
required : job.required,
69+
weather : getWeatherIndex(job),
70+
}))
71+
);
5472
setLoading(false);
55-
}, [jobs]);
73+
}, [jobs, requiredFilter]);
5674

5775
const toggleRow = (rowData) => {
5876
const isRowExpanded = expandedRows.includes(rowData);
@@ -67,6 +85,11 @@ export default function Home() {
6785
setExpandedRows(updatedExpandedRows);
6886
};
6987

88+
const buttonClass = (active) => `tab md:px-4 px-2 py-2 border-2
89+
${active ? "border-blue-500 bg-blue-500 text-white"
90+
: "border-gray-300 bg-white hover:bg-gray-100"}`;
91+
92+
7093
// Template for rendering the Name column as a clickable item
7194
const nameTemplate = (rowData) => {
7295
return (
@@ -185,6 +208,11 @@ export default function Home() {
185208
"m-0 h-full p-4 overflow-x-hidden overflow-y-auto bg-surface-ground font-normal text-text-color antialiased select-text"
186209
}
187210
>
211+
<button
212+
className={buttonClass(requiredFilter)}
213+
onClick={() => setRequiredFilter(!requiredFilter)}>
214+
Required Jobs Only
215+
</button>
188216
<div className="mt-4 text-lg">Total Rows: {rows.length}</div>
189217
<div>{renderTable()}</div>
190218
</main>

0 commit comments

Comments
 (0)