From ee40a5e25c44ef478ee13426549e548d2610a215 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Tue, 27 Feb 2024 01:18:23 -0300 Subject: conversion UI --- packages/web-util/src/components/utils.ts | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'packages/web-util/src') diff --git a/packages/web-util/src/components/utils.ts b/packages/web-util/src/components/utils.ts index 34693f7d7..75c3fc0fe 100644 --- a/packages/web-util/src/components/utils.ts +++ b/packages/web-util/src/components/utils.ts @@ -12,6 +12,7 @@ export function compose( hook: (p: PType) => RecursiveState, viewMap: StateViewMap, ): (p: PType) => VNode { + function withHook(stateHook: () => RecursiveState): () => VNode { function ComposedComponent(): VNode { const state = stateHook(); @@ -35,6 +36,33 @@ export function compose( }; } +export function recursive( + hook: (p: PType) => RecursiveState, +): (p: PType) => VNode { + + function withHook(stateHook: () => RecursiveState): () => VNode { + function ComposedComponent(): VNode { + const state = stateHook(); + + if (typeof state === "function") { + const subComponent = withHook(state); + return createElement(subComponent, {}); + } + + return state; + } + + return ComposedComponent; + } + + return (p: PType) => { + const h = withHook(() => hook(p)); + return h(); + }; +} + + + /** * * @param obj VNode -- cgit v1.2.3