fix: correção da expansão do drill

This commit is contained in:
Alessandro Gonçaalves 2025-10-22 10:12:02 -03:00
parent 4226fa6c76
commit 362d422fce
1 changed files with 53 additions and 47 deletions

View File

@ -1,6 +1,6 @@
"use client";
import { LoaderPinwheel, ChevronDown, ChevronRight, Filter } from "lucide-react";
import { LoaderPinwheel, ChevronDown, ChevronRight, Filter, Maximize2, Minimize2 } from "lucide-react";
import { useEffect, useState } from "react";
import AnaliticoComponent from "./analitico";
import { Button } from "@/components/ui/button";
@ -103,6 +103,7 @@ export default function Teste() {
linhaSelecionada: "", // Adicionar informação da linha selecionada
});
const [linhaSelecionada, setLinhaSelecionada] = useState<string | null>(null);
const [isAllExpanded, setIsAllExpanded] = useState(false);
useEffect(() => {
// Carregar períodos disponíveis da API
@ -350,6 +351,29 @@ export default function Teste() {
setContasSelecionadas([]);
};
const toggleExpandAll = () => {
if (isAllExpanded) {
// Recolher tudo
setExpandedGroups(new Set());
setExpandedSubgrupos(new Set());
setExpandedCentros(new Set());
setIsAllExpanded(false);
} else {
// Expandir todos os grupos usando dados originais
const todosGrupos = [...new Set(data.map(item => item.grupo))];
setExpandedGroups(new Set(todosGrupos));
// Expandir todos os subgrupos usando dados originais
const todosSubgrupos = [...new Set(data.map(item => `${item.grupo}-${item.subgrupo}`))];
setExpandedSubgrupos(new Set(todosSubgrupos));
// Expandir todos os centros de custo usando dados originais (isso também expande as contas automaticamente)
const todosCentros = [...new Set(data.map(item => `${item.grupo}-${item.subgrupo}-${item.centro_custo}`))];
setExpandedCentros(new Set(todosCentros));
setIsAllExpanded(true);
}
};
const limparFiltros = () => {
const agora = new Date();
const anoAtual = agora.getFullYear();
@ -377,6 +401,7 @@ export default function Teste() {
setDadosFiltrados([]);
setFiltrosAplicados(false);
setMesesDisponiveis([]);
setIsAllExpanded(false);
// Recarregar opções e selecionar todos novamente
carregarPeriodosDisponiveis();
@ -888,8 +913,31 @@ export default function Teste() {
</div>
</div>
{/* Botão de Filtro */}
<Sheet open={isFilterOpen} onOpenChange={setIsFilterOpen}>
{/* Controles */}
<div className="flex items-center gap-2">
{/* Botão de Expandir/Recolher */}
<Button
variant="outline"
size="sm"
onClick={toggleExpandAll}
disabled={!filtrosAplicados || hierarchicalData.length === 0}
className="flex items-center gap-2 text-xs h-8 px-3"
>
{isAllExpanded ? (
<>
<Minimize2 className="w-4 h-4" />
Recolher Tudo
</>
) : (
<>
<Maximize2 className="w-4 h-4" />
Expandir Tudo
</>
)}
</Button>
{/* Botão de Filtro */}
<Sheet open={isFilterOpen} onOpenChange={setIsFilterOpen}>
<SheetTrigger asChild>
<Button variant="outline" className="flex items-center gap-2">
<Filter className="w-4 h-4" />
@ -1043,7 +1091,7 @@ export default function Teste() {
Limpar
</Button>
</div>
</div>
</div>
<div className="max-h-32 overflow-y-auto border rounded-md p-1 space-y-1">
{opcoesContas.map(conta => (
<div key={conta} className="flex items-center space-x-1">
@ -1126,6 +1174,7 @@ export default function Teste() {
</SheetFooter>
</SheetContent>
</Sheet>
</div>
</div>
</div>
@ -1208,49 +1257,6 @@ export default function Teste() {
))}
<div className="flex-1 min-w-[120px] text-right">Total</div>
</div>
{/* Botões de controle */}
<div className="flex gap-1 ml-4">
<Button
variant="outline"
size="sm"
onClick={() => {
// Expandir todos os grupos
const todosGrupos = hierarchicalData
.filter(row => row.type === "grupo")
.map(row => row.grupo!);
setExpandedGroups(new Set(todosGrupos));
// Expandir todos os subgrupos
const todosSubgrupos = hierarchicalData
.filter(row => row.type === "subgrupo")
.map(row => `${row.grupo}-${row.subgrupo}`);
setExpandedSubgrupos(new Set(todosSubgrupos));
// Expandir todos os centros de custo
const todosCentros = hierarchicalData
.filter(row => row.type === "centro_custo")
.map(row => `${row.grupo}-${row.subgrupo}-${row.centro_custo}`);
setExpandedCentros(new Set(todosCentros));
}}
className="text-xs h-5 px-2"
>
Expandir Tudo
</Button>
<Button
variant="outline"
size="sm"
onClick={() => {
// Recolher tudo
setExpandedGroups(new Set());
setExpandedSubgrupos(new Set());
setExpandedCentros(new Set());
}}
className="text-xs h-5 px-2"
>
Recolher Tudo
</Button>
</div>
</div>
</div>