Skip to content

De JSON para Componentes

Sistema que interpreta schemas JSON e os transforma em elementos React/Vue — o "tradutor" entre backend e frontend.

Schema Resolution

Schema Resolution é o processo que transforma configurações JSON em interfaces funcionais:

🔧 O Que Faz:

InputProcessoOutputResultado
Schema JSON do backendResolution + ValidationReact/Vue Element TreeInterface renderizada
Component specsRegistry lookupComponent instancesComponentes funcionando
Props e contextMiddleware pipelineEnhanced propsComportamento correto

📊 Fluxo de Resolução:

Etapas Automáticas:

  1. Schema Parsing: JSON → Estrutura interna
  2. Component Lookup: x-component → React/Vue Component
  3. Props Resolution: Schema properties → Component props
  4. Context Injection: Form/Menu context → Component context
  5. Middleware Application: Props transformation pipeline
  6. Element Creation: React.createElement() / Vue h() calls

Exemplo Visual:

json
{ "name": "email", "x-component": "InputText", "required": true }

Resolution Process

jsx
<InputText name="email" required={true} onChange={...} />

💡 Resultado: Schema declarativo → Componente imperativo.


🚀 Tipos de Resolução

Diferentes tipos de schema requerem diferentes estratégias de resolução:

📝 Form Schema Resolution:

Schema PropertyResolution StrategyReact/Vue ResultExemplo
nameField identificationname prop<input name="email" />
x-componentComponent registry lookupComponent type<InputText />
requiredValidation rulerequired prop + validationrequired={true}
x-component-propsProps passthroughDirect propsplaceholder="Digite email"
x-rulesValidation configurationValidation propspattern="email"

🧭 Menu Schema Resolution:

Schema PropertyResolution StrategyReact/Vue ResultExemplo
labelText contentchildren prop<MenuItem>Dashboard</MenuItem>
urlNavigation targethref or onClick<Link to="/dashboard" />
iconIcon componentIcon element<DashboardIcon />
visibleConditional renderingConditional wrapper{visible && <MenuItem />}
childrenNested menu itemsRecursive resolution<Submenu items={...} />

🎨 Component Schema Resolution:

Schema PropertyResolution StrategyReact/Vue ResultExemplo
x-componentComponent type lookupComponent class<Button />
x-uiLayout/styling propsCSS/styling propsclassName="col-md-6"
x-component-propsComponent-specific propsProps object{ variant: "primary" }
x-reactionsEvent handlersEvent propsonClick={handleClick}

⚙️ Resolution Engine

Como o sistema resolve schemas internamente:

🔄 Resolution Pipeline:

Raw JSON Schema

Validar Schema (JSON válido?)

Resolver Component (Registry lookup)

Mapear Props (Schema → Component props)

Injetar Context (Form/Menu/Global context)

Aplicar Middleware (Transformations pipeline)

Criar Element (React.createElement / Vue h())

React/Vue Element Final

🎯 Resolution Priorities:

Component Resolution Order:

  1. Local components (factory props)
  2. Global components (scheptaProvider)
  3. Registry overrides (registerComponent calls)
  4. Default components (built-in registry)

Props Resolution Order:

  1. Schema-defined props (x-component-props)
  2. Derived props (from schema structure)
  3. Context props (form context, etc.)
  4. Default props (component defaults)

Middleware Resolution Order:

  1. Built-in middleware (validation, formatting)
  2. Global middleware (scheptaProvider)
  3. Local middleware (factory props)
  4. Component middleware (component-specific)

📊 Resolution Strategies

Diferentes estratégias para diferentes tipos de conteúdo:

🎯 Expression Resolution:

Expression TypeResolution StrategyExampleResult
Static ValuesDirect assignment"required": truerequired={true}
Segment ExpressionsContext substitution"\{\{ $segment.tenant \}\}""bank 1"
Association ExpressionsAssociation lookup"\{\{ $target.title \}\}""Portal Title"
JEXL ExpressionsExpression evaluation"\{\{ $segment.role === 'admin' \}\}"true

🔧 Conditional Resolution:

Visibility Resolution:

typescript
const visible = evaluateExpression(schema.visible, context);
if (!visible) return null; // Component não renderiza

Dynamic Props Resolution:

typescript
const dynamicProps = schema['x-component-props'];
const resolvedProps = resolveDynamicValues(dynamicProps, context);

Validation Resolution:

  • Rules → Props: x-rules transformadas em propriedades de validação
  • Context Injection: Form context injetado automaticamente para validação
  • Error Handling: Fallbacks para rules inválidas ou malformadas

💡 Conceitos Relacionados

Schema Resolution é o "processador" que conecta schemas com React/Vue: