From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id C38BC1FF16B for ; Fri, 26 Sep 2025 09:27:27 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 4DCF59488; Fri, 26 Sep 2025 09:27:56 +0200 (CEST) From: Dominik Csapak To: pdm-devel@lists.proxmox.com Date: Fri, 26 Sep 2025 09:20:26 +0200 Message-ID: <20250926072749.560801-7-d.csapak@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20250926072749.560801-1-d.csapak@proxmox.com> References: <20250926072749.560801-1-d.csapak@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.027 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: [pdm-devel] [PATCH datacenter-manager 06/11] ui: add helper to compare two strings with `localeCompare` X-BeenThere: pdm-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Datacenter Manager development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Datacenter Manager development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pdm-devel-bounces@lists.proxmox.com Sender: "pdm-devel" sometimes it's useful to have a locale aware comparison, e.g. for sorting, so abstract that away here. It also has an option to sort numerically, which would sort, e.g. 'foo-101-bar' 'foo-1000-bar' instead of in reverse Signed-off-by: Dominik Csapak --- ui/src/lib.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/ui/src/lib.rs b/ui/src/lib.rs index d8ba4b7b..a2b79b05 100644 --- a/ui/src/lib.rs +++ b/ui/src/lib.rs @@ -1,3 +1,4 @@ +use js_sys::{Array, JsString, Object}; use pdm_api_types::remotes::RemoteType; use pdm_api_types::resource::{PveLxcResource, PveQemuResource, PveSdnResource}; use pdm_client::types::Resource; @@ -209,3 +210,21 @@ pub(crate) fn get_resource_node(resource: &Resource) -> Option<&str> { Resource::PbsDatastore(_) => None, } } + +/// Wrapper to 'locale compare' to strings +/// +/// Note: The first parameter must be a [`String`], since it needs to be converted to a [`js_sys::JsString`]. +/// The `numeric` parameter corresponds to the numeric parameter of `String.localeCompare` from +/// Javascript. +/// +/// Seel also +/// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare +pub(crate) fn locale_compare(first: String, second: &str, numeric: bool) -> std::cmp::Ordering { + let first: JsString = first.into(); + let options = Object::new(); + // TODO: find a better way to create the options object + let _ = js_sys::Reflect::set(&options, &"numeric".into(), &numeric.into()); + first + .locale_compare(second, &Array::new(), &options) + .cmp(&0) +} -- 2.47.3 _______________________________________________ pdm-devel mailing list pdm-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel