[pdm-devel] [PATCH yew-comp 4/7] running tasks: make TaskListItem renderer configurable

Dominik Csapak d.csapak at proxmox.com
Mon Jan 20 10:29:54 CET 2025


we currently don't have all types here (e.g. RemoteUpid), so simply
make it generally configurable, so the downstream user of this can
format the task the way it's necessary there.

Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
 src/running_tasks.rs        | 17 ++++++++++++++++-
 src/running_tasks_button.rs |  7 +++++++
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/src/running_tasks.rs b/src/running_tasks.rs
index 8ddc73c..b0b63af 100644
--- a/src/running_tasks.rs
+++ b/src/running_tasks.rs
@@ -4,6 +4,7 @@ use yew::html::IntoEventCallback;
 use yew::virtual_dom::{VComp, VNode};
 
 use pwt::prelude::*;
+use pwt::props::{IntoOptionalRenderFn, RenderFn};
 use pwt::state::{Loader, LoaderState, SharedStateObserver, Store};
 use pwt::widget::data_table::{DataTable, DataTableColumn, DataTableHeader};
 use pwt::widget::{ActionIcon, Button, Container, Panel, Toolbar, Tooltip};
@@ -22,6 +23,11 @@ pub struct RunningTasks {
     #[prop_or_default]
     pub on_show_task: Option<Callback<(String, Option<i64>)>>,
 
+    #[builder_cb(IntoOptionalRenderFn, into_optional_render_fn, TaskListItem)]
+    #[prop_or_default]
+    /// Render function for the [`TaskListItem`]
+    pub render: Option<RenderFn<TaskListItem>>,
+
     #[builder_cb(IntoEventCallback, into_event_callback, ())]
     #[prop_or_default]
     pub on_close: Option<Callback<()>>,
@@ -71,7 +77,16 @@ impl ProxmoxRunningTasks {
         Rc::new(vec![
             DataTableColumn::new(tr!("Task"))
                 .flex(1)
-                .render(|item: &TaskListItem| html! {format_upid(&item.upid)})
+                .render({
+                    let render = props.render.clone();
+                    move |item: &TaskListItem| {
+                        if let Some(render) = &render {
+                            render.apply(item)
+                        } else {
+                            html! {format_upid(&item.upid)}
+                        }
+                    }
+                })
                 .into(),
             DataTableColumn::new(tr!("Start Time"))
                 .width("130px")
diff --git a/src/running_tasks_button.rs b/src/running_tasks_button.rs
index 43ca6f3..e0e1062 100644
--- a/src/running_tasks_button.rs
+++ b/src/running_tasks_button.rs
@@ -8,6 +8,7 @@ use yew::virtual_dom::{VComp, VNode};
 
 use pwt::dom::align::{align_to, AlignOptions, GrowDirection, Point};
 use pwt::prelude::*;
+use pwt::props::{IntoOptionalRenderFn, RenderFn};
 use pwt::state::{Loader, LoaderState, SharedStateObserver};
 use pwt::widget::{Button, Container};
 
@@ -24,6 +25,11 @@ pub struct RunningTasksButton {
     #[builder_cb(IntoEventCallback, into_event_callback, (String, Option<i64>))]
     #[prop_or_default]
     on_show_task: Option<Callback<(String, Option<i64>)>>,
+
+    #[builder_cb(IntoOptionalRenderFn, into_optional_render_fn, TaskListItem)]
+    #[prop_or_default]
+    /// Render function for the [`TaskListItem`]
+    pub render: Option<RenderFn<TaskListItem>>,
 }
 
 impl RunningTasksButton {
@@ -152,6 +158,7 @@ impl Component for ProxmoxRunningTasksButton {
                     RunningTasks::new(props.running_tasks.clone())
                         .as_dropdown(true)
                         .on_show_task(props.on_show_task.clone())
+                        .render(props.render.clone())
                         .on_close(ctx.link().callback(|_| Msg::CloseMenu)),
                 )
         });
-- 
2.39.5





More information about the pdm-devel mailing list