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
|
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 {
|
pub fn add_classes(mut self, classes: &str) -> Self {
|
||||||
self.classes.add_classes(classes);
|
self.classes.add_classes(classes);
|
||||||
self
|
self
|
||||||
|
|
|
||||||
|
|
@ -34,17 +34,21 @@ impl ThemeTrait for BulmixTheme {
|
||||||
|
|
||||||
fn render_component(
|
fn render_component(
|
||||||
&self,
|
&self,
|
||||||
component: &dyn PageComponent,
|
component: &mut dyn PageComponent,
|
||||||
assets: &mut PageAssets
|
assets: &mut PageAssets
|
||||||
) -> Option<Markup> {
|
) -> Option<Markup> {
|
||||||
match component.name() {
|
match component.name() {
|
||||||
"GridRow" => {
|
"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! {
|
Some(html! {
|
||||||
div id=[row.id()] class=[row.classes("columns")] {
|
div id=[row.id()] class=[row.classes("columns")] {
|
||||||
(row.columns().render(assets))
|
(row.columns().render(assets))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
*/
|
||||||
},
|
},
|
||||||
"GridColumn" => {
|
"GridColumn" => {
|
||||||
let col = component.downcast_ref::<grid::Column>().unwrap();
|
let col = component.downcast_ref::<grid::Column>().unwrap();
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
use crate::html::{Markup, html};
|
use crate::html::{Markup, html};
|
||||||
use crate::response::page::{PageAssets, PageComponent, render_component};
|
use crate::response::page::{PageAssets, PageComponent, render_component};
|
||||||
|
|
||||||
use std::sync::Arc;
|
use std::sync::{Arc, RwLock};
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct PageContainer(Vec<Arc<dyn PageComponent>>);
|
pub struct PageContainer(Vec<Arc<RwLock<dyn PageComponent>>>);
|
||||||
|
|
||||||
impl PageContainer {
|
impl PageContainer {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
|
|
@ -18,15 +18,15 @@ impl PageContainer {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn add(&mut self, component: impl PageComponent) {
|
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 {
|
pub fn render(&self, assets: &mut PageAssets) -> Markup {
|
||||||
let mut components = self.0.clone();
|
let mut components = self.0.clone();
|
||||||
components.sort_by_key(|c| c.weight());
|
components.sort_by_key(|c| c.read().unwrap().weight());
|
||||||
html! {
|
html! {
|
||||||
@for c in components.iter() {
|
@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(
|
pub fn render_component(
|
||||||
component: &dyn PageComponent,
|
component: &mut dyn PageComponent,
|
||||||
assets: &mut PageAssets
|
assets: &mut PageAssets
|
||||||
) -> Markup {
|
) -> Markup {
|
||||||
match component.is_renderable() {
|
match component.is_renderable() {
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ pub trait ThemeTrait: Send + Sync {
|
||||||
#[allow(unused_variables)]
|
#[allow(unused_variables)]
|
||||||
fn render_component(
|
fn render_component(
|
||||||
&self,
|
&self,
|
||||||
component: &dyn PageComponent,
|
component: &mut dyn PageComponent,
|
||||||
assets: &mut PageAssets
|
assets: &mut PageAssets
|
||||||
) -> Option<Markup> {
|
) -> Option<Markup> {
|
||||||
None
|
None
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue