Mejora el uso de referencias en los componentes
Sin embargo requiere duplicar todos los métodos para recibir una referencia mutable a self en uno y directamente self en otro.
This commit is contained in:
parent
93d6d455c8
commit
e11b36f7ed
5 changed files with 18 additions and 9 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -34,17 +34,21 @@ impl ThemeTrait for BulmixTheme {
|
|||
|
||||
fn render_component(
|
||||
&self,
|
||||
component: &dyn PageComponent,
|
||||
component: &mut dyn PageComponent,
|
||||
assets: &mut PageAssets
|
||||
) -> Option<Markup> {
|
||||
match component.name() {
|
||||
"GridRow" => {
|
||||
let row = component.downcast_ref::<grid::Row>().unwrap();
|
||||
let row = component.downcast_mut::<grid::Row>().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::<grid::Column>().unwrap();
|
||||
|
|
|
|||
|
|
@ -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<Arc<dyn PageComponent>>);
|
||||
pub struct PageContainer(Vec<Arc<RwLock<dyn PageComponent>>>);
|
||||
|
||||
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))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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<Markup> {
|
||||
None
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue