From bb47baf638c96d133dae51827ff676166d818153 Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Sun, 18 Sep 2022 19:23:22 +0300 Subject: feat(corp/tvixbolt): persist state in tvixbolt's URL This makes it possible to enter something into tvixbolt and then share the link with someone else. Suggested by Profpatsch originally. Change-Id: I9886e76a7b821070f13ea7005df09188821e091d Reviewed-on: https://cl.tvl.fyi/c/depot/+/6636 Tested-by: BuildkiteCI Reviewed-by: Profpatsch --- corp/tvixbolt/src/main.rs | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) (limited to 'corp/tvixbolt/src/main.rs') diff --git a/corp/tvixbolt/src/main.rs b/corp/tvixbolt/src/main.rs index 35e9d27921..8dad534a30 100644 --- a/corp/tvixbolt/src/main.rs +++ b/corp/tvixbolt/src/main.rs @@ -1,5 +1,6 @@ use std::fmt::Write; +use serde::{Deserialize, Serialize}; use std::rc::Rc; use tvix_eval::observer::TracingObserver; use tvix_eval::observer::{DisassemblingObserver, NoOpObserver}; @@ -7,12 +8,14 @@ use web_sys::HtmlInputElement; use web_sys::HtmlTextAreaElement; use yew::prelude::*; use yew::TargetCast; +use yew_router::{prelude::*, AnyRoute}; enum Msg { CodeChange(String), ToggleTrace(bool), } +#[derive(Clone, Serialize, Deserialize)] struct Model { code: String, trace: bool, @@ -87,25 +90,30 @@ impl Component for Model { type Message = Msg; type Properties = (); - fn create(_ctx: &Context) -> Self { - Self { - code: String::new(), - trace: false, - } + fn create(_: &Context) -> Self { + BrowserHistory::new() + .location() + .query::() + .unwrap_or_else(|_| Self { + code: String::new(), + trace: false, + }) } - fn update(&mut self, _ctx: &Context, msg: Self::Message) -> bool { + fn update(&mut self, _: &Context, msg: Self::Message) -> bool { match msg { Msg::ToggleTrace(trace) => { self.trace = trace; - true } Msg::CodeChange(new_code) => { self.code = new_code; - true } } + + let _ = BrowserHistory::new().replace_with_query(AnyRoute::new("/"), self.clone()); + + true } fn view(&self, ctx: &Context) -> Html { @@ -128,8 +136,8 @@ impl Component for Model { Msg::CodeChange(ta) })} - id="code" cols="30" rows="10"> - + id="code" cols="30" rows="10" value={self.code.clone()}> +
-- cgit 1.4.1