From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 775781FF191 for ; Tue, 4 Nov 2025 13:15:01 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id D61FAB56D; Tue, 4 Nov 2025 13:15:40 +0100 (CET) From: Dominik Csapak To: yew-devel@lists.proxmox.com Date: Tue, 4 Nov 2025 13:15:14 +0100 Message-ID: <20251104121536.2190880-1-d.csapak@proxmox.com> X-Mailer: git-send-email 2.47.3 MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.029 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [yew-devel] [PATCH yew-widget-toolkit] widget: catalog loader: fix behavior when no language is set X-BeenThere: yew-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Yew framework devel list at Proxmox List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Yew framework devel list at Proxmox Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: yew-devel-bounces@lists.proxmox.com Sender: "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 --- 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, lang: Option, 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, 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, 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