Add map
method to Component
s (#3210)
This PR adds a `map` method to the `Component` trait. `map` is a fully-generalized form of `when`, as `when` can be expressed in terms of `map`: ```rs div().map(|this| if condition { then(this) } else { this }) ``` This allows us to take advantage of Rust's pattern matching when building up conditions: ```rs // Before div() .when(self.current_side == PanelSide::Left, |this| this.border_r()) .when(self.current_side == PanelSide::Right, |this| { this.border_l() }) .when(self.current_side == PanelSide::Bottom, |this| { this.border_b().w_full().h(current_size) }) // After div() .map(|this| match self.current_side { PanelSide::Left => this.border_r(), PanelSide::Right => this.border_l(), PanelSide::Bottom => this.border_b().w_full().h(current_size), }) ``` Release Notes: - N/A
This commit is contained in:
parent
5e12b48ae0
commit
ec0cff0e1a
3 changed files with 24 additions and 22 deletions
|
@ -198,14 +198,19 @@ impl<V> AnyElement<V> {
|
|||
pub trait Component<V> {
|
||||
fn render(self) -> AnyElement<V>;
|
||||
|
||||
fn when(mut self, condition: bool, then: impl FnOnce(Self) -> Self) -> Self
|
||||
fn map<U>(self, f: impl FnOnce(Self) -> U) -> U
|
||||
where
|
||||
Self: Sized,
|
||||
U: Component<V>,
|
||||
{
|
||||
f(self)
|
||||
}
|
||||
|
||||
fn when(self, condition: bool, then: impl FnOnce(Self) -> Self) -> Self
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
if condition {
|
||||
self = then(self);
|
||||
}
|
||||
self
|
||||
self.map(|this| if condition { then(this) } else { this })
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue