diff --git a/src/lib/json-ui/renderer.tsx b/src/lib/json-ui/renderer.tsx
index aefc299..3655212 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 (