use yew::prelude::*;
use yew_router::prelude::*;
pub type QueryParams = crate::utils::QueryParams;
#[hook]
pub fn use_query_params() -> QueryParams {
let current_url = use_location();
let query_string = current_url.as_ref().map_or("", |l| l.query_str());
QueryParams::parse(query_string)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn use_query_params_returns_query_params() {
}
#[test]
fn query_params_type_alias() {
let _params: crate::utils::QueryParams = QueryParams::parse("a=1");
let _params: QueryParams = QueryParams::parse("a=1");
}
#[test]
fn query_params_parse_via_alias() {
let params: QueryParams = QueryParams::parse("page=1&tag=rust&tag=web");
assert_eq!(params.get("page"), Some("1"));
assert_eq!(params.get("tag"), Some("rust"));
let all_tags = params.get_all("tag").unwrap();
assert_eq!(all_tags.len(), 2);
}
#[test]
fn query_params_empty_via_alias() {
let params: QueryParams = QueryParams::parse("");
assert!(params.is_empty());
}
#[test]
fn query_params_multiple_values_via_alias() {
let params: QueryParams = QueryParams::parse("a=1&b=2&a=3");
assert_eq!(params.get("a"), Some("1"));
let all_a = params.get_all("a").unwrap();
assert_eq!(all_a, &vec!["1".to_string(), "3".to_string()]);
assert_eq!(params.get("b"), Some("2"));
}
#[test]
fn query_params_to_query_string_via_alias() {
let mut params: QueryParams = QueryParams::parse("page=1");
params.set("sort", "name");
let qs = params.to_query_string();
assert!(qs.starts_with('?'));
assert!(qs.contains("page=1"));
}
}