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", "ordem", ]); 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 z_tabela = z.object({ tabela: z.string(), colunas: z.string().array(), coluna_ordem: z.string().optional(), direcao_ordem: z.enum(["asc", "desc", "1", "-1"]).optional(), filtros: z_filtro.array().optional(), descricao_pelo_usuario: z.string().optional(), }); export const visoes = { z_contagem_em_barra_vertical, z_contagem_em_pizza, z_tabela, }; /** 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: { tabela: { rotulo: "Tabela", tipo_campo: "tabela", order: 1 }, colanuEixoX: { rotulo: "Coluna do Eixo X", tipo_campo: "coluna", order: 2, }, colunaAgrupamento: { rotulo: "Colunas de Agrupamento", tipo_campo: "lista_colunas", order: 3, }, descricao_pelo_usuario: { rotulo: "Descrição (opcional)", tipo_campo: "texto", order: 4, }, filtros: { rotulo: "Filtros", tipo_campo: "lista_filtros", order: 5 }, }, }, 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: { tabela: { rotulo: "Tabela", tipo_campo: "tabela", order: 1 }, classes: { rotulo: "Classes", tipo_campo: "coluna", order: 2 }, descricao_pelo_usuario: { rotulo: "Descrição (opcional)", tipo_campo: "texto", order: 3, }, filtros: { rotulo: "Filtros", tipo_campo: "lista_filtros", order: 4 }, }, }, z_tabela: { visao: "z_tabela", rotulo: "Tabela", tabela: ({ tabela }) => tabela, descricao: ({ tabela, descricao_pelo_usuario, filtros }) => { if (String(descricao_pelo_usuario || "").trim()) return String(descricao_pelo_usuario || "").trim(); return `Consulta na ${tabela} ${!filtros?.length ? "" : `, quando ${filtros .map(({ coluna, operador, valor }) => `${coluna} ${operador} ${valor}`) .join(", ")}`}.`; }, campos: { tabela: { rotulo: "Tabela", tipo_campo: "tabela", order: 1 }, colunas: { rotulo: "Colunas", tipo_campo: "lista_colunas", order: 2 }, descricao_pelo_usuario: { rotulo: "Descrição (opcional)", tipo_campo: "texto", order: 3, }, coluna_ordem: { rotulo: "Coluna de Ordem", tipo_campo: "coluna", order: 4, }, direcao_ordem: { rotulo: "Direção de Ordem", tipo_campo: "ordem", order: 5, }, filtros: { rotulo: "Filtros", tipo_campo: "lista_filtros", order: 6 }, }, }, };