🎉 Store chosen renderer in user profile

This commit is contained in:
Belén Albeza 2026-04-22 17:34:24 +02:00 committed by Alonso Torres
parent 12549df65c
commit 46b81f4302
3 changed files with 38 additions and 24 deletions

View File

@ -48,6 +48,7 @@
(def schema:props
[:map {:title "ProfileProps"}
[:plugins {:optional true} schema:plugin-registry]
[:renderer {:optional true} [::sm/one-of #{:svg :wasm}]]
[:mcp-enabled {:optional true} ::sm/boolean]
[:newsletter-updates {:optional true} ::sm/boolean]
[:newsletter-news {:optional true} ::sm/boolean]

View File

@ -89,28 +89,36 @@
(st/emit! (rt/nav :settings-feedback)))
(mf/defc webgl-settings*
[{:keys [is-render-enabled]}]
[:section {:class (stl/css :webgl-container)}
[:header {:class (stl/css :webgl-header)}
[:> heading* {:class (stl/css :title) :level 2 :typography t/title-large} (tr "dashboard.webgl-switch.title")]
[:> text* {:as "span" :class (stl/css :beta) :typography t/body-small} (tr "dashboard.webgl-switch.beta")]]
[:> text* {:class (stl/css :description) :typography t/body-medium} (tr "dashboard.webgl-switch.description")]
[:form {:class (stl/css :webgl-form)}
[:> heading* {:level 3 :typography t/headline-small} (tr "dashboard.webgl-switch.status")]
[:> switch* {:label (if is-render-enabled (tr "dashboard.webgl-switch.enabled") (tr "dashboard.webgl-switch.disabled"))
:default-checked is-render-enabled}]]
[:> text* {:typography t/body-medium :class (stl/css :feedback)} [:a {:href "#" :on-click go-settings-feedback :class (stl/css :link)} (tr "dashboard.webgl-switch.feedback") [:> icon* {:icon-id "arrow-up-right" :size "s"}]]]])
[{:keys [renderer]}]
(let [wasm-renderer? (= renderer :wasm)
handle-render-change
(mf/use-fn
(fn [enabled?]
(st/emit! (du/update-profile-props {:renderer (if enabled? :wasm :svg)}))))]
[:section {:class (stl/css :webgl-container)}
[:header {:class (stl/css :webgl-header)}
[:> heading* {:class (stl/css :title) :level 2 :typography t/title-large} (tr "dashboard.webgl-switch.title")]
[:> text* {:as "span" :class (stl/css :beta) :typography t/body-small} (tr "dashboard.webgl-switch.beta")]]
[:> text* {:class (stl/css :description) :typography t/body-medium} (tr "dashboard.webgl-switch.description")]
[:form {:class (stl/css :webgl-form)}
[:> heading* {:level 3 :typography t/headline-small} (tr "dashboard.webgl-switch.status")]
[:> switch* {:label (if wasm-renderer? (tr "dashboard.webgl-switch.enabled") (tr "dashboard.webgl-switch.disabled"))
:default-checked wasm-renderer?
:on-change handle-render-change}]]
[:> text* {:typography t/body-medium :class (stl/css :feedback)} [:a {:href "#" :on-click go-settings-feedback :class (stl/css :link)} (tr "dashboard.webgl-switch.feedback") [:> icon* {:icon-id "arrow-up-right" :size "s"}]]]]))
(mf/defc options-page
[]
(mf/use-effect
#(dom/set-html-title (tr "title.settings.options")))
(let [profile (mf/deref refs/profile)
renderer (or (-> profile :props :renderer) :svg)]
(mf/use-effect
#(dom/set-html-title (tr "title.settings.options")))
[:div {:class (stl/css :dashboard-settings)}
[:*
[:div {:class (stl/css :form-container) :data-testid "settings-form"}
[:h2 (tr "labels.settings")]
[:& options-form {}]]
(when (contains? cf/flags :render-switch)
[:> webgl-settings* {:is-render-enabled true}])]])
[:div {:class (stl/css :dashboard-settings)}
[:*
[:div {:class (stl/css :form-container) :data-testid "settings-form"}
[:h2 (tr "labels.settings")]
[:& options-form {}]]
(when (contains? cf/flags :render-switch)
[:> webgl-settings* {:renderer renderer}])]]))

View File

@ -227,7 +227,9 @@
{::mf/private true
::mf/wrap [mf/memo]}
[{:keys [layout profile toggle-flag on-close toggle-theme toggle-render]}]
(let [show-nudge-options
(let [renderer (or (-> profile :props :renderer) :svg)
show-nudge-options
(mf/use-fn
#(modal/show! {:type :nudge-option}))]
@ -329,7 +331,9 @@
(when (kbd/enter? event)
(toggle-render event)))}
[:span {:class (stl/css :item-name)}
(tr "workspace.header.menu.enable-webgl")]])]))
(if (= renderer :wasm)
(tr "workspace.header.menu.disable-webgl")
(tr "workspace.header.menu.enable-webgl"))]])]))
(mf/defc view-menu*
{::mf/private true
@ -901,8 +905,9 @@
(mf/use-fn
(fn [event]
(dom/stop-propagation event)
(js/console.log "toggle-render")
#_(st/emit! (toggle-render))))
(let [renderer (or (-> profile :props :renderer) :svg)
next-renderer (if (= renderer :wasm) :svg :wasm)]
(st/emit! (du/update-profile-props {:renderer next-renderer})))))
open-plugins-manager
(mf/use-fn