Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add output type information to BindingData #470

Merged
merged 1 commit into from
Sep 7, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 30 additions & 30 deletions src/Elmish.WPF/BindingData.fs
Original file line number Diff line number Diff line change
Expand Up @@ -103,13 +103,13 @@ and SubModelSeqKeyedData<'model, 'msg, 'bindingModel, 'bindingMsg, 'vm, 'vmColle
Merge.keyed d.BmToId d.VmToId create update values newSubModels


and ValidationData<'model, 'msg> =
{ BindingData: BindingData<'model, 'msg>
and ValidationData<'model, 'msg, 't> =
{ BindingData: BindingData<'model, 'msg, 't>
Validate: 'model -> string list }


and LazyData<'model, 'msg, 'bindingModel, 'bindingMsg> =
{ BindingData: BindingData<'bindingModel, 'bindingMsg>
and LazyData<'model, 'msg, 'bindingModel, 'bindingMsg, 't> =
{ BindingData: BindingData<'bindingModel, 'bindingMsg, 't>
Get: 'model -> 'bindingModel
Set: 'bindingMsg -> 'model -> 'msg
Equals: 'bindingModel -> 'bindingModel -> bool }
Expand All @@ -121,8 +121,8 @@ and LazyData<'model, 'msg, 'bindingModel, 'bindingMsg> =
Helper.mapDispatch getCurrentModel this.Set dispatch


and AlterMsgStreamData<'model, 'msg, 'bindingModel, 'bindingMsg, 'dispatchMsg> =
{ BindingData: BindingData<'bindingModel, 'bindingMsg>
and AlterMsgStreamData<'model, 'msg, 'bindingModel, 'bindingMsg, 'dispatchMsg, 't> =
{ BindingData: BindingData<'bindingModel, 'bindingMsg, 't>
Get: 'model -> 'bindingModel
Set: 'dispatchMsg -> 'model -> 'msg
AlterMsgStream: ('dispatchMsg -> unit) -> 'bindingMsg -> unit }
Expand All @@ -135,25 +135,25 @@ and AlterMsgStreamData<'model, 'msg, 'bindingModel, 'bindingMsg, 'dispatchMsg> =
|> this.AlterMsgStream


and BaseBindingData<'model, 'msg> =
| OneWayData of OneWayData<'model, obj>
| OneWayToSourceData of OneWayToSourceData<'model, 'msg, obj>
| OneWaySeqData of OneWaySeqData<'model, obj, obj, obj>
| TwoWayData of TwoWayData<'model, 'msg, obj>
and BaseBindingData<'model, 'msg, 't> =
| OneWayData of OneWayData<'model, 't>
| OneWayToSourceData of OneWayToSourceData<'model, 'msg, 't>
| OneWaySeqData of OneWaySeqData<'model, obj, 't, obj>
| TwoWayData of TwoWayData<'model, 'msg, 't>
| CmdData of CmdData<'model, 'msg>
| SubModelData of SubModelData<'model, 'msg, obj, obj, obj>
| SubModelWinData of SubModelWinData<'model, 'msg, obj, obj, obj>
| SubModelSeqUnkeyedData of SubModelSeqUnkeyedData<'model, 'msg, obj, obj, obj, obj>
| SubModelSeqKeyedData of SubModelSeqKeyedData<'model, 'msg, obj, obj, obj, obj, obj>
| SubModelData of SubModelData<'model, 'msg, obj, obj, 't>
| SubModelWinData of SubModelWinData<'model, 'msg, obj, obj, 't>
| SubModelSeqUnkeyedData of SubModelSeqUnkeyedData<'model, 'msg, obj, obj, obj, 't>
| SubModelSeqKeyedData of SubModelSeqKeyedData<'model, 'msg, obj, obj, obj, 't, obj>
| SubModelSelectedItemData of SubModelSelectedItemData<'model, 'msg, obj>


and BindingData<'model, 'msg> =
| BaseBindingData of BaseBindingData<'model, 'msg>
| CachingData of BindingData<'model, 'msg>
| ValidationData of ValidationData<'model, 'msg>
| LazyData of LazyData<'model, 'msg, obj, obj>
| AlterMsgStreamData of AlterMsgStreamData<'model, 'msg, obj, obj, obj>
and BindingData<'model, 'msg, 't> =
| BaseBindingData of BaseBindingData<'model, 'msg, 't>
| CachingData of BindingData<'model, 'msg, 't>
| ValidationData of ValidationData<'model, 'msg, 't>
| LazyData of LazyData<'model, 'msg, obj, obj, 't>
| AlterMsgStreamData of AlterMsgStreamData<'model, 'msg, obj, obj, obj, 't>



Expand Down Expand Up @@ -329,8 +329,8 @@ module BindingData =
} |> LazyData
let alterMsgStream
(alteration: ('dispatchMsg -> unit) -> 'bindingMsg -> unit)
(b: BindingData<'bindingModel, 'bindingMsg>)
: BindingData<'model, 'msg> =
(b: BindingData<'bindingModel, 'bindingMsg, 't>)
: BindingData<'model, 'msg, 't> =
{ BindingData = b |> mapModel unbox |> mapMsg box
Get = box
Set = fun (dMsg: obj) _ -> unbox dMsg
Expand All @@ -340,7 +340,7 @@ module BindingData =
let g = alteration f'
unbox >> g
} |> AlterMsgStreamData
let addSticky (predicate: 'model -> bool) (binding: BindingData<'model, 'msg>) =
let addSticky (predicate: 'model -> bool) (binding: BindingData<'model, 'msg, 't>) =
let mutable stickyModel = None
let f newModel =
if predicate newModel then
Expand All @@ -364,7 +364,7 @@ module BindingData =

module OneWay =

let id<'msg> : BindingData<obj, 'msg> =
let id<'a, 'msg> : BindingData<'a, 'msg, 'a> =
{ Get = id }
|> OneWayData
|> BaseBindingData
Expand All @@ -382,7 +382,7 @@ module BindingData =

module OneWayToSource =

let id<'model> : BindingData<'model, obj> =
let id<'model, 'a> : BindingData<'model, 'a, 'a> =
{ OneWayToSourceData.Set = Func2.id1 }
|> OneWayToSourceData
|> BaseBindingData
Expand Down Expand Up @@ -444,7 +444,7 @@ module BindingData =

module TwoWay =

let id : BindingData<obj, obj> =
let id<'a> : BindingData<'a, 'a, 'a> =
TysonMN marked this conversation as resolved.
Show resolved Hide resolved
{ TwoWayData.Get = id
Set = Func2.id1 }
|> TwoWayData
Expand All @@ -467,7 +467,7 @@ module BindingData =

module Cmd =

let createWithParam exec canExec autoRequery : BindingData<'model,'msg> =
let createWithParam exec canExec autoRequery : BindingData<'model,'msg, 't> =
{ Exec = exec
CanExec = canExec
AutoRequery = autoRequery }
Expand Down Expand Up @@ -742,7 +742,7 @@ module BindingData =

let private mapFunctions
mValidate
(d: ValidationData<'model, 'msg>) =
(d: ValidationData<'model, 'msg, 't>) =
{ d with Validate = mValidate d.Validate }

let measureFunctions
Expand All @@ -756,7 +756,7 @@ module BindingData =
mGet
mSet
mEquals
(d: LazyData<'model, 'msg, 'bindingModel, 'bindingMsg>) =
(d: LazyData<'model, 'msg, 'bindingModel, 'bindingMsg, 't>) =
{ d with Get = mGet d.Get
Set = mSet d.Set
Equals = mEquals d.Equals }
Expand Down
10 changes: 5 additions & 5 deletions src/Elmish.WPF/BindingVmHelpers.fs
Original file line number Diff line number Diff line change
Expand Up @@ -204,20 +204,20 @@ and VmBinding<'model, 'msg> =

type SubModelSelectedItemLast() =

member _.Base(data: BaseBindingData<'model, 'msg>) : int =
member _.Base(data: BaseBindingData<'model, 'msg, obj>) : int =
match data with
| SubModelSelectedItemData _ -> 1
| _ -> 0

member this.Recursive<'model, 'msg>(data: BindingData<'model, 'msg>) : int =
member this.Recursive<'model, 'msg>(data: BindingData<'model, 'msg, obj>) : int =
match data with
| BaseBindingData d -> this.Base d
| CachingData d -> this.Recursive d
| ValidationData d -> this.Recursive d.BindingData
| LazyData d -> this.Recursive d.BindingData
| AlterMsgStreamData d -> this.Recursive d.BindingData

member this.CompareBindingDatas() : BindingData<'model, 'msg> -> BindingData<'model, 'msg> -> int =
member this.CompareBindingDatas() : BindingData<'model, 'msg, obj> -> BindingData<'model, 'msg, obj> -> int =
fun a b -> this.Recursive(a) - this.Recursive(b)


Expand Down Expand Up @@ -273,7 +273,7 @@ type Initialize
(initialModel: 'model,
dispatch: 'msg -> unit,
getCurrentModel: unit -> 'model,
binding: BaseBindingData<'model, 'msg>)
binding: BaseBindingData<'model, 'msg, obj>)
: BaseVmBinding<'model, 'msg> option =
match binding with
| OneWayData d ->
Expand Down Expand Up @@ -396,7 +396,7 @@ type Initialize
(initialModel: 'model,
dispatch: 'msg -> unit,
getCurrentModel: unit -> 'model,
binding: BindingData<'model, 'msg>)
binding: BindingData<'model, 'msg, obj>)
: VmBinding<'model, 'msg> option =
option {
match binding with
Expand Down
2 changes: 1 addition & 1 deletion src/Elmish.WPF/DynamicViewModel.fs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ open BindingVmHelpers
type Binding<'model, 'msg> =
internal
{ Name: string
Data: BindingData<'model, 'msg> }
Data: BindingData<'model, 'msg, obj> }


[<AutoOpen>]
Expand Down