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:
@@ -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;
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user