From e142010128192d650adbc7c380823c77f4f5dde1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 15 Jan 2025 17:40:50 +0100 Subject: [PATCH] useMergeAllLayers --- packages/reffuse/src/ReffuseContext.tsx | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/reffuse/src/ReffuseContext.tsx b/packages/reffuse/src/ReffuseContext.tsx index 28ee155..6f29cfd 100644 --- a/packages/reffuse/src/ReffuseContext.tsx +++ b/packages/reffuse/src/ReffuseContext.tsx @@ -1,4 +1,4 @@ -import { Context, Effect, Layer, Runtime } from "effect" +import { Array, Context, Effect, Layer, Runtime } from "effect" import React from "react" import * as ReffuseRuntime from "./ReffuseRuntime.js" @@ -60,8 +60,14 @@ export function useMergeAll< return React.useMemo(() => Context.mergeAll(...values), values) } +export function useMergeAllLayers< + const Contexts extends Array.NonEmptyReadonlyArray> +>( + ...contexts: Contexts +): Layer.Layer<{ [K in keyof Contexts]: R }[number]> { + const values = Array.map(contexts, v => React.use(v.Context)) -const context1 = make<{ readonly service1: true }>() -const context2 = make<{ readonly service2: true }>() - -const res = useMergeAll(context1, context2) + return React.useMemo(() => Layer.mergeAll( + ...Array.map(values, context => Layer.effectContext(Effect.succeed(context))) + ) as Layer.Layer, values) +}