wip: fix router slashing

This commit is contained in:
Jonathan Kelley 2022-03-09 16:26:13 -05:00
parent e7505188d6
commit 0ce326566e
2 changed files with 15 additions and 9 deletions

View file

@ -54,6 +54,7 @@ pub fn Route<'a>(cx: Scope<'a, RouteProps<'a>>) -> Element {
}); });
log::debug!("Checking Route: {:?}", cx.props.to); log::debug!("Checking Route: {:?}", cx.props.to);
if router_root.should_render(cx.scope_id()) { if router_root.should_render(cx.scope_id()) {
log::debug!("Route should render: {:?}", cx.scope_id()); log::debug!("Route should render: {:?}", cx.scope_id());
cx.render(rsx!(&cx.props.children)) cx.render(rsx!(&cx.props.children))

View file

@ -177,12 +177,10 @@ impl RouterCore {
let roots = self.slots.borrow(); let roots = self.slots.borrow();
if let Some(route) = roots.get(&scope) { if let Some(route) = roots.get(&scope) {
if route_matches_path( let cur = &self.current_location().url;
&self.current_location().url, log::debug!("Checking if {} matches {}", cur, route);
route,
self.cfg.base_url.as_ref(), if route_matches_path(cur, route, self.cfg.base_url.as_ref()) || route.is_empty() {
) || route.is_empty()
{
self.route_found.set(Some(scope)); self.route_found.set(Some(scope));
true true
} else { } else {
@ -217,18 +215,25 @@ fn clean_path(path: &str) -> &str {
fn route_matches_path(cur: &Url, attempt: &str, base_url: Option<&String>) -> bool { fn route_matches_path(cur: &Url, attempt: &str, base_url: Option<&String>) -> bool {
let cur_piece_iter = cur.path_segments().unwrap(); let cur_piece_iter = cur.path_segments().unwrap();
let cur_pieces = match base_url { let mut cur_pieces = match base_url {
// baseurl is naive right now and doesn't support multiple nesting levels // baseurl is naive right now and doesn't support multiple nesting levels
Some(_) => cur_piece_iter.skip(1).collect::<Vec<_>>(), Some(_) => cur_piece_iter.skip(1).collect::<Vec<_>>(),
None => cur_piece_iter.collect::<Vec<_>>(), None => cur_piece_iter.collect::<Vec<_>>(),
}; };
let attempt_pieces = clean_path(attempt).split('/').collect::<Vec<_>>();
if attempt == "/" && cur_pieces.len() == 1 && cur_pieces[0].is_empty() { if attempt == "/" && cur_pieces.len() == 1 && cur_pieces[0].is_empty() {
return true; return true;
} }
// allow slashes at the end of the path
if cur_pieces.last() == Some(&"") {
cur_pieces.pop();
}
let attempt_pieces = clean_path(attempt).split('/').collect::<Vec<_>>();
log::debug!("Comparing {:?} to {:?}", cur_pieces, attempt_pieces);
if attempt_pieces.len() != cur_pieces.len() { if attempt_pieces.len() != cur_pieces.len() {
return false; return false;
} }