EinsatzOnline/src/modules/member_management/controller/filter_form_from_form_trait.rs

34 lines
1.1 KiB
Rust

use crate::modules::member_management::model::filter_form::FilterForm;
use rocket::data::FromDataSimple;
use rocket::{Request, Data, data, Outcome};
use rocket::outcome::Outcome::Success;
/// We need to implement FromDataSimple to support multiple selected checkboxes with same name
/// for our list filters
impl FromDataSimple for FilterForm {
type Error = String;
fn from_data(req: &Request, data: Data) -> data::Outcome<Self, String> {
let mut selected : Vec<String> = vec![];
match req.raw_query_items(){
None => {Outcome::Forward(data)}
Some(qi) => {
for item in qi {
if item.key.as_str() == "selected_groups" {
selected.push(String::from(item.value.as_str()));
}
}
if selected.len() > 0 {
let form = FilterForm {
selected_groups: selected
};
Success(form)
} else {
Outcome::Forward(data)
}
}
}
}
}