From e11b36f7edb97c1fcc355b111884ebc2e819362e Mon Sep 17 00:00:00 2001 From: Manuel Cillero Date: Wed, 6 Apr 2022 23:54:38 +0200 Subject: [PATCH] Mejora el uso de referencias en los componentes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sin embargo requiere duplicar todos los métodos para recibir una referencia mutable a self en uno y directamente self en otro. --- pagetop/src/base/component/grid/row.rs | 5 +++++ pagetop/src/base/theme/bulmix/mod.rs | 8 ++++++-- pagetop/src/response/page/container.rs | 10 +++++----- pagetop/src/response/page/page.rs | 2 +- pagetop/src/theme/definition.rs | 2 +- 5 files changed, 18 insertions(+), 9 deletions(-) diff --git a/pagetop/src/base/component/grid/row.rs b/pagetop/src/base/component/grid/row.rs index 59645b79..96d74afc 100644 --- a/pagetop/src/base/component/grid/row.rs +++ b/pagetop/src/base/component/grid/row.rs @@ -77,6 +77,11 @@ impl Row { self } + pub fn set_classes_ref(&mut self, classes: &str) -> &Self { + self.classes.set_classes(classes); + self + } + pub fn add_classes(mut self, classes: &str) -> Self { self.classes.add_classes(classes); self diff --git a/pagetop/src/base/theme/bulmix/mod.rs b/pagetop/src/base/theme/bulmix/mod.rs index 284353c1..cf83a8f6 100644 --- a/pagetop/src/base/theme/bulmix/mod.rs +++ b/pagetop/src/base/theme/bulmix/mod.rs @@ -34,17 +34,21 @@ impl ThemeTrait for BulmixTheme { fn render_component( &self, - component: &dyn PageComponent, + component: &mut dyn PageComponent, assets: &mut PageAssets ) -> Option { match component.name() { "GridRow" => { - let row = component.downcast_ref::().unwrap(); + let row = component.downcast_mut::().unwrap(); + row.set_classes_ref("Prueba"); + None + /* Some(html! { div id=[row.id()] class=[row.classes("columns")] { (row.columns().render(assets)) } }) + */ }, "GridColumn" => { let col = component.downcast_ref::().unwrap(); diff --git a/pagetop/src/response/page/container.rs b/pagetop/src/response/page/container.rs index 011e5f50..2e052ee9 100644 --- a/pagetop/src/response/page/container.rs +++ b/pagetop/src/response/page/container.rs @@ -1,10 +1,10 @@ use crate::html::{Markup, html}; use crate::response::page::{PageAssets, PageComponent, render_component}; -use std::sync::Arc; +use std::sync::{Arc, RwLock}; #[derive(Clone)] -pub struct PageContainer(Vec>); +pub struct PageContainer(Vec>>); impl PageContainer { pub fn new() -> Self { @@ -18,15 +18,15 @@ impl PageContainer { } pub fn add(&mut self, component: impl PageComponent) { - self.0.push(Arc::new(component)); + self.0.push(Arc::new(RwLock::new(component))); } pub fn render(&self, assets: &mut PageAssets) -> Markup { let mut components = self.0.clone(); - components.sort_by_key(|c| c.weight()); + components.sort_by_key(|c| c.read().unwrap().weight()); html! { @for c in components.iter() { - (render_component(&**c, assets)) + (render_component(&mut *c.write().unwrap(), assets)) } } } diff --git a/pagetop/src/response/page/page.rs b/pagetop/src/response/page/page.rs index 5501678a..56db5ecc 100644 --- a/pagetop/src/response/page/page.rs +++ b/pagetop/src/response/page/page.rs @@ -193,7 +193,7 @@ impl<'a> Page<'a> { } pub fn render_component( - component: &dyn PageComponent, + component: &mut dyn PageComponent, assets: &mut PageAssets ) -> Markup { match component.is_renderable() { diff --git a/pagetop/src/theme/definition.rs b/pagetop/src/theme/definition.rs index acc30f47..457860c7 100644 --- a/pagetop/src/theme/definition.rs +++ b/pagetop/src/theme/definition.rs @@ -77,7 +77,7 @@ pub trait ThemeTrait: Send + Sync { #[allow(unused_variables)] fn render_component( &self, - component: &dyn PageComponent, + component: &mut dyn PageComponent, assets: &mut PageAssets ) -> Option { None