From 06d63bfd0a84ea85a3493f68a57db52fb306d2bb Mon Sep 17 00:00:00 2001 From: Tommy Yu Date: Fri, 22 Aug 2025 21:58:59 +1200 Subject: [PATCH 1/6] First cut of the regression logger. --- examples/regression/Cargo.toml | 2 ++ examples/regression/src/app.rs | 7 +++++- examples/regression/src/lib.rs | 1 + examples/regression/src/log.rs | 35 +++++++++++++++++++++++++++++ examples/regression/src/pr_4091.rs | 8 +++++++ examples/regression/style/main.scss | 23 +++++++++++++++++++ 6 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 examples/regression/src/log.rs diff --git a/examples/regression/Cargo.toml b/examples/regression/Cargo.toml index fb5a79b6c1..b223380ff9 100644 --- a/examples/regression/Cargo.toml +++ b/examples/regression/Cargo.toml @@ -54,6 +54,8 @@ site-root = "target/site" # The site-root relative folder where all compiled output (JS, WASM and CSS) is written # Defaults to pkg site-pkg-dir = "pkg" +# [Optional] The source CSS file. If it ends with .sass or .scss then it will be compiled by dart-sass into CSS. +style-file = "style/main.scss" # The IP and port (ex: 127.0.0.1:3000) where the server serves the content. Use it in your server setup. site-addr = "127.0.0.1:3000" # The port to use for automatic reload monitoring diff --git a/examples/regression/src/app.rs b/examples/regression/src/app.rs index 402937d6e7..c146c434fc 100644 --- a/examples/regression/src/app.rs +++ b/examples/regression/src/app.rs @@ -1,4 +1,4 @@ -use crate::{issue_4088::Routes4088, pr_4015::Routes4015, pr_4091::Routes4091}; +use crate::{log::SimpleLogger, issue_4088::Routes4088, pr_4015::Routes4015, pr_4091::Routes4091}; use leptos::prelude::*; use leptos_meta::{MetaTags, *}; use leptos_router::{ @@ -27,6 +27,8 @@ pub fn shell(options: LeptosOptions) -> impl IntoView { #[component] pub fn App() -> impl IntoView { provide_meta_context(); + let logger = RwSignal::new(SimpleLogger::default()); + provide_context(logger); let fallback = || view! { "Page not found." }.into_view(); view! { @@ -40,6 +42,9 @@ pub fn App() -> impl IntoView { +
+
{move || logger.get().into_render() }
+
} } diff --git a/examples/regression/src/lib.rs b/examples/regression/src/lib.rs index edba82c8be..912d86d95b 100644 --- a/examples/regression/src/lib.rs +++ b/examples/regression/src/lib.rs @@ -2,6 +2,7 @@ pub mod app; mod issue_4088; mod pr_4015; mod pr_4091; +pub mod log; #[cfg(feature = "hydrate")] #[wasm_bindgen::prelude::wasm_bindgen] diff --git a/examples/regression/src/log.rs b/examples/regression/src/log.rs new file mode 100644 index 0000000000..a9812026eb --- /dev/null +++ b/examples/regression/src/log.rs @@ -0,0 +1,35 @@ +use leptos::prelude::*; + +#[derive(Clone, Default)] +pub struct SimpleLogger(Vec); + +impl SimpleLogger { + pub fn log(&mut self, msg: impl ToString) { + self.0.push(msg.to_string()); + } +} + +// may not be the most efficient but it gets the job done +impl IntoRender for SimpleLogger { + type Output = AnyView; + + fn into_render(self) -> Self::Output { + let entries = self.0 + .into_iter() + .map(|msg| view! { +
  • {msg}
  • + }) + .collect_view(); + view! { +
    +

    "Simple Logger history"

    +
    +
      + {entries} +
    +
    +
    + } + .into_any() + } +} diff --git a/examples/regression/src/pr_4091.rs b/examples/regression/src/pr_4091.rs index a5ce57d681..75649cf37c 100644 --- a/examples/regression/src/pr_4091.rs +++ b/examples/regression/src/pr_4091.rs @@ -1,3 +1,4 @@ +use crate::log::SimpleLogger; use leptos::{context::Provider, prelude::*}; use leptos_router::{ components::{ParentRoute, Route, A}, @@ -27,6 +28,13 @@ fn Container() -> impl IntoView { let rw_signal = RwSignal::new(Expectations(Vec::new())); provide_context(rw_signal); + let logger = expect_context::>(); + logger.update(|logger| logger.log("Mounting pr_4091 ")); + on_cleanup(move || { + leptos::logging::log!("Leaving "); + logger.update(|logger| logger.log("Unmounting pr_4091 ")); + }); + view! {