From 785ec97e1cd9f3f7c37c0c6016ae33f157c81a44 Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Tue, 30 Jan 2024 14:04:58 +0000 Subject: [PATCH] Add SyncAction --- src/Fabulous.Tests/APISketchTests/TestUI.Widgets.fs | 3 ++- src/Fabulous/Component.fs | 5 ++++- src/Fabulous/IViewNode.fs | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Fabulous.Tests/APISketchTests/TestUI.Widgets.fs b/src/Fabulous.Tests/APISketchTests/TestUI.Widgets.fs index b84f2b85d..476b3ccf6 100644 --- a/src/Fabulous.Tests/APISketchTests/TestUI.Widgets.fs +++ b/src/Fabulous.Tests/APISketchTests/TestUI.Widgets.fs @@ -213,7 +213,8 @@ module TestUI_Widgets = { Log = fun _ -> () MinLogLevel = LogLevel.Fatal } Dispatch = fun msg -> unbox<'msg> msg |> x.ProcessMessage - GetComponent = Component.getComponent } + GetComponent = Component.getComponent + SyncAction = fun fn -> fn() } member x.ProcessMessage(msg: 'msg) = match state with diff --git a/src/Fabulous/Component.fs b/src/Fabulous/Component.fs index cfb5ee574..1b0c4646d 100644 --- a/src/Fabulous/Component.fs +++ b/src/Fabulous/Component.fs @@ -307,7 +307,7 @@ type Component(treeContext: ViewTreeContext, body: ComponentBody, context: Compo node - member this.Render() = + member private this.RenderInternal() = let prevRootWidget = _widget let prevContext = _context let struct (context, currRootWidget) = _body.Invoke(_context) @@ -322,6 +322,9 @@ type Component(treeContext: ViewTreeContext, body: ComponentBody, context: Compo Reconciler.update treeContext.CanReuseView (ValueSome prevRootWidget) currRootWidget viewNode + member this.Render() = + treeContext.SyncAction(this.RenderInternal) + module Component = let WidgetKey = let key = WidgetDefinitionStore.getNextKey() diff --git a/src/Fabulous/IViewNode.fs b/src/Fabulous/IViewNode.fs index 5940aabe2..13db986ed 100644 --- a/src/Fabulous/IViewNode.fs +++ b/src/Fabulous/IViewNode.fs @@ -35,6 +35,7 @@ type ViewTreeContext = GetViewNode: obj -> IViewNode Logger: Logger Dispatch: obj -> unit + SyncAction: (unit -> unit) -> unit GetComponent: obj -> obj } and IViewNode =