diff --git a/src/lib/json-ui/renderer.tsx b/src/lib/json-ui/renderer.tsx index 53138e3..e74191f 100644 --- a/src/lib/json-ui/renderer.tsx +++ b/src/lib/json-ui/renderer.tsx @@ -10,32 +10,6 @@ export function JSONUIRenderer({ onAction, context = {} }: JSONUIRendererProps) { - - if (component.conditional) { - const conditionMet = evaluateCondition(component.conditional.if, { ...dataMap, ...context }) - if (conditionMet) { - if (component.conditional.then) { - return ( - - ) - } - } else { - return component.conditional.else ? ( - - ) : null - } - } - const renderChildren = ( children: UIComponent[] | string | undefined, renderContext: Record @@ -57,6 +31,46 @@ export function JSONUIRenderer({ )) } + const renderConditionalBranch = ( + branch: UIComponent | UIComponent[] | string | undefined, + renderContext: Record + ) => { + if (branch === undefined) return null + + if (typeof branch === 'string' || Array.isArray(branch)) { + return renderChildren(branch, renderContext) + } + + return ( + + ) + } + + if (component.conditional) { + const conditionMet = evaluateCondition(component.conditional.if, { ...dataMap, ...context }) + if (conditionMet) { + if (component.conditional.then !== undefined) { + return renderConditionalBranch( + component.conditional.then as UIComponent | UIComponent[] | string, + context + ) + } + } else { + if (component.conditional.else !== undefined) { + return renderConditionalBranch( + component.conditional.else as UIComponent | UIComponent[] | string, + context + ) + } + return null + } + } + if (component.loop) { const items = resolveDataBinding(component.loop.source, dataMap, context) || [] return (