Skip to content

Commit 80b5f12

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 1ab6ca8 commit 80b5f12

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
@@ -12,6 +12,7 @@ export default function Home() {
1212
const [jobs, setJobs] = useState([]);
1313
const [rows, setRows] = useState([]);
1414
const [expandedRows, setExpandedRows] = useState([]);
15+
const [requiredFilter, setRequiredFilter] = useState(false);
1516

1617
useEffect(() => {
1718
const fetchData = async () => {
@@ -44,17 +45,34 @@ export default function Home() {
4445
fetchData();
4546
}, []);
4647

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+
4757
useEffect(() => {
4858
setLoading(true);
4959

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+
);
5674
setLoading(false);
57-
}, [jobs]);
75+
}, [jobs, requiredFilter]);
5876

5977
const toggleRow = (rowData) => {
6078
const isRowExpanded = expandedRows.includes(rowData);
@@ -69,6 +87,11 @@ export default function Home() {
6987
setExpandedRows(updatedExpandedRows);
7088
};
7189

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+
7295
// Template for rendering the Name column as a clickable item
7396
const nameTemplate = (rowData) => {
7497
return (
@@ -292,6 +315,11 @@ export default function Home() {
292315
"m-0 h-full p-4 overflow-x-hidden overflow-y-auto bg-surface-ground font-normal text-text-color antialiased select-text"
293316
}
294317
>
318+
<button
319+
className={buttonClass(requiredFilter)}
320+
onClick={() => setRequiredFilter(!requiredFilter)}>
321+
Required Jobs Only
322+
</button>
295323
<div className="mt-4 text-lg">Total Rows: {rows.length}</div>
296324
<div>{renderTable()}</div>
297325
</main>

0 commit comments

Comments
 (0)