all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [yew-devel] [PATCH yew-widget-toolkit] widget: catalog loader: fix behavior when no language is set
@ 2025-11-04 12:15 Dominik Csapak
  2025-11-04 12:39 ` [yew-devel] applied: " Dietmar Maurer
  0 siblings, 1 reply; 2+ messages in thread
From: Dominik Csapak @ 2025-11-04 12:15 UTC (permalink / raw)
  To: yew-devel

Recently, a change in the catalog loader was introduced to defer loading
of the page until after the language was loaded. This worked, except in
the case that no language was set at all, neither via a property nor via
the browser local storage.

When that occurred, there was no attempt to load the catalog but also
the indicator that we're finished with loading was not set, so the child
elements were never displayed.

To fix this, treat an empty language string the same as if it were the
'default_lang', which then triggers the initialization, etc. correctly.

Fixes:  3a437d1 (catalog loader: defer first content rendering after language is loaded)
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
---
 src/widget/catalog_loader.rs | 62 +++++++++++++++++++-----------------
 1 file changed, 32 insertions(+), 30 deletions(-)

diff --git a/src/widget/catalog_loader.rs b/src/widget/catalog_loader.rs
index c32619d..ef53a05 100644
--- a/src/widget/catalog_loader.rs
+++ b/src/widget/catalog_loader.rs
@@ -82,6 +82,16 @@ pub struct PwtCatalogLoader {
     loaded_once: bool,
 }
 
+impl PwtCatalogLoader {
+    fn set_language(&mut self, ctx: &yew::Context<Self>, lang: Option<String>, fallback: String) {
+        let mut lang = lang.unwrap_or(fallback);
+        if lang.is_empty() {
+            lang = ctx.props().default_lang.to_string();
+        }
+        self.lang = lang;
+    }
+}
+
 impl Component for PwtCatalogLoader {
     type Message = Msg;
     type Properties = CatalogLoader;
@@ -91,19 +101,17 @@ impl Component for PwtCatalogLoader {
 
         let _observer = LanguageObserver::new(ctx.link().callback(Msg::ChangeLanguage));
 
-        let lang = props
-            .lang
-            .clone()
-            .map(|l| l.to_string())
-            .unwrap_or(Language::load());
-
-        Self {
-            lang,
+        let mut this = Self {
+            lang: String::new(),
             last_url: String::new(),
             state: LoadState::Idle,
             _observer,
             loaded_once: false,
-        }
+        };
+
+        let lang = props.lang.clone().map(|l| l.to_string());
+        this.set_language(ctx, lang, Language::load());
+        this
     }
 
     fn update(&mut self, ctx: &Context<Self>, msg: Self::Message) -> bool {
@@ -126,7 +134,7 @@ impl Component for PwtCatalogLoader {
                 true
             }
             Msg::ChangeLanguage(lang) => {
-                self.lang = props.lang.clone().map(|l| l.to_string()).unwrap_or(lang);
+                self.set_language(ctx, props.lang.clone().map(|l| l.to_string()), lang);
                 true
             }
         }
@@ -135,11 +143,8 @@ impl Component for PwtCatalogLoader {
     fn changed(&mut self, ctx: &Context<Self>, old_props: &Self::Properties) -> bool {
         let props = ctx.props();
         if props.lang != old_props.lang {
-            self.lang = props
-                .lang
-                .clone()
-                .map(|l| l.to_string())
-                .unwrap_or(Language::load());
+            let lang = props.lang.clone().map(|l| l.to_string());
+            self.set_language(ctx, lang, Language::load());
         }
         true
     }
@@ -158,23 +163,20 @@ impl Component for PwtCatalogLoader {
         let props = ctx.props();
         match &self.state {
             LoadState::Idle => {
-                if !self.lang.is_empty() {
-                    let url = props.lang_to_url(&self.lang);
-                    if self.last_url != url {
-                        self.state = LoadState::Loading;
-                        let link = ctx.link().clone();
-
-                        if self.lang == props.default_lang {
-                            crate::init_i18n(Catalog::empty());
+                let url = props.lang_to_url(&self.lang);
+
+                if self.last_url != url {
+                    self.state = LoadState::Loading;
+                    let link = ctx.link().clone();
+
+                    if self.lang == props.default_lang {
+                        crate::init_i18n(Catalog::empty());
+                        link.send_message(Msg::LoadFinished(url));
+                    } else {
+                        crate::init_i18n_from_url(&url, move |url| {
                             link.send_message(Msg::LoadFinished(url));
-                        } else {
-                            crate::init_i18n_from_url(&url, move |url| {
-                                link.send_message(Msg::LoadFinished(url));
-                            });
-                        }
+                        });
                     }
-                } else {
-                    crate::init_i18n(Catalog::empty());
                 }
             }
             LoadState::Loading => { /* wait until loaded */ }
-- 
2.47.3



_______________________________________________
yew-devel mailing list
yew-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/yew-devel


^ permalink raw reply	[flat|nested] 2+ messages in thread

* [yew-devel] applied: [PATCH yew-widget-toolkit] widget: catalog loader: fix behavior when no language is set
  2025-11-04 12:15 [yew-devel] [PATCH yew-widget-toolkit] widget: catalog loader: fix behavior when no language is set Dominik Csapak
@ 2025-11-04 12:39 ` Dietmar Maurer
  0 siblings, 0 replies; 2+ messages in thread
From: Dietmar Maurer @ 2025-11-04 12:39 UTC (permalink / raw)
  To: Yew framework devel list at Proxmox


[-- Attachment #1.1: Type: text/plain, Size: 9 bytes --]

applied

[-- Attachment #1.2: Type: text/html, Size: 199 bytes --]

[-- Attachment #2: Type: text/plain, Size: 160 bytes --]

_______________________________________________
yew-devel mailing list
yew-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/yew-devel

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2025-11-04 12:39 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-11-04 12:15 [yew-devel] [PATCH yew-widget-toolkit] widget: catalog loader: fix behavior when no language is set Dominik Csapak
2025-11-04 12:39 ` [yew-devel] applied: " Dietmar Maurer

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal