From 9fd66c820d08d3ff193ef04907686774c98d2fec Mon Sep 17 00:00:00 2001
From: Héctor Ramón Jiménez <hector0193@gmail.com>
Date: Mon, 7 Mar 2022 16:39:04 +0700
Subject: Introduce `rebuild_element` helper in `lazy::pure::Component`

---
 lazy/src/pure/component.rs | 42 ++++++++++++++++--------------------------
 1 file changed, 16 insertions(+), 26 deletions(-)

(limited to 'lazy/src/pure/component.rs')

diff --git a/lazy/src/pure/component.rs b/lazy/src/pure/component.rs
index ad82c55e..4d952f69 100644
--- a/lazy/src/pure/component.rs
+++ b/lazy/src/pure/component.rs
@@ -90,6 +90,20 @@ impl<'a, Message, Renderer, Event, S> Instance<'a, Message, Renderer, Event, S>
 where
     S: Default,
 {
+    fn rebuild_element(&self, state: &S) {
+        let heads = self.state.borrow_mut().take().unwrap().into_heads();
+
+        *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>(
         &self,
         f: impl FnOnce(&Element<'_, Event, Renderer>) -> T,
@@ -124,36 +138,12 @@ where
     }
 
     fn children(&self) -> Vec<Tree> {
-        let heads = self.state.borrow_mut().take().unwrap().into_heads();
-
-        *self.state.borrow_mut() = Some(
-            StateBuilder {
-                component: heads.component,
-                message: PhantomData,
-                state: PhantomData,
-                element_builder: |state| Some(state.view(&S::default())),
-            }
-            .build(),
-        );
-
+        self.rebuild_element(&S::default());
         self.with_element(|element| vec![Tree::new(element)])
     }
 
     fn diff(&self, tree: &mut Tree) {
-        let heads = self.state.borrow_mut().take().unwrap().into_heads();
-
-        *self.state.borrow_mut() = Some(
-            StateBuilder {
-                component: heads.component,
-                message: PhantomData,
-                state: PhantomData,
-                element_builder: |state| {
-                    Some(state.view(tree.state.downcast_ref()))
-                },
-            }
-            .build(),
-        );
-
+        self.rebuild_element(tree.state.downcast_ref());
         self.with_element(|element| {
             tree.diff_children(std::slice::from_ref(&element))
         })
-- 
cgit