From 782629d5b36c4879eba96fd3a03c51e74e8a2005 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 29 Jun 2025 18:20:46 +0200 Subject: [PATCH] Refactoring --- .../effect-components/src/ReactComponent.ts | 39 ++++++++++++------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/packages/effect-components/src/ReactComponent.ts b/packages/effect-components/src/ReactComponent.ts index e143951..118b6ac 100644 --- a/packages/effect-components/src/ReactComponent.ts +++ b/packages/effect-components/src/ReactComponent.ts @@ -8,22 +8,35 @@ export interface ReactComponent { } -export const use = ( +export const useFC: { + ( + self: ReactComponent, + options?: ReactHook.ScopeOptions, + ): Effect.Effect, never, Exclude> +} = Effect.fn(function* useFC( + self: ReactComponent, + options?: ReactHook.ScopeOptions, +) { + const runtime = yield* Effect.runtime>() + + return React.useCallback((props: P) => Runtime.runSync(runtime)( + self(props) as Effect.Effect> + ), []) +}) + +export const use: { + ( + self: ReactComponent, + fn: (Component: React.FC

) => React.ReactNode, + options?: ReactHook.ScopeOptions, + ): Effect.Effect> +} = Effect.fn(function* use( self: ReactComponent, fn: (Component: React.FC

) => React.ReactNode, options?: ReactHook.ScopeOptions, -): Effect.Effect> => Effect.map( - Effect.runtime(), - runtime => fn(props => FC(self as ReactComponent>, runtime, props, options)), -) - -export const useFC = ( - self: ReactComponent, - options?: ReactHook.ScopeOptions, -): Effect.Effect, never, Exclude> => Effect.map( - Effect.runtime(), - runtime => props => FC(self as ReactComponent>, runtime, props, options), -) +) { + return fn(yield* useFC(self, options)) +}) const FC = (