79 lines
3.1 KiB
JavaScript
79 lines
3.1 KiB
JavaScript
import { z } from "zod";
|
|
import { z_filtro } from "../_serie_consultar";
|
|
// usar describe para definir o tipo de campo para render do componente
|
|
const z_tipos_campos = z.enum([
|
|
"tabela",
|
|
"coluna",
|
|
"texto",
|
|
"lista_colunas",
|
|
"lista_filtros",
|
|
]);
|
|
export const z_contagem_em_barra_vertical = z.object({
|
|
tabela: z.string(),
|
|
colanuEixoX: z.string(),
|
|
colunaAgrupamento: z.string().array().optional(),
|
|
filtros: z_filtro.array().optional(),
|
|
descricao_pelo_usuario: z.string().optional(),
|
|
});
|
|
export const z_contagem_em_pizza = z.object({
|
|
tabela: z.string(),
|
|
classes: z.string(),
|
|
filtros: z_filtro.array().optional(),
|
|
descricao_pelo_usuario: z.string().optional(),
|
|
});
|
|
export const visoes = {
|
|
z_contagem_em_barra_vertical,
|
|
z_contagem_em_pizza,
|
|
};
|
|
/** Cria a estrutura de campos para insersão de dados */
|
|
export const extruturas_de_campos = {
|
|
z_contagem_em_barra_vertical: {
|
|
visao: "z_contagem_em_barra_vertical",
|
|
rotulo: "Contagem em Barra Vertical",
|
|
tabela: ({ tabela }) => tabela,
|
|
descricao: ({ tabela, descricao_pelo_usuario, colanuEixoX, filtros, colunaAgrupamento, }) => {
|
|
if (String(descricao_pelo_usuario || "").trim())
|
|
return String(descricao_pelo_usuario || "").trim();
|
|
return `Contagem de ${tabela} por ${colanuEixoX}${!filtros?.length
|
|
? ""
|
|
: `, quando ${filtros
|
|
.map(({ coluna, operador, valor }) => `${coluna} ${operador} ${valor}`)
|
|
.join(", ")}`}${!colunaAgrupamento?.length
|
|
? ""
|
|
: `, agrupado por ${colunaAgrupamento.join(", ")}`}.`;
|
|
},
|
|
campos: {
|
|
colanuEixoX: {
|
|
rotulo: "Coluna do Eixo X",
|
|
tipo_campo: "coluna",
|
|
},
|
|
tabela: { rotulo: "Tabela", tipo_campo: "tabela" },
|
|
colunaAgrupamento: {
|
|
rotulo: "Colunas de Agrupamento",
|
|
tipo_campo: "lista_colunas",
|
|
},
|
|
filtros: { rotulo: "Filtros", tipo_campo: "lista_filtros" },
|
|
descricao_pelo_usuario: { rotulo: "Descrição", tipo_campo: "texto" },
|
|
},
|
|
},
|
|
z_contagem_em_pizza: {
|
|
visao: "z_contagem_em_pizza",
|
|
rotulo: "Contagem em Pizza",
|
|
tabela: ({ tabela }) => tabela,
|
|
descricao: ({ tabela, descricao_pelo_usuario, classes, filtros }) => {
|
|
if (String(descricao_pelo_usuario || "").trim())
|
|
return String(descricao_pelo_usuario || "").trim();
|
|
return `Contagem de ${tabela} por ${classes}${!filtros?.length
|
|
? ""
|
|
: `, quando ${filtros
|
|
.map(({ coluna, operador, valor }) => `${coluna} ${operador} ${valor}`)
|
|
.join(", ")}`}.`;
|
|
},
|
|
campos: {
|
|
classes: { rotulo: "Classes", tipo_campo: "coluna" },
|
|
tabela: { rotulo: "Tabela", tipo_campo: "tabela" },
|
|
filtros: { rotulo: "Filtros", tipo_campo: "lista_filtros" },
|
|
descricao_pelo_usuario: { rotulo: "Descrição", tipo_campo: "texto" },
|
|
},
|
|
},
|
|
};
|