diff --git a/examples/guide/src/guide.rs b/examples/guide/src/guide.rs index 1ed32fe..403e598 100644 --- a/examples/guide/src/guide.rs +++ b/examples/guide/src/guide.rs @@ -100,13 +100,13 @@ fn render_page_list_item(props: PageProps, route: &Route) -> Html { log::debug!("Found an active"); return html! {
  • - + {&props.title}
  • }; } else { return html! {
  • - + {&props.title}
  • }; } diff --git a/examples/router_component/src/a_component.rs b/examples/router_component/src/a_component.rs index 21be181..66ba710 100644 --- a/examples/router_component/src/a_component.rs +++ b/examples/router_component/src/a_component.rs @@ -36,14 +36,12 @@ impl Component for AModel {
    { "I am the A component"}
    - - + + {"Go to a/c"} + + + {"Go to a/d (route does not exist)"} +
    { diff --git a/examples/router_component/src/main.rs b/examples/router_component/src/main.rs index 1c1e139..7968c5b 100644 --- a/examples/router_component/src/main.rs +++ b/examples/router_component/src/main.rs @@ -43,13 +43,13 @@ impl Component for Model { html! {
    diff --git a/examples/servers/warp/src/main.rs b/examples/servers/warp/src/main.rs index da52ae7..4e6d110 100644 --- a/examples/servers/warp/src/main.rs +++ b/examples/servers/warp/src/main.rs @@ -1,12 +1,13 @@ -use std::path::{PathBuf}; -use warp::filters::BoxedFilter; -use warp::{Reply, Filter}; -use warp::path::Peek; -use warp::fs::File; -use warp::path; +use std::path::PathBuf; +use warp::{ + filters::BoxedFilter, + fs::File, + path::{Peek}, + path, + Filter, Reply, +}; fn main() { - let localhost = [0, 0, 0, 0]; let port = 8000; let addr = (localhost, port); @@ -16,8 +17,7 @@ fn main() { const ASSETS_DIR: &str = "../../../target/deploy"; let assets_dir: PathBuf = PathBuf::from(ASSETS_DIR); - let routes = api() - .or(static_files_handler(assets_dir)); + let routes = api().or(static_files_handler(assets_dir)); warp::serve(routes).run(addr); } @@ -36,12 +36,10 @@ pub fn api() -> BoxedFilter<(impl Reply,)> { pub fn static_files_handler(assets_dir: PathBuf) -> BoxedFilter<(impl Reply,)> { const INDEX_HTML: &str = "index.html"; - let files = assets(assets_dir.clone()) - .or(index_static_file_redirect(assets_dir.join(INDEX_HTML))); + let files = + assets(assets_dir.clone()).or(index_static_file_redirect(assets_dir.join(INDEX_HTML))); - warp::any() - .and(files) - .boxed() + warp::any().and(files).boxed() } /// If the path does not start with /api, return the index.html, so the app will bootstrap itself @@ -54,7 +52,7 @@ fn index_static_file_redirect(index_file_path: PathBuf) -> BoxedFilter<(impl Rep // Reject the request if the path starts with /api/ if let Some(first_segment) = segments.segments().next() { if first_segment == API_STRING { - return Err(warp::reject::not_found()) + return Err(warp::reject::not_found()); } } Ok(file) diff --git a/src/alias.rs b/src/alias.rs index 19a61c3..0bcf0ad 100644 --- a/src/alias.rs +++ b/src/alias.rs @@ -55,12 +55,22 @@ macro_rules! define_router_state { #[doc = ">](agent/struct.RouteAgentDispatcher.html)`."] pub type RouteAgentDispatcher = $crate::agent::RouteAgentDispatcher<$StateT>; + + #[allow(deprecated)] + #[deprecated(note = "Has been renamed to RouterAnchor")] #[cfg(feature="components")] #[doc = "Alias to [RouterLink<"] #[doc = $StateName] #[doc = ">](components/struct.RouterLink.html)`."] pub type RouterLink = $crate::components::RouterLink<$StateT>; + + #[cfg(feature="components")] + #[doc = "Alias to [RouterAnchor<"] + #[doc = $StateName] + #[doc = ">](components/struct.RouterAnchor.html)`."] + pub type RouterAnchor = $crate::components::RouterAnchor<$StateT>; + #[cfg(feature="components")] #[doc = "Alias to [RouterButton<"] #[doc = $StateName] diff --git a/src/components/mod.rs b/src/components/mod.rs index 23a0be0..9a91574 100644 --- a/src/components/mod.rs +++ b/src/components/mod.rs @@ -6,20 +6,25 @@ mod router_button; mod router_link; -use yew::Properties; +use yew::{Children, Properties}; -pub use self::{router_button::RouterButton, router_link::RouterLink}; +#[allow(deprecated)] +pub use self::{router_button::RouterButton, router_link::RouterAnchor, router_link::RouterLink}; use crate::RouterState; +// TODO This should also be PartialEq and Clone. Its blocked on Children not supporting that. /// Properties for `RouterButton` and `RouterLink`. -#[derive(Properties, Default, Clone, Debug, PartialEq)] +#[derive(Properties, Default, Debug)] pub struct Props RouterState<'de>> { /// The route that will be set when the component is clicked. pub link: String, /// The state to set when changing the route. pub state: Option, + #[deprecated(note = "Use children field instead (nested html)")] /// The text to display. pub text: String, + /// Html inside the component. + pub children: Children, /// Disable the component. pub disabled: bool, /// Classes to be added to component. diff --git a/src/components/router_button.rs b/src/components/router_button.rs index 261752c..c1b2f54 100644 --- a/src/components/router_button.rs +++ b/src/components/router_button.rs @@ -56,7 +56,11 @@ impl RouterState<'de>> Component for RouterButton { onclick=cb(|_| Msg::Clicked), disabled=self.props.disabled, > - {&self.props.text} + { + #[allow(deprecated)] + &self.props.text + } + {self.props.children.iter().collect::()} } } diff --git a/src/components/router_link.rs b/src/components/router_link.rs index 185f50f..959a8fd 100644 --- a/src/components/router_link.rs +++ b/src/components/router_link.rs @@ -9,21 +9,27 @@ use super::{Msg, Props}; use crate::RouterState; use yew::virtual_dom::VNode; +/// An anchor tag Component that when clicked, will navigate to the provided route. +/// +/// Alias to RouterAnchor. +#[deprecated(note = "Has been renamed to RouterAnchor")] +pub type RouterLink = RouterAnchor; + /// An anchor tag Component that when clicked, will navigate to the provided route. #[derive(Debug)] -pub struct RouterLink RouterState<'de>> { +pub struct RouterAnchor RouterState<'de>> { link: ComponentLink, router: RouteAgentDispatcher, props: Props, } -impl RouterState<'de>> Component for RouterLink { +impl RouterState<'de>> Component for RouterAnchor { type Message = Msg; type Properties = Props; fn create(props: Self::Properties, link: ComponentLink) -> Self { let router = RouteAgentDispatcher::new(); - RouterLink { + RouterAnchor { link, router, props, @@ -63,7 +69,11 @@ impl RouterState<'de>> Component for RouterLink { disabled=self.props.disabled, href=target, > - {&self.props.text} + { + #[allow(deprecated)] + &self.props.text + } + {self.props.children.iter().collect::()} } }