Current section
Files
Jump to
Current section
Files
src/sprocket@hooks@effect.erl
-module(sprocket@hooks@effect).
-compile([no_auto_import, nowarn_unused_vars]).
-export([effect/4]).
-spec effect(
sprocket@socket:socket(),
fun(() -> gleam@option:option(fun(() -> nil))),
sprocket@hooks:hook_trigger(),
fun((sprocket@socket:socket()) -> {sprocket@socket:socket(),
list(sprocket@element:element())})
) -> {sprocket@socket:socket(), list(sprocket@element:element())}.
effect(Socket, Effect_fn, Trigger, Cb) ->
Init = fun() ->
{effect, sprocket@internal@utils@unique:new(), Effect_fn, Trigger, none}
end,
{Socket@1, {effect, Id, _, _, Prev}, Index} = sprocket@socket:fetch_or_init_hook(
Socket,
Init
),
Socket@2 = sprocket@socket:update_hook(
Socket@1,
{effect, Id, Effect_fn, Trigger, Prev},
Index
),
Cb(Socket@2).