Pular para o conteúdo principal

defineViews — Declaração de UI

Os helpers define*View constroem objetos tipados que o Core usa para gerar rotas, sidebar e componentes automaticamente.

defineCollectionView

Renderiza uma tabela paginada com CRUD completo.

import { defineCollectionView } from "@oondemand/oon-core-front";

// Modo dinâmico — tudo gerado a partir de /core/models/:model
defineCollectionView({
model: "Cliente",
label: "Clientes",
section: "Cadastros",
});

// Modo full — colunas e form explícitos
defineCollectionView({
model: "Pedido",
label: "Pedidos",
mode: "full",
columns: [
{ field: "numero", label: "Nº", sortable: true },
{ field: "cliente", label: "Cliente" },
{ field: "total", label: "Total", kind: "currency" },
{ field: "status", label: "Status", kind: "enum" },
],
form: [
{ field: "numero", label: "Número", required: true },
{ field: "cliente", label: "Cliente", kind: "ref" },
{ field: "total", label: "Total", kind: "currency" },
{ field: "status", label: "Status", kind: "enum",
options: ["novo", "confirmado", "entregue"] },
],
importExport: true,
});

Opções

CampoTipoDescrição
modelstring✅ Nome do Model no backend
labelstringLabel no menu
mode"dynamic" | "full" | "minimal"Default: "dynamic"
columnsOonColumnDef[]Colunas (modo full)
formOonFormFieldDef[]Campos do formulário (modo full)
importExportbooleanExibe botão de import/export
sectionstringSeção no menu lateral
permissionsstring[]Permissões para acessar a view

defineDocumentView

Renderiza um formulário de documento único com workflow de aprovação.

import { defineDocumentView } from "@oondemand/oon-core-front";

defineDocumentView({
model: "ContratoServico",
label: "Contratos",
approval: true,
attachments: true,
section: "Documentos",
});

definePipelineView

Renderiza um Kanban de tickets.

import { definePipelineView } from "@oondemand/oon-core-front";

definePipelineView({
model: "Servico",
label: "Atendimento",
stageField: "etapa",
stages: [
{ id: "aberto", label: "Aberto" },
{ id: "em_andamento", label: "Em andamento" },
{ id: "concluido", label: "Concluído" },
],
});

defineDashboard

Renderiza um painel com widgets de contagem/agregação.

import { defineDashboard } from "@oondemand/oon-core-front";

defineDashboard({
label: "Dashboard",
widgets: [
{ id: "total-clientes", label: "Clientes", model: "Cliente", kind: "count" },
{ id: "total-pedidos", label: "Pedidos", model: "Pedido", kind: "count" },
{ id: "receita", label: "Receita", model: "Pedido", kind: "sum", field: "total" },
],
});

defineOonModule

Para agrupamentos mais complexos com rotas customizadas:

import { defineOonModule, defineCollectionView } from "@oondemand/oon-core-front";

const moduloFinanceiro = defineOonModule({
id: "financeiro",
label: "Financeiro",
views: [
defineCollectionView({ model: "Pagamento", label: "Pagamentos" }),
defineCollectionView({ model: "Recebimento", label: "Recebimentos" }),
defineDashboard({ label: "Resumo Financeiro", widgets: [...] }),
],
});

start({
// ...
modules: [moduloFinanceiro],
});