From 60c4092d5bf9d235ff953cfec5ca1291f5005d4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9=20Larivi=C3=A8re?= Date: Fri, 24 Nov 2023 13:45:41 +0100 Subject: [PATCH] Arg for MvuComponent --- src/Fabulous/Component/MvuComponent.fs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Fabulous/Component/MvuComponent.fs b/src/Fabulous/Component/MvuComponent.fs index 7588d1e26..e0e5b7ff3 100644 --- a/src/Fabulous/Component/MvuComponent.fs +++ b/src/Fabulous/Component/MvuComponent.fs @@ -15,6 +15,7 @@ type MvuComponentBody = delegate of obj -> Widget [] type MvuComponentData = { Program: Program + Arg: obj Body: MvuComponentBody } type IMvuComponent = @@ -23,6 +24,7 @@ type IMvuComponent = type MvuComponent(treeContext: ViewTreeContext, data: MvuComponentData, context: ComponentContext) as this = let mutable _body = data.Body + let mutable _arg = data.Arg let mutable _runner = Runner(0, this.GetModel, this.SetModel, data.Program) let mutable _context = context let mutable _widget = Unchecked.defaultof @@ -32,6 +34,8 @@ type MvuComponent(treeContext: ViewTreeContext, data: MvuComponentData, context: interface IMvuComponent with member this.SetData(data: MvuComponentData) = _body <- data.Body + _arg <- data.Arg + // TODO: We should probably reset the runner here this.Render() member this.Dispose() = @@ -43,7 +47,7 @@ type MvuComponent(treeContext: ViewTreeContext, data: MvuComponentData, context: match _context.TryGetValue(key) with | ValueSome model -> model | ValueNone -> - let initialModel, cmd = _runner.Program.Init() + let initialModel, cmd = _runner.Program.Init _arg _context.SetValueInternal(0, initialModel) for sub in cmd do @@ -129,8 +133,9 @@ type Mvu = [] type MvuComponentBuilder<'arg, 'msg, 'model, 'marker> = val public Program: Program + val public Arg: obj - new (program: Program<'arg, 'model, 'msg>) = + new (program: Program<'arg, 'model, 'msg>, arg: 'arg) = let program: Program = { Init = fun arg -> let model, cmd = program.Init(unbox arg) in (box model, Cmd.map box cmd) Update = fun(msg, model) -> let model, cmd = program.Update(unbox msg, unbox model) in (box model, Cmd.map box cmd) @@ -138,7 +143,8 @@ type MvuComponentBuilder<'arg, 'msg, 'model, 'marker> = Logger = program.Logger ExceptionHandler = program.ExceptionHandler } - { Program = program } + { Program = program + Arg = arg } member inline this.Bind(_value: MvuStateRequest, [] continuation: 'model -> MvuComponentBodyStep<'msg, 'model, 'marker>) = MvuComponentBodyStep(fun model -> @@ -165,6 +171,7 @@ type MvuComponentBuilder<'arg, 'msg, 'model, 'marker> = let data = { Program = this.Program + Arg = this.Arg Body = body } WidgetBuilder(