From 55c81cedfa3001ccc55f0eb85fd2b42f045373cc Mon Sep 17 00:00:00 2001 From: johndoe6345789 Date: Sun, 18 Jan 2026 02:05:10 +0000 Subject: [PATCH] Update data binding resolution context --- src/lib/json-ui/renderer.tsx | 4 ++-- src/lib/json-ui/utils.ts | 24 ++++++++++++++++-------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/lib/json-ui/renderer.tsx b/src/lib/json-ui/renderer.tsx index c52e48d..efde4bc 100644 --- a/src/lib/json-ui/renderer.tsx +++ b/src/lib/json-ui/renderer.tsx @@ -26,7 +26,7 @@ export function JSONUIRenderer({ } if (component.loop) { - const items = resolveDataBinding(component.loop.source, dataMap) || [] + const items = resolveDataBinding(component.loop.source, dataMap, context) || [] return ( <> {items.map((item: any, index: number) => { @@ -59,7 +59,7 @@ export function JSONUIRenderer({ const props: Record = { ...component.props } if (component.dataBinding) { - const boundData = resolveDataBinding(component.dataBinding, dataMap) + const boundData = resolveDataBinding(component.dataBinding, dataMap, context) if (boundData !== undefined) { props.value = boundData props.data = boundData diff --git a/src/lib/json-ui/utils.ts b/src/lib/json-ui/utils.ts index f8506eb..f6179de 100644 --- a/src/lib/json-ui/utils.ts +++ b/src/lib/json-ui/utils.ts @@ -1,14 +1,22 @@ -export function resolveDataBinding(binding: string | { source: string; path?: string }, dataMap: Record): any { +export function resolveDataBinding( + binding: string | { source: string; path?: string; transform?: string }, + dataMap: Record, + context: Record = {}, +): any { + const mergedContext = { ...dataMap, ...context } + if (typeof binding === 'string') { - return dataMap[binding] + if (binding.includes('.')) { + return getNestedValue(mergedContext, binding) + } + return mergedContext[binding] } - const { source, path } = binding - const data = dataMap[source] - - if (!path) return data - - return getNestedValue(data, path) + const { source, path, transform } = binding + const data = mergedContext[source] + const resolvedValue = path ? getNestedValue(data, path) : data + + return transform ? transformData(resolvedValue, transform) : resolvedValue } export function getNestedValue(obj: any, path: string): any {