summaryrefslogtreecommitdiff
path: root/apps/web/src/hooks/actions/use-action-handler.ts
diff options
context:
space:
mode:
Diffstat (limited to 'apps/web/src/hooks/actions/use-action-handler.ts')
-rw-r--r--apps/web/src/hooks/actions/use-action-handler.ts52
1 files changed, 0 insertions, 52 deletions
diff --git a/apps/web/src/hooks/actions/use-action-handler.ts b/apps/web/src/hooks/actions/use-action-handler.ts
deleted file mode 100644
index 3f6dbd21..00000000
--- a/apps/web/src/hooks/actions/use-action-handler.ts
+++ /dev/null
@@ -1,52 +0,0 @@
-import { useCallback, useEffect, useRef } from "react";
-import type {
- TAction,
- TActionFunc,
- TActionHandlerOptions,
- TArgOfAction,
- TInvocationTrigger,
-} from "@/lib/actions";
-import { bindAction, unbindAction } from "@/lib/actions";
-
-export function useActionHandler<A extends TAction>(
- action: A,
- handler: TActionFunc<A>,
- isActive: TActionHandlerOptions,
-) {
- const handlerRef = useRef<TActionFunc<A>>(handler);
- const isBoundRef = useRef(false);
-
- useEffect(() => {
- handlerRef.current = handler;
- }, [handler]);
-
- const stableHandler = useCallback(
- (...parameters: [TArgOfAction<A>, TInvocationTrigger?]) => {
- (
- handlerRef.current as (
- ...handlerParameters: [TArgOfAction<A>, TInvocationTrigger?]
- ) => void
- )(...parameters);
- },
- [],
- ) as TActionFunc<A>;
-
- useEffect(() => {
- const shouldBind =
- isActive === undefined ||
- (typeof isActive === "boolean" ? isActive : isActive.current);
-
- if (shouldBind && !isBoundRef.current) {
- bindAction(action, stableHandler);
- isBoundRef.current = true;
- } else if (!shouldBind && isBoundRef.current) {
- unbindAction(action, stableHandler);
- isBoundRef.current = false;
- }
-
- return () => {
- unbindAction(action, stableHandler);
- isBoundRef.current = false;
- };
- }, [action, stableHandler, isActive]);
-}