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@context:context(),
fun(() -> gleam@option:option(fun(() -> nil))),
sprocket@hooks:hook_trigger(),
fun((sprocket@context:context()) -> {sprocket@context:context(),
list(sprocket@element:element())})
) -> {sprocket@context:context(), list(sprocket@element:element())}.
effect(Ctx, Effect_fn, Trigger, Cb) ->
Init = fun() ->
{effect, sprocket@internal@utils@unique:new(), Effect_fn, Trigger, none}
end,
{Ctx@1, {effect, Id, _, _, Prev}, Index} = sprocket@context:fetch_or_init_hook(
Ctx,
Init
),
Ctx@2 = sprocket@context:update_hook(
Ctx@1,
{effect, Id, Effect_fn, Trigger, Prev},
Index
),
Cb(Ctx@2).