diff --git a/src/lib/json-ui/component-renderer.tsx b/src/lib/json-ui/component-renderer.tsx index 7877ea6..51479dc 100644 --- a/src/lib/json-ui/component-renderer.tsx +++ b/src/lib/json-ui/component-renderer.tsx @@ -1,21 +1,15 @@ import { createElement, useMemo } from 'react' -import { UIComponent, Binding } from '@/types/json-ui' +import { UIComponent, Binding, ComponentRendererProps } from '@/types/json-ui' import { getUIComponent } from './component-registry' -interface ComponentRendererProps { - component: UIComponent - data: Record - onEvent?: (componentId: string, event: string, eventData: any) => void -} - -function resolveBinding(binding: Binding, data: Record): any { - let value = data[binding.source] +function resolveBinding(binding: Binding, data: Record): unknown { + let value: unknown = data[binding.source] if (binding.path) { const keys = binding.path.split('.') for (const key of keys) { if (value && typeof value === 'object') { - value = value[key] + value = (value as Record)[key] } else { value = undefined break @@ -32,7 +26,7 @@ function resolveBinding(binding: Binding, data: Record): any { export function ComponentRenderer({ component, data, onEvent }: ComponentRendererProps) { const resolvedProps = useMemo(() => { - const resolved: Record = { ...component.props } + const resolved: Record = { ...component.props } if (component.bindings) { Object.entries(component.bindings).forEach(([propName, binding]) => { @@ -42,7 +36,7 @@ export function ComponentRenderer({ component, data, onEvent }: ComponentRendere if (component.events && onEvent) { component.events.forEach(handler => { - resolved[`on${handler.event.charAt(0).toUpperCase()}${handler.event.slice(1)}`] = (e: any) => { + resolved[`on${handler.event.charAt(0).toUpperCase()}${handler.event.slice(1)}`] = (e: unknown) => { if (!handler.condition || handler.condition(data)) { onEvent(component.id, handler.event, e) } diff --git a/src/types/json-ui.ts b/src/types/json-ui.ts index 699b0f5..01428e6 100644 --- a/src/types/json-ui.ts +++ b/src/types/json-ui.ts @@ -95,4 +95,10 @@ export interface JSONUIContext { executeAction: (action: Action, event?: any) => Promise } +export interface ComponentRendererProps { + component: UIComponent + data: Record + onEvent?: (componentId: string, event: string, eventData: unknown) => void +} + export type ComponentSchema = UIComponent