feat: add filtering functionality for empresas in dashboard, allowing users to search by name or CNPJ, and enhance UI with clear feedback for no results

This commit is contained in:
2025-12-15 14:34:09 -03:00
parent a5ad843b3e
commit c7b4ea15bd
2 changed files with 76 additions and 9 deletions

View File

@@ -5,15 +5,37 @@ import { getCurrentUserFunction } from './auth';
import type { Id } from './_generated/dataModel';
export const list = query({
args: {},
handler: async (ctx) => {
args: {
query: v.optional(v.string())
},
handler: async (ctx, args) => {
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
recurso: 'empresas',
acao: 'listar'
});
const empresas = await ctx.db.query('empresas').collect();
return empresas;
const term = args.query?.trim();
if (!term) return empresas;
const termLower = term.toLowerCase();
const termDigits = term.replace(/\D/g, '');
return empresas.filter((empresa) => {
const razao = (empresa.razao_social || '').toLowerCase();
const fantasia = (empresa.nome_fantasia || '').toLowerCase();
const cnpjRaw = empresa.cnpj || '';
const cnpjLower = cnpjRaw.toLowerCase();
const cnpjDigits = cnpjRaw.replace(/\D/g, '');
const matchNome = razao.includes(termLower) || fantasia.includes(termLower);
const matchCnpj = termDigits
? cnpjDigits.includes(termDigits)
: cnpjLower.includes(termLower);
return matchNome || matchCnpj;
});
}
});