Refatorado estrutura de visões de gráficos
This commit is contained in:
parent
33a89ac1f3
commit
fea1b3d96c
52 changed files with 1489 additions and 1777 deletions
|
|
@ -8,7 +8,8 @@ import type { z } from "zod"
|
|||
|
||||
import type { zp_enviar_registros } from "../_enviar_registros"
|
||||
import { PREFIXO_PILAO, type zp_deletar_registros } from "../variaveis"
|
||||
import type { visoes } from "../visoes"
|
||||
|
||||
import type { visoes_pilao } from "../visoes/listaDeVisoes"
|
||||
import type { tipo_pilao_api } from "./pilao-api.ts"
|
||||
import type { tipoConstrutorPilao, tipoRetornoSerieconsulta } from "./tipagem"
|
||||
|
||||
|
|
@ -54,11 +55,11 @@ class ClassPilao {
|
|||
return this.#gerarUrl("deletar-registros")
|
||||
}
|
||||
|
||||
rotaConsultarSerie(tipoVisao: keyof typeof visoes | ":tipoVisao") {
|
||||
rotaConsultarSerie(tipoVisao: keyof typeof visoes_pilao | ":tipoVisao") {
|
||||
return this.#gerarUrl("consultar-serie", tipoVisao)
|
||||
}
|
||||
|
||||
rotaIframeSerie(tipoVisao: keyof typeof visoes | ":tipoVisao") {
|
||||
rotaIframeSerie(tipoVisao: keyof typeof visoes_pilao | ":tipoVisao") {
|
||||
const rota = `${PREFIXO_PILAO}/consultar-serie/${this.#produto}/${this.#conta}/${tipoVisao}`
|
||||
const url = `${this.baseUrlSite}${rota}`
|
||||
return { rota, url }
|
||||
|
|
@ -219,9 +220,9 @@ class ClassPilao {
|
|||
return respostaComuns.valor(true)
|
||||
}
|
||||
|
||||
serieConsultar<T extends keyof typeof visoes>(
|
||||
serieConsultar<T extends keyof typeof visoes_pilao>(
|
||||
tipoVisao: T,
|
||||
parametros: z.infer<(typeof visoes)[T]>,
|
||||
parametros: z.infer<(typeof visoes_pilao)[T]>,
|
||||
) {
|
||||
const dados = async (): Promise<
|
||||
tipoResposta<tipoRetornoSerieconsulta<T>>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
import type { z } from "zod"
|
||||
import type { visoes } from "../visoes"
|
||||
import type { visoes_pilao } from "../visoes/listaDeVisoes"
|
||||
|
||||
export type tipoConstrutorPilao = { produto: string; conta: string }
|
||||
|
||||
export type tipoRetornoSerieconsulta<T extends keyof typeof visoes> = {
|
||||
export type tipoRetornoSerieconsulta<T extends keyof typeof visoes_pilao> = {
|
||||
registros: any[]
|
||||
legenda: string
|
||||
serie: z.infer<(typeof visoes)[T]>
|
||||
serie: z.infer<(typeof visoes_pilao)[T]>
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,8 @@ export * from "./Pilao/pilao-api"
|
|||
export * from "./Pilao/tipagem"
|
||||
|
||||
import { z_filtro } from "./_serie_consultar"
|
||||
import { extruturas_de_campos, visoes } from "./visoes"
|
||||
import { extruturas_de_campos } from "./visoes"
|
||||
import { visoes_pilao } from "./visoes/listaDeVisoes"
|
||||
|
||||
export const pPilao = {
|
||||
zp_deletar_registros,
|
||||
|
|
@ -31,7 +32,7 @@ export const pPilao = {
|
|||
operadores_pilao,
|
||||
operadores_permitidos_por_tipo,
|
||||
z_filtro,
|
||||
visoes,
|
||||
...visoes,
|
||||
visoes_pilao,
|
||||
...visoes_pilao,
|
||||
extruturas_de_campos,
|
||||
}
|
||||
|
|
|
|||
16
src/pilao-de-dados/visoes/estrutura_de_campos/index.ts
Normal file
16
src/pilao-de-dados/visoes/estrutura_de_campos/index.ts
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
import type { visoes_pilao } from "../listaDeVisoes"
|
||||
import type { tipo_estrutura_visao_grafico } from "../tipagem"
|
||||
import { z_contagem_em_barra_vertical } from "./z_contagem_em_barra_vertical"
|
||||
import { z_contagem_em_pizza } from "./z_contagem_em_pizza"
|
||||
import { z_soma_em_barra_vertical } from "./z_soma_em_barra_vertical"
|
||||
import { z_tabela } from "./z_tabela"
|
||||
|
||||
/** Cria a estrutura de campos para insersão de dados */
|
||||
export const extruturas_de_campos: {
|
||||
[T in keyof typeof visoes_pilao]: tipo_estrutura_visao_grafico<T>
|
||||
} = {
|
||||
z_contagem_em_barra_vertical,
|
||||
z_contagem_em_pizza,
|
||||
z_soma_em_barra_vertical,
|
||||
z_tabela,
|
||||
}
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
// usar describe para definir o tipo de campo para render do componente
|
||||
|
||||
import type { tipo_estrutura_visao_grafico } from "../tipagem"
|
||||
|
||||
/** Cria a estrutura de campos para insersão de dados */
|
||||
export const z_contagem_em_barra_vertical: tipo_estrutura_visao_grafico<"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 },
|
||||
},
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
// usar describe para definir o tipo de campo para render do componente
|
||||
|
||||
import type { tipo_estrutura_visao_grafico } from "../tipagem"
|
||||
|
||||
/** Cria a estrutura de campos para insersão de dados */
|
||||
export const z_contagem_em_pizza: tipo_estrutura_visao_grafico<"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 },
|
||||
},
|
||||
}
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
// usar describe para definir o tipo de campo para render do componente
|
||||
|
||||
import type { tipo_estrutura_visao_grafico } from "../tipagem"
|
||||
|
||||
/** Cria a estrutura de campos para insersão de dados */
|
||||
export const z_soma_em_barra_vertical: tipo_estrutura_visao_grafico<"z_soma_em_barra_vertical"> =
|
||||
{
|
||||
visao: "z_soma_em_barra_vertical",
|
||||
rotulo: "Soma em Barra Vertical",
|
||||
tabela: ({ tabela }) => tabela,
|
||||
descricao: ({
|
||||
descricao_pelo_usuario,
|
||||
colanuEixoX,
|
||||
filtros,
|
||||
colunaAgrupamento,
|
||||
colunaSoma,
|
||||
}) => {
|
||||
if (String(descricao_pelo_usuario || "").trim())
|
||||
return String(descricao_pelo_usuario || "").trim()
|
||||
|
||||
return `Soma de ${colunaSoma} 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 },
|
||||
|
||||
colunaSoma: {
|
||||
rotulo: "Coluna de Somatória",
|
||||
tipo_campo: "coluna",
|
||||
order: 2,
|
||||
},
|
||||
|
||||
colanuEixoX: {
|
||||
rotulo: "Coluna do Eixo X",
|
||||
tipo_campo: "coluna",
|
||||
order: 3,
|
||||
},
|
||||
colunaAgrupamento: {
|
||||
rotulo: "Colunas de Agrupamento",
|
||||
tipo_campo: "lista_colunas",
|
||||
order: 4,
|
||||
},
|
||||
descricao_pelo_usuario: {
|
||||
rotulo: "Descrição (opcional)",
|
||||
tipo_campo: "texto",
|
||||
order: 5,
|
||||
},
|
||||
filtros: { rotulo: "Filtros", tipo_campo: "lista_filtros", order: 5 },
|
||||
},
|
||||
}
|
||||
45
src/pilao-de-dados/visoes/estrutura_de_campos/z_tabela.ts
Normal file
45
src/pilao-de-dados/visoes/estrutura_de_campos/z_tabela.ts
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
// usar describe para definir o tipo de campo para render do componente
|
||||
|
||||
import type { tipo_estrutura_visao_grafico } from "../tipagem"
|
||||
|
||||
/** Cria a estrutura de campos para insersão de dados */
|
||||
export const z_tabela: tipo_estrutura_visao_grafico<"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 },
|
||||
},
|
||||
}
|
||||
|
|
@ -1,253 +1 @@
|
|||
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_soma_em_barra_vertical = z.object({
|
||||
tabela: z.string(),
|
||||
colanuEixoX: z.string(),
|
||||
colunaSoma: 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,
|
||||
z_soma_em_barra_vertical,
|
||||
}
|
||||
|
||||
/** Cria a estrutura de campos para insersão de dados */
|
||||
export const extruturas_de_campos: {
|
||||
[z in keyof typeof visoes]: {
|
||||
/** Nome da Visão */
|
||||
visao: z
|
||||
/** Rotulo */
|
||||
rotulo: string
|
||||
/** Retorna a tabela Referente ao Registro */
|
||||
tabela: (_: z.infer<(typeof visoes)[z]>) => string
|
||||
/** Descrição */
|
||||
descricao: (_: z.infer<(typeof visoes)[z]>) => string
|
||||
/** Lista os campos e suas configurações */
|
||||
campos: {
|
||||
[c in keyof Required<z.infer<(typeof visoes)[z]>>]: {
|
||||
rotulo: string
|
||||
tipo_campo: z.infer<typeof z_tipos_campos>
|
||||
order: number
|
||||
}
|
||||
}
|
||||
}
|
||||
} = {
|
||||
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_soma_em_barra_vertical: {
|
||||
visao: "z_soma_em_barra_vertical",
|
||||
rotulo: "Soma 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 },
|
||||
|
||||
colunaSoma: {
|
||||
rotulo: "Coluna de Somatória",
|
||||
tipo_campo: "coluna",
|
||||
order: 2,
|
||||
},
|
||||
|
||||
colanuEixoX: {
|
||||
rotulo: "Coluna do Eixo X",
|
||||
tipo_campo: "coluna",
|
||||
order: 3,
|
||||
},
|
||||
colunaAgrupamento: {
|
||||
rotulo: "Colunas de Agrupamento",
|
||||
tipo_campo: "lista_colunas",
|
||||
order: 4,
|
||||
},
|
||||
descricao_pelo_usuario: {
|
||||
rotulo: "Descrição (opcional)",
|
||||
tipo_campo: "texto",
|
||||
order: 5,
|
||||
},
|
||||
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 },
|
||||
},
|
||||
},
|
||||
}
|
||||
export * from "./estrutura_de_campos"
|
||||
|
|
|
|||
42
src/pilao-de-dados/visoes/listaDeVisoes.ts
Normal file
42
src/pilao-de-dados/visoes/listaDeVisoes.ts
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
import { z } from "zod"
|
||||
import { z_filtro } from "../_serie_consultar"
|
||||
|
||||
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_soma_em_barra_vertical = z.object({
|
||||
tabela: z.string(),
|
||||
colanuEixoX: z.string(),
|
||||
colunaSoma: 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_pilao = {
|
||||
z_contagem_em_barra_vertical,
|
||||
z_contagem_em_pizza,
|
||||
z_tabela,
|
||||
z_soma_em_barra_vertical,
|
||||
}
|
||||
31
src/pilao-de-dados/visoes/tipagem.ts
Normal file
31
src/pilao-de-dados/visoes/tipagem.ts
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
import { z } from "zod"
|
||||
import type { visoes_pilao } from "./listaDeVisoes"
|
||||
|
||||
export const z_tipos_campos_reg_grafico = z.enum([
|
||||
"tabela",
|
||||
"coluna",
|
||||
"texto",
|
||||
"lista_colunas",
|
||||
"lista_filtros",
|
||||
"ordem",
|
||||
])
|
||||
|
||||
export type tipo_estrutura_visao_grafico<T extends keyof typeof visoes_pilao> =
|
||||
{
|
||||
/** Nome da Visão */
|
||||
visao: T
|
||||
/** Rotulo */
|
||||
rotulo: string
|
||||
/** Retorna a tabela Referente ao Registro */
|
||||
tabela: (_: z.infer<(typeof visoes_pilao)[T]>) => string
|
||||
/** Descrição */
|
||||
descricao: (_: z.infer<(typeof visoes_pilao)[T]>) => string
|
||||
/** Lista os campos e suas configurações */
|
||||
campos: {
|
||||
[c in keyof Required<z.infer<(typeof visoes_pilao)[T]>>]: {
|
||||
rotulo: string
|
||||
tipo_campo: z.infer<typeof z_tipos_campos_reg_grafico>
|
||||
order: number
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue