diff --git a/src/Avalonia.FuncUI.Elmish/ElmishHook.fs b/src/Avalonia.FuncUI.Elmish/ElmishHook.fs index 433cc455..a1e90299 100644 --- a/src/Avalonia.FuncUI.Elmish/ElmishHook.fs +++ b/src/Avalonia.FuncUI.Elmish/ElmishHook.fs @@ -27,14 +27,15 @@ let ignoreView = (fun _ _ -> ()) type IComponentContext with - /// Starts an Elmish loop using an existing IWritable. + /// Starts an Elmish loop with an existing IWritable. member this.useElmish<'model, 'msg> ( writableModel: IWritable<'model>, update: 'msg -> 'model -> 'model * Cmd<'msg>, - mapProgram: Program -> Program + ?mapProgram: Program -> Program ) = + let mapProgram = defaultArg mapProgram id let elmishState = this.useState(None, false) // Start Elmish loop @@ -57,25 +58,18 @@ type IComponentContext with |> Option.iter (fun es -> es.Dispatch map) writableModel.Current, dispatch - - /// Starts an Elmish loop using an existing IWritable. - member this.useElmish<'model, 'msg> - ( - writableModel: IWritable<'model>, - update: 'msg -> 'model -> 'model * Cmd<'msg> - ) = - - this.useElmish(writableModel, update, id) - /// Starts an Elmish loop. + /// Starts an Elmish loop with an init arg. member this.useElmish<'arg, 'model, 'msg> ( init : 'arg -> 'model * Cmd<'msg>, update: 'msg -> 'model -> 'model * Cmd<'msg>, initArg: 'arg, - mapProgram: Program<'arg, 'model, 'msg, unit> -> Program<'arg, 'model, 'msg, unit> + ?mapProgram: Program<'arg, 'model, 'msg, unit> -> Program<'arg, 'model, 'msg, unit> ) = + let mapProgram = mapProgram |> Option.defaultValue id + let elmishState = this.useState(None, false) let writableModel = this.useState(init initArg |> fst, true) @@ -100,11 +94,12 @@ type IComponentContext with writableModel.Current, dispatch /// Starts an Elmish loop. - member this.useElmish<'arg, 'model, 'msg> + member this.useElmish<'model, 'msg> ( - init : 'arg -> 'model * Cmd<'msg>, + init : unit -> 'model * Cmd<'msg>, update: 'msg -> 'model -> 'model * Cmd<'msg>, - initArg: 'arg + ?mapProgram: Program -> Program ) = - this.useElmish(init, update, initArg, id) + let mapProgram = defaultArg mapProgram id + this.useElmish(init, update, (), mapProgram) diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 83145633..2a03554d 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -1,6 +1,6 @@ 11.0.0-preview4 - 0.6.0-preview6.1 + 0.6.0-preview7 diff --git a/src/Examples/Component Examples/Examples.ChordParser/ChordParserView.fs b/src/Examples/Component Examples/Examples.ChordParser/ChordParserView.fs index ac7108be..9bec81af 100644 --- a/src/Examples/Component Examples/Examples.ChordParser/ChordParserView.fs +++ b/src/Examples/Component Examples/Examples.ChordParser/ChordParserView.fs @@ -77,8 +77,8 @@ let private subscriptions (model: Model) : Sub = ] let view () = Component (fun ctx -> - let model, dispatch = ctx.useElmish(init, update, (), Program.withSubscription subscriptions) - //let model, dispatch = ctx.useElmish(init, update, ()) // if no subscriptions are needed + let model, dispatch = ctx.useElmish(init, update, Program.withSubscription subscriptions) + //let model, dispatch = ctx.useElmish(init, update) // if no subscriptions are needed Grid.create [ Grid.rowDefinitions "20, *"