Add operate method to Component trait
This commit is contained in:
parent
a6d0d5773f
commit
8d5fba8a1f
1 changed files with 33 additions and 0 deletions
|
|
@ -46,6 +46,14 @@ pub trait Component<Message, Renderer> {
|
||||||
/// Produces the widgets of the [`Component`], which may trigger an [`Event`](Component::Event)
|
/// Produces the widgets of the [`Component`], which may trigger an [`Event`](Component::Event)
|
||||||
/// on user interaction.
|
/// on user interaction.
|
||||||
fn view(&self, state: &Self::State) -> Element<'_, Self::Event, Renderer>;
|
fn view(&self, state: &Self::State) -> Element<'_, Self::Event, Renderer>;
|
||||||
|
|
||||||
|
/// Update the [`Component`] state based on the provided [`Operation`](widget::Operation)
|
||||||
|
fn operate(
|
||||||
|
&self,
|
||||||
|
#[allow(unused)] state: &mut Self::State,
|
||||||
|
#[allow(unused)] operation: &mut dyn widget::Operation<Message>,
|
||||||
|
) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Turns an implementor of [`Component`] into an [`Element`] that can be
|
/// Turns an implementor of [`Component`] into an [`Element`] that can be
|
||||||
|
|
@ -106,6 +114,26 @@ where
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn rebuild_element_with_operation(
|
||||||
|
&self,
|
||||||
|
state: &mut S,
|
||||||
|
operation: &mut dyn widget::Operation<Message>,
|
||||||
|
) {
|
||||||
|
let heads = self.state.borrow_mut().take().unwrap().into_heads();
|
||||||
|
|
||||||
|
heads.component.operate(state, operation);
|
||||||
|
|
||||||
|
*self.state.borrow_mut() = Some(
|
||||||
|
StateBuilder {
|
||||||
|
component: heads.component,
|
||||||
|
message: PhantomData,
|
||||||
|
state: PhantomData,
|
||||||
|
element_builder: |component| Some(component.view(state)),
|
||||||
|
}
|
||||||
|
.build(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
fn with_element<T>(
|
fn with_element<T>(
|
||||||
&self,
|
&self,
|
||||||
f: impl FnOnce(&Element<'_, Event, Renderer>) -> T,
|
f: impl FnOnce(&Element<'_, Event, Renderer>) -> T,
|
||||||
|
|
@ -237,6 +265,11 @@ where
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
operation: &mut dyn widget::Operation<Message>,
|
operation: &mut dyn widget::Operation<Message>,
|
||||||
) {
|
) {
|
||||||
|
self.rebuild_element_with_operation(
|
||||||
|
tree.state.downcast_mut(),
|
||||||
|
operation,
|
||||||
|
);
|
||||||
|
|
||||||
struct MapOperation<'a, B> {
|
struct MapOperation<'a, B> {
|
||||||
operation: &'a mut dyn widget::Operation<B>,
|
operation: &'a mut dyn widget::Operation<B>,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue