fix: correção multi filtros
This commit is contained in:
parent
1de1031fbc
commit
ab348845ea
|
|
@ -170,14 +170,21 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) {
|
|||
|
||||
const filterFns = React.useMemo(
|
||||
() => ({
|
||||
advancedText: (row: any, columnId: string, filter: any) => {
|
||||
if (!filter) return true;
|
||||
advancedText: (row: any, columnId: string, filters: any[]) => {
|
||||
if (!filters || filters.length === 0) return true;
|
||||
|
||||
// Se veio um único filtro (objeto), transforma em array
|
||||
const conds = Array.isArray(filters) ? filters : [filters];
|
||||
|
||||
// A coluna deve atender a todas as condições aplicáveis a ela
|
||||
return conds.every((filter) => {
|
||||
const raw = row.getValue(columnId);
|
||||
const v = raw == null ? "" : String(raw);
|
||||
const op = filter.operator;
|
||||
const q = (filter.value ?? "").toString();
|
||||
const a = v.toLowerCase();
|
||||
const b = q.toLowerCase();
|
||||
|
||||
switch (op) {
|
||||
case "contains":
|
||||
return a.includes(b);
|
||||
|
|
@ -194,11 +201,13 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) {
|
|||
default:
|
||||
return true;
|
||||
}
|
||||
});
|
||||
},
|
||||
}),
|
||||
[]
|
||||
);
|
||||
|
||||
|
||||
const table = useReactTable({
|
||||
data,
|
||||
columns,
|
||||
|
|
@ -232,13 +241,23 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) {
|
|||
}, []);
|
||||
|
||||
const applyFilters = () => {
|
||||
const validConditions = conditions.filter((c) =>
|
||||
c.column && (c.operator === "empty" || c.operator === "notEmpty" || (c.value ?? "") !== "")
|
||||
);
|
||||
// Agrupar múltiplas condições por coluna
|
||||
const grouped: Record<string, any[]> = {};
|
||||
|
||||
const filters = validConditions.map((c) => ({
|
||||
id: c.column,
|
||||
value: { operator: c.operator, value: c.value }
|
||||
conditions.forEach((c) => {
|
||||
if (
|
||||
c.column &&
|
||||
(c.operator === "empty" || c.operator === "notEmpty" || (c.value ?? "") !== "")
|
||||
) {
|
||||
if (!grouped[c.column]) grouped[c.column] = [];
|
||||
grouped[c.column].push({ operator: c.operator, value: c.value });
|
||||
}
|
||||
});
|
||||
|
||||
// Converte em formato aceito pelo TanStack
|
||||
const filters = Object.keys(grouped).map((col) => ({
|
||||
id: col,
|
||||
value: grouped[col],
|
||||
}));
|
||||
|
||||
setColumnFilters(filters);
|
||||
|
|
@ -457,7 +476,7 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) {
|
|||
</div>
|
||||
|
||||
{data.length > 0 && (
|
||||
<div className="mt-6 p-6 bg-gradient-to-r from-blue-50 to-indigo-50 border border-blue-200 rounded-xl shadow-sm">
|
||||
<div className="mt-1 p-6 bg-gradient-to-r from-blue-50 to-indigo-50 border border-blue-200 rounded-xl shadow-sm">
|
||||
<div className="flex justify-between items-center">
|
||||
<div className="flex items-center gap-4">
|
||||
<div className="w-12 h-12 bg-gradient-to-r from-blue-600 to-indigo-600 rounded-lg flex items-center justify-center">
|
||||
|
|
|
|||
Loading…
Reference in New Issue