* [pdm-devel] [RFC pwt] combobox: add .schema() to builder
@ 2025-09-30 12:59 Hannes Laimer
0 siblings, 0 replies; only message in thread
From: Hannes Laimer @ 2025-09-30 12:59 UTC (permalink / raw)
To: pdm-devel
... guarded by the `proxmox-schema` feature.
Signed-off-by: Hannes Laimer <h.laimer@proxmox.com>
---
Very much RFC! Is there a reason to not have this on most elements? This
patch is exemplary, we just pull enum items and default value out of the
schema for the comobox. We could do the same for descriptions or regex
formats.
Cargo.toml | 5 ++++
src/widget/form/combobox.rs | 46 +++++++++++++++++++++++--------------
2 files changed, 34 insertions(+), 17 deletions(-)
diff --git a/Cargo.toml b/Cargo.toml
index 86f73cc..b2d2f1c 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -71,4 +71,9 @@ url = "2.1"
percent-encoding = "2.1"
gettext = "0.4"
+proxmox-schema = { version = "5.0.0", optional = true }
pwt-macros = { version = "0.5", path = "pwt-macros" }
+
+[features]
+default = ["proxmox-schema"]
+proxmox-schema = ["dep:proxmox-schema"]
diff --git a/src/widget/form/combobox.rs b/src/widget/form/combobox.rs
index fc402ba..167fdb4 100644
--- a/src/widget/form/combobox.rs
+++ b/src/widget/form/combobox.rs
@@ -7,8 +7,8 @@ use yew::html::{IntoEventCallback, IntoPropValue};
use yew::prelude::*;
use yew::virtual_dom::Key;
-// #[cfg(feature = "proxmox-schema")]
-// use proxmox_schema::Schema;
+#[cfg(feature = "proxmox-schema")]
+use proxmox_schema::Schema;
use crate::prelude::*;
use crate::props::{IntoOptionalRenderFn, IntoTextFilterFn, RenderFn, TextFilterFn};
@@ -164,21 +164,33 @@ impl Combobox {
self.validate = validate.into_validate_fn();
}
- // /// Builder style method to set the validation schema
- // #[cfg(feature = "proxmox-schema")]
- // pub fn schema(mut self, schema: &'static Schema) -> Self {
- // self.set_schema(schema);
- // self
- // }
-
- // /// Method to set the validation schema
- // #[cfg(feature = "proxmox-schema")]
- // pub fn set_schema(&mut self, schema: &'static Schema) {
- // self.set_validate(move |(value, _store): &(String, _)| {
- // schema.parse_simple_value(value)?;
- // Ok(())
- // });
- // }
+ /// Builder style method to set the validation schema, items and placeholder
+ #[cfg(feature = "proxmox-schema")]
+ pub fn schema(mut self, schema: &'static Schema) -> Self {
+ self.set_schema(schema);
+ self
+ }
+
+ /// Method to set the validation schema, items and placeholder
+ #[cfg(feature = "proxmox-schema")]
+ pub fn set_schema(&mut self, schema: &'static Schema) {
+ if let proxmox_schema::Schema::String(s) = schema {
+ if let Some(proxmox_schema::ApiStringFormat::Enum(e)) = s.format {
+ let items: Vec<AttrValue> = e
+ .iter()
+ .map(|entry| entry.value.to_string().into())
+ .collect();
+ self.set_items(items.into());
+ }
+ if let Some(value) = s.default {
+ self.set_placeholder(value);
+ }
+ }
+ self.set_validate(move |(value, _store): &(String, _)| {
+ schema.parse_simple_value(value)?;
+ Ok(())
+ });
+ }
/// Builder style method to add an trigger
pub fn with_trigger(mut self, trigger: impl Into<Trigger>, right: bool) -> Self {
--
2.47.3
_______________________________________________
pdm-devel mailing list
pdm-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2025-09-30 13:00 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-09-30 12:59 [pdm-devel] [RFC pwt] combobox: add .schema() to builder Hannes Laimer
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox