From 871f51f91b72f48cf9da862b474f389ab5f972e6 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Wed, 25 May 2022 14:08:59 -0500 Subject: [PATCH] It compiles --- packages/core-macro/src/lib.rs | 19 ++++++++++++------- packages/core/Cargo.toml | 2 +- packages/rsx_interperter/Cargo.toml | 1 + .../rsx_interperter/src/captuered_context.rs | 7 ++++--- packages/rsx_interperter/src/lib.rs | 18 ++++++++++++++---- src/lib.rs | 2 +- 6 files changed, 33 insertions(+), 16 deletions(-) diff --git a/packages/core-macro/src/lib.rs b/packages/core-macro/src/lib.rs index 55249c846..6f1ac3c18 100644 --- a/packages/core-macro/src/lib.rs +++ b/packages/core-macro/src/lib.rs @@ -191,15 +191,20 @@ pub fn rsx(s: TokenStream) -> TokenStream { quote! { { let line_num = get_line_num(); - LazyNodes::new(|factory|{ + LazyNodes::new(move |factory|{ let rsx_text_index: RsxTextIndex = cx.consume_context().unwrap(); let read = rsx_text_index.read(); - let text = read.get(line_num).unwrap(); - interpert_rsx( - factory, - &text, - #captured - ) + if let Some(text) = read.get(line_num){ + interpert_rsx( + factory, + &text, + #captured + ) + } + else{ + println!("rsx: line number {} not found", line_num); + factory.static_text("") + } }) } } diff --git a/packages/core/Cargo.toml b/packages/core/Cargo.toml index 4b10afbca..70ec08cea 100644 --- a/packages/core/Cargo.toml +++ b/packages/core/Cargo.toml @@ -48,4 +48,4 @@ backtrace = "0.3" [features] default = [] serialize = ["serde"] -debug_vdom = [] +debug_vdom = [] \ No newline at end of file diff --git a/packages/rsx_interperter/Cargo.toml b/packages/rsx_interperter/Cargo.toml index 054e1f563..249f939d1 100644 --- a/packages/rsx_interperter/Cargo.toml +++ b/packages/rsx_interperter/Cargo.toml @@ -10,3 +10,4 @@ dioxus-rsx = { path = "../rsx" } dioxus-ssr = { path = "../ssr" } dioxus-core = { path = "../core" } dioxus-html = { path = "../html" } +dioxus-hooks = { path = "../hooks"} \ No newline at end of file diff --git a/packages/rsx_interperter/src/captuered_context.rs b/packages/rsx_interperter/src/captuered_context.rs index 21683e004..cefabf6dd 100644 --- a/packages/rsx_interperter/src/captuered_context.rs +++ b/packages/rsx_interperter/src/captuered_context.rs @@ -17,6 +17,7 @@ impl CapturedContextBuilder { self.attributes.extend(other.attributes); self.text.extend(other.text); self.components.extend(other.components); + self.iterators.extend(other.iterators); } pub fn from_call_body(body: CallBody) -> Self { @@ -84,12 +85,12 @@ impl ToTokens for CapturedContextBuilder { .chain(text.iter().map(|fmt| fmt.named_args.iter())) .flatten() .collect(); - let captured_names = captured.iter().map(|(n, _)| n); + let captured_names = captured.iter().map(|(n, _)| n.to_string()); let captured_expr = captured.iter().map(|(_, e)| e); tokens.append_all(quote! { CapturedContext { captured: IfmtArgs{ - named_args: &[#((#captured_names, #captured_expr)),*] + named_args: vec![#((#captured_names, #captured_expr.to_string())),*] }, components: vec![#(#components),*], iterators: vec![#(#iterators),*], @@ -114,7 +115,7 @@ pub struct CapturedContext<'a> { pub struct IfmtArgs { // live reload only supports named arguments - pub named_args: &'static [(&'static str, String)], + pub named_args: Vec<(&'static str, String)>, } enum IfmtSegment<'a> { diff --git a/packages/rsx_interperter/src/lib.rs b/packages/rsx_interperter/src/lib.rs index e041e52f2..673061332 100644 --- a/packages/rsx_interperter/src/lib.rs +++ b/packages/rsx_interperter/src/lib.rs @@ -1,17 +1,27 @@ -use crate::interperter::build; -use dioxus_core::{LazyNodes, VNode}; -use dioxus_rsx::CallBody; +use dioxus_core::{Component, Element, LazyNodes, Scope, VNode}; +use dioxus_hooks::*; use std::collections::HashMap; use std::panic::Location; use std::rc::Rc; use std::sync::{RwLock, RwLockReadGuard}; -use syn::{parse_str, Result}; +use syn::parse_str; mod attributes; pub mod captuered_context; mod elements; mod interperter; +pub fn with_hot_reload(cx: Scope) -> Element { + use_state(&cx, || { + if cx.consume_context::().is_none() { + cx.provide_context(RsxTextIndex::default()); + } + }); + cx.render(LazyNodes::new(|node_factory| { + node_factory.component(*cx.props, (), None, "app") + })) +} + pub fn interpert_rsx<'a, 'b>( factory: dioxus_core::NodeFactory<'a>, text: &str, diff --git a/src/lib.rs b/src/lib.rs index 60f7128f3..6db77272e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -57,6 +57,6 @@ pub mod prelude { #[cfg(feature = "hot_reload")] pub use dioxus_rsx_interperter::{ captuered_context::{CapturedContext, IfmtArgs}, - get_line_num, interpert_rsx, RsxTextIndex, + get_line_num, interpert_rsx, with_hot_reload, RsxTextIndex, }; }