Skip to content

Commit

Permalink
cleanup/refactor event handling (@event)
Browse files Browse the repository at this point in the history
  • Loading branch information
hhaensel committed Jan 28, 2025
1 parent c0a8084 commit a8a414b
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 6 deletions.
5 changes: 2 additions & 3 deletions src/ReactiveTools.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1304,13 +1304,12 @@ end
macro event(M, eventname, expr)
known_reactive_vars, known_non_reactive_vars = get_known_vars(@eval(__module__, $M))
known_vars = vcat(known_reactive_vars, known_non_reactive_vars)
expr, used_vars = mask(expr, known_vars)


expr, _ = mask(expr, known_vars)
expr = fieldnames_to_fields(expr, known_non_reactive_vars)
expr = fieldnames_to_fieldcontent(expr, known_reactive_vars)
expr = unmask(expr, known_vars)

expr = unmask(fieldnames_to_fieldcontent(expr, known_vars), known_vars)
T = eventname isa QuoteNode ? eventname : QuoteNode(eventname)

quote
Expand Down
16 changes: 13 additions & 3 deletions src/Stipple.jl
Original file line number Diff line number Diff line change
Expand Up @@ -512,6 +512,18 @@ function get_abstract_type(::Type{M})::Type{<:ReactiveModel} where M <: Stipple.
SM <: ReactiveModel && SM != ReactiveModel ? SM : M
end

# fallback for event handling if no handler with event_info is defined
function Base.notify(model::ReactiveModel, event, event_info::AbstractDict)
notify(model, event)
end

# fallback for event handling without event_info
function Base.notify(model::ReactiveModel, event)
T = typeof(event)
event_name = T.name == Base.typename(Val) ? ":$(T.parameters[1])" : event
println("No event '$event_name' defined")
end

"""
function init(::Type{M};
vue_app_name::S = Stipple.Elements.root(M),
Expand Down Expand Up @@ -638,9 +650,7 @@ function init(t::Type{M};
client = transport == Genie.WebChannels ? Genie.WebChannels.id(Genie.Requests.wsclient()) : Genie.Requests.wtclient()
push!(event_info, "_client" => client)
end

isempty(methods(notify, (M, Val{handler}))) || notify(model, Val(handler))
isempty(methods(notify, (M, Val{handler}, Any))) || notify(model, Val(handler), event_info)
notify(model, Val(handler), event_info)

LAST_ACTIVITY[Symbol(channel)] = now()

Expand Down

0 comments on commit a8a414b

Please sign in to comment.