ajustes na tabela de consulta

This commit is contained in:
Luiz Silva 2026-06-01 13:13:32 -03:00
parent aea3da6585
commit 1446d6225b
78 changed files with 17921 additions and 17580 deletions

View file

@ -3,6 +3,26 @@ import type { tipoCondicaoFiltroDelta, zFiltroDelta } from "p-comuns"
import type z from "zod"
import { _dados_empreendedores, type tipoEmpreendedores } from "./dados"
/**
* UDF registrada no Alasql para suportar o operador ∩ (interseção).
* Verifica se dois arrays possuem ao menos um elemento em comum.
*/
alasql.fn.arr_intersecta = (coluna: unknown, filtro: unknown): boolean => {
if (!Array.isArray(coluna) || !Array.isArray(filtro)) return false
return coluna.some((item) => filtro.includes(item))
}
/**
* UDF universal para o operador "in".
* - Coluna escalar: verifica se o valor está na lista de filtro (IN clássico).
* - Coluna array: verifica se há interseção entre o array da coluna e a lista de filtro.
*/
alasql.fn.arr_in = (coluna: unknown, filtro: unknown): boolean => {
const lista = Array.isArray(filtro) ? filtro : [filtro]
if (Array.isArray(coluna)) return coluna.some((item) => lista.includes(item))
return lista.includes(coluna)
}
const zCondicaoFiltroDeltaParaQuery = ({
condicao,
}: {
@ -39,14 +59,21 @@ const zCondicaoFiltroDeltaParaQuery = ({
? condicao.valor
: `%${condicao.valor}%`
} else if (condicao.operador === "in") {
// Alasql usa @(?) para arrays. Porém, o passo 2 substitui {id} por ?.
// O que resultará em @(?).
retorno.sql = `${coluna} IN @(${condicao.id})`
// UDF universal: funciona tanto para colunas escalares (IN clássico)
// quanto para colunas array (interseção).
retorno.sql = `arr_in(${coluna}, ${condicao.id}) = TRUE`
retorno.parametro[condicao.id] = Array.isArray(condicao.valor)
? condicao.valor
: String(condicao.valor)
.split(",")
.map((s) => s.trim())
} else if (condicao.operador === "∩") {
// Interseção: verifica se o array da coluna contém ao menos um dos valores informados.
// Como o Alasql não suporta nativamente comparação de arrays, usamos uma UDF.
retorno.sql = `arr_intersecta(${coluna}, ${condicao.id}) = TRUE`
retorno.parametro[condicao.id] = Array.isArray(condicao.valor)
? condicao.valor
: [condicao.valor]
} else {
throw new Error(`Operador inválido: ${condicao.operador as string}`)
}

View file

@ -1,8 +1,13 @@
import z from "zod"
let _id = 0
/** Gera um ID incremental único para uso no seed de dados do playground. Não usar em produção. */
export const gerarId = () => `item-${_id++}`
export const zAreaAtuacao = z.enum([
"mineracao",
"agro",
"turismo",
"tecnologia",
"educacao",
"saude",
])
/** Schema Zod do registro de empreendedor — usado para validação e inferência de tipo no playground. */
export const zEmpreendedores = z.object({
@ -14,237 +19,21 @@ export const zEmpreendedores = z.object({
telefone: z.string(),
faturamento: z.number(),
peso_kg: z.number(),
areas_atuacao: z.array(
z.enum(["mineracao", "agro", "turismo", "tecnologia", "educacao", "saude"]),
),
ativo: z.boolean(),
areas_atuacao: z.array(zAreaAtuacao),
criado_em: z.string(),
atualizado_em: z.string(),
})
export const AreaAtuacaoDetalhes: Record<z.infer<typeof zAreaAtuacao>, string> = {
mineracao: "Mineração",
agro: "Agropecuária",
turismo: "Turismo",
tecnologia: "Tecnologia",
educacao: "Educação",
saude: "Saúde",
}
export type tipoEmpreendedores = z.infer<typeof zEmpreendedores>
// == SIMULAÇÃO DE API (CRUD) ==
// Dados isolados (simulando um banco de dados no servidor)
export const _dados_empreendedores: tipoEmpreendedores[] = [
{
codigo: gerarId(),
empreendedor: "Maria Silva",
empreendimento: "Doces da Maria",
documento: "12.345.678/0001-90",
email: "contato.comercial.super.longo@doces-da-maria-exemplo-muito-grande.com.br",
telefone: "(11) 91234-5678",
faturamento: 12500.5,
peso_kg: 12.4,
areas_atuacao: ["agro", "turismo"],
criado_em: "2026-01-09T16:15:00Z",
atualizado_em: "2026-01-29T15:30:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "João Pereira",
empreendimento: "Café Peregrino",
documento: "98.765.432/0001-12",
email: "contato@cafeperegrino.com",
telefone: "(11) 93456-7810",
faturamento: 8000,
peso_kg: 6.2,
areas_atuacao: ["tecnologia", "agro"],
criado_em: "2026-01-02T10:00:00-03:00",
atualizado_em: "2026-01-20T08:10:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Ana Costa",
empreendimento: "Flor de Sal Gastronomia",
documento: "45.678.912/0001-55",
email: "ana@flordesal.com",
telefone: "(21) 99876-5432",
faturamento: 3200.75,
peso_kg: 4.8,
areas_atuacao: ["educacao"],
criado_em: "2025-12-10T09:30:00-03:00",
atualizado_em: "2026-01-15T19:20:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Rafael Lima",
empreendimento: "Tech Agro Solutions",
documento: "07.654.321/0001-00",
email: "rafael@techagro.com",
telefone: "(31) 94567-8899",
faturamento: 15999.9,
peso_kg: 9.1,
areas_atuacao: ["tecnologia"],
criado_em: "2026-01-12T12:00:00-03:00",
atualizado_em: "2026-01-28T11:00:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Juliana Torres",
empreendimento: "Torres Moda Sustentável",
documento: "33.210.987/0001-44",
email: "juliana@torresmoda.com",
telefone: "(71) 97766-5544",
faturamento: 4500,
peso_kg: 3.3,
areas_atuacao: ["turismo", "agro"],
criado_em: "2026-01-01T00:00:00Z",
atualizado_em: "2026-01-10T13:45:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Marcos Vieira",
empreendimento: "Padaria Pão Quentinho",
documento: "21.109.876/0001-32",
email: "marcos@paoquentinho.com",
telefone: "(48) 99654-3210",
faturamento: 2200.4,
peso_kg: 15.7,
areas_atuacao: ["saude"],
criado_em: "2026-01-05T07:25:00-03:00",
atualizado_em: "2026-01-23T20:15:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Bianca Rocha",
empreendimento: "Studio Beleza em Casa",
documento: "54.321.098/0001-21",
email: "contato@belezaemcasa.com",
telefone: "(85) 98877-1122",
faturamento: 990,
peso_kg: 1.9,
areas_atuacao: ["agro", "tecnologia"],
criado_em: "2026-01-03T14:00:00-03:00",
atualizado_em: "2026-01-29T09:00:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Caio Albuquerque",
empreendimento: "Albuquerque Engenharia Verde",
documento: "65.432.109/0001-09",
email: "caio@engenhariaverde.com",
telefone: "(61) 98123-4567",
faturamento: 100000,
peso_kg: 21.3,
areas_atuacao: ["mineracao"],
criado_em: "2025-11-18T16:10:00-03:00",
atualizado_em: "2026-01-25T10:40:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Fernanda Almeida",
empreendimento: "Faz Bem Produtos Naturais",
documento: "87.654.210/0001-98",
email: "fernanda@fazbem.com",
telefone: "(41) 99777-6655",
faturamento: 5600.2,
peso_kg: 8.6,
areas_atuacao: ["mineracao", "turismo"],
criado_em: "2026-01-08T12:12:00-03:00",
atualizado_em: "2026-01-21T17:55:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Gabriel Martins",
empreendimento: "Martins Tech Repair",
documento: "19.876.543/0001-76",
email: "suporte@martinstech.com",
telefone: "(19) 98888-9090",
faturamento: 7550,
peso_kg: 7.7,
areas_atuacao: ["mineracao", "turismo"],
criado_em: "2026-01-11T11:00:00-03:00",
atualizado_em: "2026-01-18T11:30:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Helena Duarte",
empreendimento: "Ateliê Costura Criativa",
documento: "23.456.789/0001-65",
email: "helena@costuracriativa.com",
telefone: "(51) 98765-4433",
faturamento: 2700,
peso_kg: 2.5,
areas_atuacao: ["turismo", "mineracao"],
criado_em: "2026-01-07T08:00:00-03:00",
atualizado_em: "2026-01-16T14:10:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Igor Santos",
empreendimento: "Santos Consultoria Financeira",
documento: "43.219.876/0001-54",
email: "igor@santosconsultoria.com",
telefone: "(31) 99332-1100",
faturamento: 12000,
peso_kg: 5.4,
areas_atuacao: ["saude"],
criado_em: "2026-01-06T10:30:00-03:00",
atualizado_em: "2026-01-22T18:30:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Jéssica Nunes",
empreendimento: "Nunes Eventos & Decoração",
documento: "09.876.543/0001-33",
email: "jessica@nunesdecora.com",
telefone: "(62) 99922-3344",
faturamento: 3300.1,
peso_kg: 4.1,
areas_atuacao: ["turismo"],
criado_em: "2026-01-04T13:30:00-03:00",
atualizado_em: "2026-01-26T09:20:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Leonardo Prado",
empreendimento: "Prado Bike Courier",
documento: "72.345.098/0001-27",
email: "contato@pradobike.com",
telefone: "(47) 98444-6677",
faturamento: 4100,
peso_kg: 6.8,
areas_atuacao: ["mineracao"],
criado_em: "2026-01-02T18:40:00-03:00",
atualizado_em: "2026-01-27T12:00:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Marina Lopes",
empreendimento: "Lopes Design Digital",
documento: "56.789.012/0001-11",
email: "marina@lopesdesign.com",
telefone: "(27) 99911-2233",
faturamento: 2100,
peso_kg: 3.7,
areas_atuacao: ["agro"],
criado_em: "2026-01-09T09:00:00-03:00",
atualizado_em: "2026-01-19T15:35:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Nicolas Teixeira",
empreendimento: "QualiVida Fitness",
documento: "34.567.890/0001-02",
email: "nicolas@qualivida.com",
telefone: "(92) 99456-7788",
faturamento: 8600.9,
peso_kg: 11.2,
areas_atuacao: ["agro", "saude"],
criado_em: "2026-01-12T19:15:00-03:00",
atualizado_em: "2026-01-29T10:50:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Olívia Azevedo",
empreendimento: "Azevedo Pet Care",
documento: "88.901.234/0001-45",
email: "olivia@petcare.com",
telefone: "(16) 99788-6655",
faturamento: 1900.3,
peso_kg: 2.2,
areas_atuacao: ["agro"],
criado_em: "2026-01-10T15:00:00-03:00",
atualizado_em: "2026-01-14T16:00:00-03:00",
},
]
export { _dados_empreendedores } from "./dadosSeed"

View file

@ -0,0 +1,249 @@
/** dadosSeed — dados de seed (mock) para o playground da EliTabela. */
import type { tipoEmpreendedores } from "./dados"
let _id = 0
/** Gera um ID incremental único para uso no seed de dados do playground. Não usar em produção. */
export const gerarId = () => `item-${_id++}`
// == SIMULAÇÃO DE API (CRUD) ==
// Dados isolados (simulando um banco de dados no servidor)
export const _dados_empreendedores: tipoEmpreendedores[] = [
{
codigo: gerarId(),
empreendedor: "Maria Silva",
empreendimento: "Doces da Maria",
documento: "12.345.678/0001-90",
email: "contato.comercial.super.longo@doces-da-maria-exemplo-muito-grande.com.br",
telefone: "(11) 91234-5678",
faturamento: 12500.5,
peso_kg: 12.4,
ativo: true,
areas_atuacao: ["agro", "turismo"],
criado_em: "2026-01-09T16:15:00Z",
atualizado_em: "2026-01-29T15:30:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "João Pereira",
empreendimento: "Café Peregrino",
documento: "98.765.432/0001-12",
email: "contato@cafeperegrino.com",
telefone: "(11) 93456-7810",
faturamento: 8000,
peso_kg: 6.2,
ativo: true,
areas_atuacao: ["tecnologia", "agro"],
criado_em: "2026-01-02T10:00:00-03:00",
atualizado_em: "2026-01-20T08:10:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Ana Costa",
empreendimento: "Flor de Sal Gastronomia",
documento: "45.678.912/0001-55",
email: "ana@flordesal.com",
telefone: "(21) 99876-5432",
faturamento: 3200.75,
peso_kg: 4.8,
ativo: false,
areas_atuacao: ["educacao"],
criado_em: "2025-12-10T09:30:00-03:00",
atualizado_em: "2026-01-15T19:20:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Rafael Lima",
empreendimento: "Tech Agro Solutions",
documento: "07.654.321/0001-00",
email: "rafael@techagro.com",
telefone: "(31) 94567-8899",
faturamento: 15999.9,
peso_kg: 9.1,
ativo: true,
areas_atuacao: ["tecnologia"],
criado_em: "2026-01-12T12:00:00-03:00",
atualizado_em: "2026-01-28T11:00:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Juliana Torres",
empreendimento: "Torres Moda Sustentável",
documento: "33.210.987/0001-44",
email: "juliana@torresmoda.com",
telefone: "(71) 97766-5544",
faturamento: 4500,
peso_kg: 3.3,
ativo: true,
areas_atuacao: ["turismo", "agro"],
criado_em: "2026-01-01T00:00:00Z",
atualizado_em: "2026-01-10T13:45:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Marcos Vieira",
empreendimento: "Padaria Pão Quentinho",
documento: "21.109.876/0001-32",
email: "marcos@paoquentinho.com",
telefone: "(48) 99654-3210",
faturamento: 2200.4,
peso_kg: 15.7,
ativo: false,
areas_atuacao: ["saude"],
criado_em: "2026-01-05T07:25:00-03:00",
atualizado_em: "2026-01-23T20:15:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Bianca Rocha",
empreendimento: "Studio Beleza em Casa",
documento: "54.321.098/0001-21",
email: "contato@belezaemcasa.com",
telefone: "(85) 98877-1122",
faturamento: 990,
peso_kg: 1.9,
ativo: true,
areas_atuacao: ["agro", "tecnologia"],
criado_em: "2026-01-03T14:00:00-03:00",
atualizado_em: "2026-01-29T09:00:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Caio Albuquerque",
empreendimento: "Albuquerque Engenharia Verde",
documento: "65.432.109/0001-09",
email: "caio@engenhariaverde.com",
telefone: "(61) 98123-4567",
faturamento: 100000,
peso_kg: 21.3,
ativo: true,
areas_atuacao: ["mineracao"],
criado_em: "2025-11-18T16:10:00-03:00",
atualizado_em: "2026-01-25T10:40:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Fernanda Almeida",
empreendimento: "Faz Bem Produtos Naturais",
documento: "87.654.210/0001-98",
email: "fernanda@fazbem.com",
telefone: "(41) 99777-6655",
faturamento: 5600.2,
peso_kg: 8.6,
ativo: false,
areas_atuacao: ["mineracao", "turismo"],
criado_em: "2026-01-08T12:12:00-03:00",
atualizado_em: "2026-01-21T17:55:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Gabriel Martins",
empreendimento: "Martins Tech Repair",
documento: "19.876.543/0001-76",
email: "suporte@martinstech.com",
telefone: "(19) 98888-9090",
faturamento: 7550,
peso_kg: 7.7,
ativo: true,
areas_atuacao: ["mineracao", "turismo"],
criado_em: "2026-01-11T11:00:00-03:00",
atualizado_em: "2026-01-18T11:30:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Helena Duarte",
empreendimento: "Ateliê Costura Criativa",
documento: "23.456.789/0001-65",
email: "helena@costuracriativa.com",
telefone: "(51) 98765-4433",
faturamento: 2700,
peso_kg: 2.5,
ativo: true,
areas_atuacao: ["turismo", "mineracao"],
criado_em: "2026-01-07T08:00:00-03:00",
atualizado_em: "2026-01-16T14:10:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Igor Santos",
empreendimento: "Santos Consultoria Financeira",
documento: "43.219.876/0001-54",
email: "igor@santosconsultoria.com",
telefone: "(31) 99332-1100",
faturamento: 12000,
peso_kg: 5.4,
ativo: false,
areas_atuacao: ["saude"],
criado_em: "2026-01-06T10:30:00-03:00",
atualizado_em: "2026-01-22T18:30:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Jéssica Nunes",
empreendimento: "Nunes Eventos & Decoração",
documento: "09.876.543/0001-33",
email: "jessica@nunesdecora.com",
telefone: "(62) 99922-3344",
faturamento: 3300.1,
peso_kg: 4.1,
ativo: true,
areas_atuacao: ["turismo"],
criado_em: "2026-01-04T13:30:00-03:00",
atualizado_em: "2026-01-26T09:20:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Leonardo Prado",
empreendimento: "Prado Bike Courier",
documento: "72.345.098/0001-27",
email: "contato@pradobike.com",
telefone: "(47) 98444-6677",
faturamento: 4100,
peso_kg: 6.8,
ativo: true,
areas_atuacao: ["mineracao"],
criado_em: "2026-01-02T18:40:00-03:00",
atualizado_em: "2026-01-27T12:00:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Marina Lopes",
empreendimento: "Lopes Design Digital",
documento: "56.789.012/0001-11",
email: "marina@lopesdesign.com",
telefone: "(27) 99911-2233",
faturamento: 2100,
peso_kg: 3.7,
ativo: false,
areas_atuacao: ["agro"],
criado_em: "2026-01-09T09:00:00-03:00",
atualizado_em: "2026-01-19T15:35:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Nicolas Teixeira",
empreendimento: "QualiVida Fitness",
documento: "34.567.890/0001-02",
email: "nicolas@qualivida.com",
telefone: "(92) 99456-7788",
faturamento: 8600.9,
peso_kg: 11.2,
ativo: true,
areas_atuacao: ["agro", "saude"],
criado_em: "2026-01-12T19:15:00-03:00",
atualizado_em: "2026-01-29T10:50:00-03:00",
},
{
codigo: gerarId(),
empreendedor: "Olívia Azevedo",
empreendimento: "Azevedo Pet Care",
documento: "88.901.234/0001-45",
email: "olivia@petcare.com",
telefone: "(16) 99788-6655",
faturamento: 1900.3,
peso_kg: 2.2,
ativo: true,
areas_atuacao: ["agro"],
criado_em: "2026-01-10T15:00:00-03:00",
atualizado_em: "2026-01-14T16:00:00-03:00",
},
]

View file

@ -39,6 +39,7 @@ const api_criar: tipoFuncaoApiSimulacao<"criar"> = async (dados) => {
telefone: dados.telefone || "(00) 0000-0000",
faturamento: dados.faturamento || 0,
peso_kg: dados.peso_kg || 0,
ativo: dados.ativo ?? true,
areas_atuacao: dados.areas_atuacao || [],
criado_em: new Date().toISOString(),
atualizado_em: new Date().toISOString(),

View file

@ -37,6 +37,7 @@ export function useTabelaPlayground() {
telefone: "",
faturamento: 0,
peso_kg: 0,
ativo: true,
areas_atuacao: [],
})
const erroCadastro = ref<string | undefined>(undefined)
@ -54,6 +55,7 @@ export function useTabelaPlayground() {
telefone: "",
faturamento: 0,
peso_kg: 0,
ativo: true,
areas_atuacao: [],
}
erroCadastro.value = undefined

View file

@ -6,15 +6,22 @@
* @see useTabelaPlayground.ts — composable que consome estas configurações
*/
import { BadgeCheck, Eye, Pencil, Trash2 } from "@lucide/vue"
import { iniciarFiltroDelta } from "p-comuns"
import type { ComponenteEntrada } from "@/componentes/EliEntrada/tiposEntradas"
import type { tipoEliTabelaConsulta } from "@/componentes/EliTabela"
import { celulaTabela } from "@/componentes/EliTabela"
import type { tipoEmpreendedores } from "./api_simulador/dados"
import { AreaAtuacaoDetalhes, type tipoEmpreendedores } from "./api_simulador/dados"
const { criarFiltroDelta } = iniciarFiltroDelta<Extract<keyof tipoEmpreendedores, string>>()
/** Mapeamento de cor por área de atuação para uso nos chips da tabela */
const corAreaAtuacao: Record<tipoEmpreendedores["areas_atuacao"][number], string> = {
mineracao: "#78909C",
agro: "#4CAF50",
turismo: "#FF9800",
tecnologia: "#2196F3",
educacao: "#9C27B0",
saude: "#E91E63",
}
/** Ações por linha usadas nas 3 instâncias de tabela do playground */
export function criarAcoesLinha(
@ -79,6 +86,17 @@ export const colunasTabela: tipoEliTabelaConsulta<tipoEmpreendedores>["colunas"]
coluna_ordem: "telefone",
visivel: true,
},
{
rotulo: "Áreas de Atuação",
celula: (l) =>
celulaTabela("tags", {
opcoes: l.areas_atuacao.map((area) => ({
rotulo: AreaAtuacaoDetalhes[area],
cor: corAreaAtuacao[area],
})),
}),
visivel: true,
},
{
rotulo: "Faturamento",
celula: (l) =>
@ -134,12 +152,7 @@ export const filtrosAvancados: tipoEliTabelaConsulta<tipoEmpreendedores>["filtro
rotulo: "Empreendedor",
filtro: (valor: unknown) => {
if (!valor) return undefined
return criarFiltroDelta({
condicoes: [
{ id: "{c1}", coluna: "empreendedor", operador: "like", valor: valor as string },
],
formula: "{c1}",
})
return { coluna: "empreendedor", operador: "like" as const, valor: valor as string }
},
entrada: ["texto", { rotulo: "Empreendedor" }] as ComponenteEntrada,
},
@ -148,12 +161,7 @@ export const filtrosAvancados: tipoEliTabelaConsulta<tipoEmpreendedores>["filtro
rotulo: "Empreendimento",
filtro: (valor: unknown) => {
if (!valor) return undefined
return criarFiltroDelta({
condicoes: [
{ id: "{c1}", coluna: "empreendimento", operador: "like", valor: valor as string },
],
formula: "{c1}",
})
return { coluna: "empreendimento", operador: "like" as const, valor: valor as string }
},
entrada: ["texto", { rotulo: "Empreendimento" }] as ComponenteEntrada,
},
@ -162,10 +170,7 @@ export const filtrosAvancados: tipoEliTabelaConsulta<tipoEmpreendedores>["filtro
rotulo: "Documento",
filtro: (valor: unknown) => {
if (!valor) return undefined
return criarFiltroDelta({
condicoes: [{ id: "{c1}", coluna: "documento", operador: "like", valor: valor as string }],
formula: "{c1}",
})
return { coluna: "documento", operador: "like" as const, valor: valor as string }
},
entrada: ["texto", { rotulo: "Documento", formato: "cpfCnpj" }] as ComponenteEntrada,
},
@ -174,13 +179,65 @@ export const filtrosAvancados: tipoEliTabelaConsulta<tipoEmpreendedores>["filtro
rotulo: "E-mail",
filtro: (valor: unknown) => {
if (!valor) return undefined
return criarFiltroDelta({
condicoes: [{ id: "{c1}", coluna: "email", operador: "like", valor: valor as string }],
formula: "{c1}",
})
return { coluna: "email", operador: "like" as const, valor: valor as string }
},
entrada: ["texto", { rotulo: "E-mail", formato: "email" }] as ComponenteEntrada,
},
{
chave: "ativo",
rotulo: "Ativo",
filtro: (valor: unknown) => {
return { coluna: "ativo", operador: "=" as const, valor: valor as boolean }
},
entrada: [
"confirmacao",
{ rotulo: "Ativo", rotuloAtivo: "Apenas ativos", rotuloInativo: "Apenas inativos" },
] as ComponenteEntrada,
},
{
chave: "faturamento_min",
rotulo: "Faturamento mínimo",
filtro: (valor: unknown) => {
if (valor === null || valor === undefined) return undefined
return { coluna: "faturamento", operador: ">=" as const, valor: valor as number }
},
entrada: ["numero", { rotulo: "Faturamento mínimo (R$)" }] as ComponenteEntrada,
},
{
chave: "areas_atuacao",
rotulo: "Área de Atuação",
filtro: (valor: unknown) => {
const arr = valor as string[]
if (!arr.length) return undefined
return { coluna: "areas_atuacao", operador: "∩" as const, valor: arr }
},
entrada: [
"selecaoMultipla",
{
rotulo: "Área de Atuação",
limpavel: true,
itens: () =>
Object.entries(AreaAtuacaoDetalhes).map(([chave, rotulo]) => ({ chave, rotulo })),
},
] as ComponenteEntrada,
},
{
chave: "areas_atuacao2",
rotulo: "Área de Atuação (2)",
filtro: (valor: unknown) => {
if (!valor) return undefined
return { coluna: "areas_atuacao", operador: "in" as const, valor }
},
entrada: [
"selecao",
{
rotulo: "Área de Atuação",
limpavel: true,
itens: () =>
Object.entries(AreaAtuacaoDetalhes).map(([chave, rotulo]) => ({ chave, rotulo })),
},
] as ComponenteEntrada,
},
]
/**