Make deprecated use router (#1260)

* make router props expansion better

* fix router data fields

* make a deprecated use_router hook
This commit is contained in:
ealmloff authored and GitHub committed 2023-07-27 10:32:23 -07:00
1 parent 5e3451a6f2
commit cfd62e274e
12 files changed
+82 -149

No files matched your search

+5 -25
View File
@@ -21,7 +21,6 @@ use crate::segment::RouteSegment;
struct RouteArgs {
route: LitStr,
comp_name: Option<Path>,
props_name: Option<Path>,
}
impl Parse for RouteArgs {
@@ -34,10 +33,6 @@ impl Parse for RouteArgs {
let _ = input.parse::<syn::Token![,]>();
input.parse().ok()
},
props_name: {
let _ = input.parse::<syn::Token![,]>();
input.parse().ok()
},
})
}
}
@@ -83,22 +78,8 @@ impl Route {
Some(attr) => {
let args = attr.parse_args::<RouteArgs>()?;
let comp_name = args.comp_name.unwrap_or_else(|| parse_quote!(#route_name));
let props_name = args.props_name.unwrap_or_else(|| {
let last = format_ident!(
"{}Props",
comp_name.segments.last().unwrap().ident.to_string()
);
let mut segments = comp_name.segments.clone();
segments.pop();
segments.push(last.into());
Path {
leading_colon: None,
segments,
}
});
ty = RouteType::Leaf {
component: comp_name,
props: props_name,
};
route = args.route.value();
}
@@ -227,7 +208,6 @@ impl Route {
pub fn routable_match(&self, layouts: &[Layout], nests: &[Nest]) -> TokenStream2 {
let name = &self.route_name;
let name_str = name.to_string();
let mut tokens = TokenStream2::new();
@@ -261,16 +241,16 @@ impl Route {
}
}
}
RouteType::Leaf { component, props } => {
RouteType::Leaf { component } => {
let dynamic_segments = self.dynamic_segments();
let dynamic_segments_from_route = self.dynamic_segments();
quote! {
#[allow(unused)]
(#last_index, Self::#name { #(#dynamic_segments,)* }) => {
let comp = #props { #(#dynamic_segments_from_route,)* };
let dynamic = cx.component(#component, comp, #name_str);
render! {
dynamic
#component {
#(#dynamic_segments_from_route: #dynamic_segments_from_route,)*
}
}
}
}
@@ -364,5 +344,5 @@ impl Route {
#[derive(Debug)]
pub(crate) enum RouteType {
Child(Field),
Leaf { component: Path, props: Path },
Leaf { component: Path },
}