From 9890238d571b960233d7b96b0165e550770ba927 Mon Sep 17 00:00:00 2001 From: Diggory Blake Date: Sat, 8 May 2021 16:17:50 +0100 Subject: [PATCH 1/3] Rewrite router more --- examples/router/src/main.rs | 29 +- examples/router/src/pages/post_list.rs | 54 +- packages/yew-functional/src/lib.rs | 2 +- packages/yew-router-macro/Cargo.toml | 3 +- packages/yew-router-macro/src/lib.rs | 2 +- .../yew-router-macro/src/routable_derive.rs | 574 +++++++++++++----- packages/yew-router/Cargo.toml | 15 +- packages/yew-router/src/agents.rs | 2 + packages/yew-router/src/agents/history.rs | 220 +++++++ packages/yew-router/src/agents/router.rs | 92 +++ packages/yew-router/src/components/link.rs | 52 +- packages/yew-router/src/context.rs | 12 + packages/yew-router/src/hidden.rs | 440 ++++++++++++++ packages/yew-router/src/lib.rs | 15 +- packages/yew-router/src/macro_helpers.rs | 39 -- packages/yew-router/src/routable.rs | 34 +- packages/yew-router/src/router.rs | 218 ++++--- packages/yew-router/src/service.rs | 85 --- packages/yew-router/src/utils.rs | 36 +- packages/yew-router/tests/parser.rs | 68 +-- packages/yew-router/tests/router.rs | 62 +- 21 files changed, 1481 insertions(+), 573 deletions(-) create mode 100644 packages/yew-router/src/agents.rs create mode 100644 packages/yew-router/src/agents/history.rs create mode 100644 packages/yew-router/src/agents/router.rs create mode 100644 packages/yew-router/src/context.rs create mode 100644 packages/yew-router/src/hidden.rs delete mode 100644 packages/yew-router/src/macro_helpers.rs delete mode 100644 packages/yew-router/src/service.rs diff --git a/examples/router/src/main.rs b/examples/router/src/main.rs index 26c2dab0cfb..7ee9b47d5dc 100644 --- a/examples/router/src/main.rs +++ b/examples/router/src/main.rs @@ -9,30 +9,41 @@ use pages::{ author::Author, author_list::AuthorList, home::Home, page_not_found::PageNotFound, post::Post, post_list::PostList, }; +use yew_router::router::RouterUpdate; #[derive(Routable, PartialEq, Clone, Debug)] pub enum Route { #[at("/posts/:id")] Post { id: u64 }, #[at("/posts")] - Posts, + Posts { + #[bind(query_arg = "p")] + page: u64, + }, #[at("/authors/:id")] Author { id: u64 }, #[at("/authors")] Authors, #[at("/")] Home, - #[not_found] #[at("/404")] NotFound, } +impl Default for Route { + fn default() -> Self { + Route::NotFound + } +} + pub enum Msg { ToggleNavbar, + RouteChanged(RouterUpdate), } pub struct Model { link: ComponentLink, + router: Router, navbar_active: bool, } impl Component for Model { @@ -40,8 +51,10 @@ impl Component for Model { type Properties = (); fn create(_props: Self::Properties, link: ComponentLink) -> Self { + let router = Router::new(link.clone(), link.callback(Msg::RouteChanged)); Self { link, + router, navbar_active: false, } } @@ -52,6 +65,10 @@ impl Component for Model { self.navbar_active = !self.navbar_active; true } + Msg::RouteChanged(update) => { + self.router.update(update); + true + } } } @@ -65,7 +82,7 @@ impl Component for Model { { self.view_nav() }
- render=Router::render(switch) /> + { switch(&self.router.route()) }