Add repository filter dropdown to findings page
Adds a repo_filter signal and fetches the repository list to populate a select dropdown before existing severity/type/status filters, allowing users to filter findings by specific repository. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -11,14 +11,20 @@ pub fn FindingsPage() -> Element {
|
|||||||
let mut severity_filter = use_signal(String::new);
|
let mut severity_filter = use_signal(String::new);
|
||||||
let mut type_filter = use_signal(String::new);
|
let mut type_filter = use_signal(String::new);
|
||||||
let mut status_filter = use_signal(String::new);
|
let mut status_filter = use_signal(String::new);
|
||||||
|
let mut repo_filter = use_signal(String::new);
|
||||||
|
|
||||||
|
let repos = use_resource(|| async {
|
||||||
|
crate::infrastructure::repositories::fetch_repositories(1).await.ok()
|
||||||
|
});
|
||||||
|
|
||||||
let findings = use_resource(move || {
|
let findings = use_resource(move || {
|
||||||
let p = page();
|
let p = page();
|
||||||
let sev = severity_filter();
|
let sev = severity_filter();
|
||||||
let typ = type_filter();
|
let typ = type_filter();
|
||||||
let stat = status_filter();
|
let stat = status_filter();
|
||||||
|
let repo = repo_filter();
|
||||||
async move {
|
async move {
|
||||||
crate::infrastructure::findings::fetch_findings(p, sev, typ, stat, String::new())
|
crate::infrastructure::findings::fetch_findings(p, sev, typ, stat, repo)
|
||||||
.await
|
.await
|
||||||
.ok()
|
.ok()
|
||||||
}
|
}
|
||||||
@@ -31,6 +37,26 @@ pub fn FindingsPage() -> Element {
|
|||||||
}
|
}
|
||||||
|
|
||||||
div { class: "filter-bar",
|
div { class: "filter-bar",
|
||||||
|
select {
|
||||||
|
onchange: move |e| { repo_filter.set(e.value()); page.set(1); },
|
||||||
|
option { value: "", "All Repositories" }
|
||||||
|
{
|
||||||
|
match &*repos.read() {
|
||||||
|
Some(Some(resp)) => rsx! {
|
||||||
|
for repo in &resp.data {
|
||||||
|
{
|
||||||
|
let id = repo.id.as_ref().map(|id| id.to_hex()).unwrap_or_default();
|
||||||
|
let name = repo.name.clone();
|
||||||
|
rsx! {
|
||||||
|
option { value: "{id}", "{name}" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
_ => rsx! {},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
select {
|
select {
|
||||||
onchange: move |e| { severity_filter.set(e.value()); page.set(1); },
|
onchange: move |e| { severity_filter.set(e.value()); page.set(1); },
|
||||||
option { value: "", "All Severities" }
|
option { value: "", "All Severities" }
|
||||||
|
|||||||
Reference in New Issue
Block a user