From 6690f5d03c110fa173b821e9010d352154e57238 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9=20LARIVIERE?= Date: Mon, 7 Aug 2023 15:11:53 +0200 Subject: [PATCH 1/3] Remove ambiguity when declaring event attributes --- src/Fabulous/Attributes.fs | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/Fabulous/Attributes.fs b/src/Fabulous/Attributes.fs index 9dddc4cd5..f001995d6 100644 --- a/src/Fabulous/Attributes.fs +++ b/src/Fabulous/Attributes.fs @@ -84,6 +84,13 @@ type SmallScalarExtensions() = ) = this.WithValue(value, SmallScalars.IntEnum.encode) +type MsgValue = MsgValue of obj + +[] +type SimpleScalarAttributeDefinitionExtensions() = + [] + static member inline WithValue(this: SimpleScalarAttributeDefinition<'args -> MsgValue>, value: 'args -> 'msg) = + this.WithValue(value >> box >> MsgValue) module Attributes = /// Define an attribute that can fit into 8 bytes encoded as uint64 (such as float or bool) @@ -276,11 +283,11 @@ module Attributes = { Key = key; Name = name } /// Define an attribute for EventHandler - let inline defineEventNoArg name ([] getEvent: obj -> IEvent) : SimpleScalarAttributeDefinition = + let inline defineEventNoArg name ([] getEvent: obj -> IEvent) : SimpleScalarAttributeDefinition = let key = SimpleScalarAttributeDefinition.CreateAttributeData( ScalarAttributeComparers.noCompare, - (fun _ newValueOpt node -> + (fun _ (newValueOpt: MsgValue voption) node -> let event = getEvent node.Target match node.TryGetHandler(name) with @@ -290,7 +297,7 @@ module Attributes = match newValueOpt with | ValueNone -> node.SetHandler(name, ValueNone) - | ValueSome msg -> + | ValueSome(MsgValue msg) -> let handler = EventHandler(fun _ _ -> Dispatcher.dispatch node msg) event.AddHandler handler @@ -305,11 +312,11 @@ module Attributes = let inline defineEvent<'args> name ([] getEvent: obj -> IEvent, 'args>) - : SimpleScalarAttributeDefinition<'args -> obj> = + : SimpleScalarAttributeDefinition<'args -> MsgValue> = let key = SimpleScalarAttributeDefinition.CreateAttributeData( ScalarAttributeComparers.noCompare, - (fun _ (newValueOpt: ('args -> obj) voption) (node: IViewNode) -> + (fun _ (newValueOpt: ('args -> MsgValue) voption) (node: IViewNode) -> let event = getEvent node.Target match node.TryGetHandler(name) with @@ -322,7 +329,7 @@ module Attributes = | ValueSome fn -> let handler = EventHandler<'args>(fun _ args -> - let r = fn args + let (MsgValue r) = fn args Dispatcher.dispatch node r) node.SetHandler(name, ValueSome handler) From 7d84be53bf054352ba220098c321918da55a2999 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9=20LARIVIERE?= Date: Mon, 7 Aug 2023 15:13:48 +0200 Subject: [PATCH 2/3] Update changelog --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f6a42b1c..712b96037 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 _No unreleased changes_ +## [2.4.0] - 2023-08-07 + +### Changed +- Remove ambiguity when declaring event attributes by using MsgValue instead of obj by @TimLariviere (https://github.com/fabulous-dev/Fabulous/pull/1044) + ## [2.3.2] - 2023-06-01 ### Changed From afef7787e1c13b6bb610002d85ed487a7d52ab6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9=20LARIVIERE?= Date: Mon, 7 Aug 2023 15:53:52 +0200 Subject: [PATCH 3/3] Fix link --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 712b96037..a0ad8e567 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,7 @@ _No unreleased changes_ ## [2.4.0] - 2023-08-07 ### Changed -- Remove ambiguity when declaring event attributes by using MsgValue instead of obj by @TimLariviere (https://github.com/fabulous-dev/Fabulous/pull/1044) +- Remove ambiguity when declaring event attributes by using MsgValue instead of obj by @TimLariviere (https://github.com/fabulous-dev/Fabulous/pull/1047) ## [2.3.2] - 2023-06-01