Buscar K
Aparência
Aparência
app-dashboard é o formato de cada Dashboard da Aplicação. Ele não tem arquivo próprio: cada Dashboard é um item da lista dashboards: no arquivo da Aplicação, com um header e um body. O que é um Dashboard e como os Widgets se configuram está em Widgets e opções comuns de Widget.
A tabela descreve o Dashboard isolado. No arquivo da Aplicação, o header leva só o id: appId, tenantId, kind e lumo vêm do cabeçalho da Aplicação no push.
fileName^[a-z0-9-]+--\d+\.yaml$headerheader.idheader.kindapp-dashboard (fixo)header.lumov2 (fixo)header.tenantIdheader.appIdbodybody.criado_em^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z$body.criado_porbody.publicado_em^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z$body.publicado_porbody.nomebody.ordembody.widget_columnsbody.widget_floatbody.versionbody.filters[] com allow_new_filters liberado, e é o que o CLI emite para toda aba que nunca usou o recurso (o hash de drift descarta chave null, então essa aba não muda de hash entre versões do CLI). Ver shared.schema.json#/$defs/filterDefinition para o contrato de cada item, inclusive value: false como campo declarado vazio.body.filters[].columnbody.filters[].column.column_idbody.filters[].column.expressionbody.filters[].operatorbody.filters[].valuefalse é o marcador de campo declarado vazio (vaga): a aba assume a coluna como filtrável mas sem valor próprio, e herda o que estava aplicado na aba anterior. Qualquer outro valor (inclusive array, para múltipla escolha) é o valor efetivamente aplicado.body.filters[].comparativeValuesbody.filters[].required0, 1, 2, 3body.filters[].mergeStrategybody.allow_new_filtersfilters. null = herda o padrão (true); só false explícito bloqueia.body.widgetsbody.widgets[].idbody.widgets[].guidbody.widgets[].nomebody.widgets[].typeKpi, Barline, Pie, Table, Matrix, ComposedMatrix, Map, Gauge, Punchcard, Sankey, Forecast, Calendar, ListBox, Text, Diagram, Svelte, ParametricSvelte, Appbody.widgets[].display_nomebody.widgets[].xbody.widgets[].ybody.widgets[].wbody.widgets[].hbody.widgets[].mobileYbody.widgets[].mobileHbody.widgets[].mobileVisiblebody.widgets[].chartUm item da lista dashboards: da Aplicação, com a indentação tirada. No arquivo, ele vem precedido de - sob dashboards:.
header:
id: 9101 # Dashboard que já existe: mantenha o id que veio do pull
# 0 = criar um Dashboard novo no próximo push
body:
nome: Visão geral
ordem: 0 # ordem da aba: o menor vem primeiro
widget_columns: 12 # grade de 12, 24, 36 ou 60 colunas
widgets:
- nome: Faturamento
type: Kpi
w: 3 # largura, em colunas da grade
h: 1
x: 0
y: 0
chart:
primaryData:
dataSource: "70011:SUM" # <id da coluna>:<agregação>, de lumo info app:<id> --full
title:
value: Faturamento
filter: []lumo scaffold widget <tipo> mostra a configuração de cada tipo de Widget (Kpi, Barline, Pie, Table, Matrix e os outros), comentada. Para conferir o resultado, lumo app dashboard-preview app:<id> devolve os dados de cada Widget e lumo app export app:<id> gera a imagem.
push substitui a lista inteira. Um Dashboard que está no servidor e falta em dashboards: é apagado. Um Dashboard reescrito sem o header.id é recriado com outro id, o que quebra lumo app export --dashboard <id> e as Apresentações que apontam para ele.ordem, não da posição no array.filters e allow_new_filters de cada Dashboard só valem quando a Aplicação tem filter_mode: per_dashboard.Kpi, o filtro fica em filter, no singular. filters não é lido.widgets é válida: nasce vazia e recebe Widgets num push seguinte.filters e allow_new_filters de cada Dashboard passam direto.