Skip to content

Commit 9f6093d

Browse files
committed
feat: impl UiHandle and UnmountedUiHandle for Option<_>
1 parent fd0ba42 commit 9f6093d

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

packages/frender-dom/src/ui_handle.rs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,3 +180,49 @@ impl<Renderer: ?Sized, UH: UiHandle<Renderer>, const N: usize> UiHandle<Renderer
180180
}
181181

182182
// endregion
183+
// region: option
184+
impl<T: UnmountedUiHandle<Renderer>, Renderer: ?Sized> UnmountedUiHandle<Renderer> for Option<T> {
185+
type Mounted = Option<T::Mounted>;
186+
187+
fn mount(self, render_context: &mut Renderer::RenderContext<'_>) -> Self::Mounted
188+
where
189+
Renderer: crate::render::RenderWithContext,
190+
{
191+
self.map(|this| this.mount(render_context))
192+
}
193+
}
194+
impl<T: UiHandle<Renderer>, Renderer: ?Sized> UiHandle<Renderer> for Option<T> {
195+
type Unmounted = Option<T::Unmounted>;
196+
197+
fn unmount(self, renderer: &mut Renderer) -> Self::Unmounted {
198+
self.map(|this| this.unmount(renderer))
199+
}
200+
201+
fn reposition(&mut self, render_context: &mut <Renderer>::RenderContext<'_>)
202+
where
203+
Renderer: crate::render::RenderWithContext,
204+
{
205+
if let Some(this) = self {
206+
this.reposition(render_context);
207+
}
208+
}
209+
210+
fn check_and_move_cursor(&self, render_context: &mut <Renderer>::RenderContext<'_>)
211+
where
212+
Renderer: crate::render::RenderWithContext,
213+
{
214+
if let Some(this) = self {
215+
this.check_and_move_cursor(render_context);
216+
}
217+
}
218+
219+
fn assert_cursor_is_at_self(&self, render_context: &<Renderer>::RenderContext<'_>)
220+
where
221+
Renderer: crate::render::RenderWithContext,
222+
{
223+
if let Some(this) = self {
224+
this.assert_cursor_is_at_self(render_context);
225+
}
226+
}
227+
}
228+
// endregion

0 commit comments

Comments
 (0)