diff --git a/packages/effect-fc/src/Hook.ts b/packages/effect-fc/src/Hook.ts index a39643a..4f1a441 100644 --- a/packages/effect-fc/src/Hook.ts +++ b/packages/effect-fc/src/Hook.ts @@ -9,6 +9,33 @@ export interface ScopeOptions { } +export const useCallbackSync: { + ( + callback: (...args: Args) => Effect.Effect, + deps: React.DependencyList, + ): Effect.Effect<(...args: Args) => A, never, R> +} = Effect.fn("useCallbackSync")(function* ( + callback: (...args: Args) => Effect.Effect, + deps: React.DependencyList, +) { + const runtime = yield* Effect.runtime() + return React.useCallback((...args: Args) => Runtime.runSync(runtime)(callback(...args)), deps) +}) + +export const useCallbackPromise: { + ( + callback: (...args: Args) => Effect.Effect, + deps: React.DependencyList, + ): Effect.Effect<(...args: Args) => Promise, never, R> +} = Effect.fn("useCallbackPromise")(function* ( + callback: (...args: Args) => Effect.Effect, + deps: React.DependencyList, +) { + const runtime = yield* Effect.runtime() + return React.useCallback((...args: Args) => Runtime.runPromise(runtime)(callback(...args)), deps) +}) + + export const useMemo: { ( factory: () => Effect.Effect, @@ -41,33 +68,6 @@ export const useMemoLayer: { }) -export const useCallbackSync: { - ( - callback: (...args: Args) => Effect.Effect, - deps: React.DependencyList, - ): Effect.Effect<(...args: Args) => A, never, R> -} = Effect.fn("useCallbackSync")(function* ( - callback: (...args: Args) => Effect.Effect, - deps: React.DependencyList, -) { - const runtime = yield* Effect.runtime() - return React.useCallback((...args: Args) => Runtime.runSync(runtime)(callback(...args)), deps) -}) - -export const useCallbackPromise: { - ( - callback: (...args: Args) => Effect.Effect, - deps: React.DependencyList, - ): Effect.Effect<(...args: Args) => Promise, never, R> -} = Effect.fn("useCallbackPromise")(function* ( - callback: (...args: Args) => Effect.Effect, - deps: React.DependencyList, -) { - const runtime = yield* Effect.runtime() - return React.useCallback((...args: Args) => Runtime.runPromise(runtime)(callback(...args)), deps) -}) - - export const useEffect: { ( effect: () => Effect.Effect,