Skip to content

Commit

Permalink
Merge pull request #1077 from fabulous-dev/add-define-event-no-dispatch
Browse files Browse the repository at this point in the history
Add `defineEventNoDispatch`
  • Loading branch information
Edgar Gonzalez committed Apr 19, 2024
2 parents 8d423e4 + 8de43d9 commit dbc9e6e
Showing 1 changed file with 23 additions and 0 deletions.
23 changes: 23 additions & 0 deletions src/Fabulous/Attributes.fs
Original file line number Diff line number Diff line change
Expand Up @@ -355,3 +355,26 @@ module Attributes =
|> AttributeDefinitionStore.registerScalar

{ Key = key; Name = name }

let inline defineEventNoDispatch<'args>
name
([<InlineIfLambda>] getEvent: obj -> IEvent<EventHandler<'args>, 'args>)
: SimpleScalarAttributeDefinition<'args -> unit> =
let key =
SimpleScalarAttributeDefinition.CreateAttributeData(
ScalarAttributeComparers.noCompare,
(fun _ (newValueOpt: ('args -> unit) voption) node ->
match node.TryGetHandler(name) with
| ValueNone -> ()
| ValueSome handler -> handler.Dispose()

match newValueOpt with
| ValueNone -> node.RemoveHandler(name)
| ValueSome(fn) ->
let event = getEvent node.Target
node.SetHandler(name, event.Subscribe(fun args -> fn args)))
)

|> AttributeDefinitionStore.registerScalar

{ Key = key; Name = name }

0 comments on commit dbc9e6e

Please sign in to comment.