Añade func. component_xxx<T>() para capturar comp.

This commit is contained in:
Manuel Cillero 2022-04-29 20:06:44 +02:00
parent 42a4731bdd
commit cd7020c77d
16 changed files with 32 additions and 19 deletions

View file

@ -46,7 +46,7 @@ impl PageComponent for Block {
}
}
fn as_any(&self) -> &dyn AnyComponent {
fn as_ref_any(&self) -> &dyn AnyComponent {
self
}

View file

@ -29,7 +29,7 @@ impl PageComponent for Chunck {
html! { (*self.html()) }
}
fn as_any(&self) -> &dyn AnyComponent {
fn as_ref_any(&self) -> &dyn AnyComponent {
self
}

View file

@ -73,7 +73,7 @@ impl PageComponent for Container {
}
}
fn as_any(&self) -> &dyn AnyComponent {
fn as_ref_any(&self) -> &dyn AnyComponent {
self
}

View file

@ -66,7 +66,7 @@ impl PageComponent for Button {
}
}
fn as_any(&self) -> &dyn AnyComponent {
fn as_ref_any(&self) -> &dyn AnyComponent {
self
}

View file

@ -85,7 +85,7 @@ impl PageComponent for Date {
}
}
fn as_any(&self) -> &dyn AnyComponent {
fn as_ref_any(&self) -> &dyn AnyComponent {
self
}

View file

@ -55,7 +55,7 @@ impl PageComponent for Form {
}
}
fn as_any(&self) -> &dyn AnyComponent {
fn as_ref_any(&self) -> &dyn AnyComponent {
self
}

View file

@ -29,7 +29,7 @@ impl PageComponent for Hidden {
}
}
fn as_any(&self) -> &dyn AnyComponent {
fn as_ref_any(&self) -> &dyn AnyComponent {
self
}

View file

@ -113,7 +113,7 @@ impl PageComponent for Input {
}
}
fn as_any(&self) -> &dyn AnyComponent {
fn as_ref_any(&self) -> &dyn AnyComponent {
self
}

View file

@ -41,7 +41,7 @@ impl PageComponent for Column {
}
}
fn as_any(&self) -> &dyn AnyComponent {
fn as_ref_any(&self) -> &dyn AnyComponent {
self
}

View file

@ -41,7 +41,7 @@ impl PageComponent for Row {
}
}
fn as_any(&self) -> &dyn AnyComponent {
fn as_ref_any(&self) -> &dyn AnyComponent {
self
}

View file

@ -38,7 +38,7 @@ impl PageComponent for Image {
}
}
fn as_any(&self) -> &dyn AnyComponent {
fn as_ref_any(&self) -> &dyn AnyComponent {
self
}

View file

@ -68,7 +68,7 @@ impl PageComponent for MenuItem {
}
}
fn as_any(&self) -> &dyn AnyComponent {
fn as_ref_any(&self) -> &dyn AnyComponent {
self
}
@ -226,7 +226,7 @@ impl PageComponent for Menu {
}
}
fn as_any(&self) -> &dyn AnyComponent {
fn as_ref_any(&self) -> &dyn AnyComponent {
self
}

View file

@ -39,11 +39,11 @@ impl ThemeTrait for BulmixTheme {
) {
match component.name() {
"GridRow" => {
let row = component.as_mut_any().downcast_mut::<grid::Row>().unwrap();
let row = component_mut::<grid::Row>(component);
row.alter_classes("columns", ClassesOp::SetDefault);
},
"GridColumn" => {
let col = component.as_mut_any().downcast_mut::<grid::Column>().unwrap();
let col = component_mut::<grid::Column>(component);
col.alter_classes("column", ClassesOp::SetDefault);
},
_ => {},

View file

@ -42,7 +42,15 @@ pub trait PageComponent: AnyComponent + Send + Sync {
html! {}
}
fn as_any(&self) -> &dyn AnyComponent;
fn as_ref_any(&self) -> &dyn AnyComponent;
fn as_mut_any(&mut self) -> &mut dyn AnyComponent;
}
pub fn component_ref<T: 'static>(component: &dyn PageComponent) -> &T {
component.as_ref_any().downcast_ref::<T>().unwrap()
}
pub fn component_mut<T: 'static>(component: &mut dyn PageComponent) -> &mut T {
component.as_mut_any().downcast_mut::<T>().unwrap()
}

View file

@ -7,7 +7,12 @@ pub use assets::{
};
mod component;
pub use component::{AnyComponent, PageComponent};
pub use component::{
AnyComponent,
PageComponent,
component_ref,
component_mut,
};
mod container;
pub use container::PageContainer;

View file

@ -85,7 +85,7 @@ pub trait ThemeTrait: Send + Sync {
match component.name() {
"Block" => {
let block = component.as_mut_any().downcast_mut::<Block>().unwrap();
let block = component_mut::<Block>(component);
block.alter_title("New title");
},
_ => {},
@ -105,7 +105,7 @@ pub trait ThemeTrait: Send + Sync {
match component.name() {
"Block" => {
let block = component.as_any().downcast_ref::<Block>().unwrap();
let block = component_ref::<Block>(component);
match block.template() {
"default" => Some(block_default(block)),
_ => None,