From b5f081044ec473556ea8e8ba25faf4a494392fd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Mon, 21 Jul 2025 11:35:02 +0200 Subject: [PATCH] Add suspenseWithOptions --- packages/effect-fc/src/Component.ts | 18 ++++++++++++++++++ .../example/src/routes/dev/async-rendering.tsx | 4 ++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/packages/effect-fc/src/Component.ts b/packages/effect-fc/src/Component.ts index 5a7f6cb..280cad0 100644 --- a/packages/effect-fc/src/Component.ts +++ b/packages/effect-fc/src/Component.ts @@ -386,6 +386,24 @@ export const suspense = , P extends {}>( Object.getPrototypeOf(self), ) +export const suspenseWithOptions: { + , P extends {}>( + suspenseOptions: Partial + ): ( + self: ExcludeKeys & Component> + ) => T & Suspense + , P extends {}>( + self: ExcludeKeys & Component>, + suspenseOptions: Partial, + ): T & Suspense +} = Function.dual(2, , P extends {}>( + self: ExcludeKeys & Component>, + suspenseOptions: Partial, +): T & Suspense => Object.setPrototypeOf( + { ...self, suspense: true, suspenseOptions }, + Object.getPrototypeOf(self), +)) + export const useFC: { ( diff --git a/packages/example/src/routes/dev/async-rendering.tsx b/packages/example/src/routes/dev/async-rendering.tsx index 7b123c9..4e6c957 100644 --- a/packages/example/src/routes/dev/async-rendering.tsx +++ b/packages/example/src/routes/dev/async-rendering.tsx @@ -20,7 +20,7 @@ const RouteComponent = Component.make(function* AsyncRendering() { onChange={e => setInput(e.target.value)} /> - + Loading memoized...

} /> ) @@ -61,7 +61,7 @@ const AsyncComponent = Component.make(function* AsyncComponent() { ) }).pipe( - Component.suspense + Component.suspenseWithOptions({ defaultFallback:

Loading...

}) ) const MemoizedAsyncComponent = Component.memo(AsyncComponent)