Current section

Files

Jump to
sprocket src sprocket@hooks@client.erl
Raw

src/sprocket@hooks@client.erl

-module(sprocket@hooks@client).
-compile([no_auto_import, nowarn_unused_vars]).
-export([client/4]).
-spec client(
sprocket@context:context(),
binary(),
gleam@option:option(fun((binary(), gleam@option:option(gleam@dynamic:dynamic_()), fun((binary(), gleam@option:option(binary())) -> {ok,
nil} |
{error, nil})) -> nil)),
fun((sprocket@context:context(), fun(() -> sprocket@html@attributes:attribute()), fun((binary(), gleam@option:option(binary())) -> {ok,
nil} |
{error, nil})) -> {sprocket@context:context(),
list(sprocket@context:element())})
) -> {sprocket@context:context(), list(sprocket@context:element())}.
client(Ctx, Name, Handle_event, Cb) ->
Init = fun() ->
{client, sprocket@internal@utils@unique:new(), Name, Handle_event}
end,
{Ctx@1, {client, Id, _, _}, Index} = sprocket@context:fetch_or_init_hook(
Ctx,
Init
),
Ctx@2 = sprocket@context:update_hook(
Ctx@1,
{client, Id, Name, Handle_event},
Index
),
Bind_hook_attr = fun() -> sprocket@html@attributes:client_hook(Id, Name) end,
Dispatch_event = fun(Name@1, Payload) ->
sprocket@context:dispatch_event(Ctx@2, Id, Name@1, Payload)
end,
Cb(Ctx@2, Bind_hook_attr, Dispatch_event).