-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).