diff --git a/src/app/dre-filial/teste.tsx b/src/app/dre-filial/teste.tsx index c95f67e..76dc341 100644 --- a/src/app/dre-filial/teste.tsx +++ b/src/app/dre-filial/teste.tsx @@ -602,12 +602,8 @@ export default function Teste() { const calcularValoresPorMesPorFilial = React.useCallback((items: DREItem[]): Record> => { const valoresPorMesPorFilial: Record> = {}; - // Usar filiais selecionadas se houver filtros aplicados, senão usar todas as opções disponíveis - const filiaisDisponiveis = (filtrosAplicados && filiaisSelecionadas.length > 0) - ? filiaisSelecionadas - : (opcoesFiliais.length > 0 - ? opcoesFiliais - : [...new Set(items.map(item => item.filial || item.codfilial).filter(Boolean))] as string[]); + // Extrair filiais únicas dos próprios items para evitar dependência de arrays externos + const filiaisDisponiveis = [...new Set(items.map(item => item.filial || item.codfilial).filter(Boolean))] as string[]; mesesDisponiveis.forEach(mes => { valoresPorMesPorFilial[mes] = {}; @@ -619,7 +615,7 @@ export default function Teste() { items.forEach((item) => { const anoMes = item.data_competencia; const filial = item.filial || item.codfilial || ""; - if (anoMes && valoresPorMesPorFilial[anoMes] && filial && filiaisDisponiveis.includes(filial)) { + if (anoMes && valoresPorMesPorFilial[anoMes] && filial) { if (!valoresPorMesPorFilial[anoMes][filial]) { valoresPorMesPorFilial[anoMes][filial] = 0; } @@ -628,7 +624,7 @@ export default function Teste() { }); return valoresPorMesPorFilial; - }, [mesesDisponiveis, opcoesFiliais, filtrosAplicados, filiaisSelecionadas]); + }, [mesesDisponiveis]); // Memoizar valores do grupo 01 por mês para evitar recálculos repetidos const valoresGrupo01PorMesMemo = React.useMemo(() => { @@ -647,12 +643,8 @@ export default function Teste() { // Memoizar valores do grupo 01 por mês e por filial const valoresGrupo01PorMesPorFilialMemo = React.useMemo(() => { const valores: Record> = {}; - // Usar filiais selecionadas se houver filtros aplicados, senão usar todas as opções disponíveis - const filiaisDisponiveis = (filtrosAplicados && filiaisSelecionadas.length > 0) - ? filiaisSelecionadas - : (opcoesFiliais.length > 0 - ? opcoesFiliais - : [...new Set(data.map(item => item.filial || item.codfilial).filter(Boolean))] as string[]); + // Extrair filiais únicas dos próprios dados para evitar dependência de arrays externos + const filiaisDisponiveis = [...new Set(data.map(item => item.filial || item.codfilial).filter(Boolean))] as string[]; mesesDisponiveis.forEach(mes => { valores[mes] = {}; @@ -667,7 +659,7 @@ export default function Teste() { }); }); return valores; - }, [data, mesesDisponiveis, opcoesFiliais, filtrosAplicados, filiaisSelecionadas]); + }, [data, mesesDisponiveis]); // Função para calcular percentuais baseado no CODGRUPO 01 (FATURAMENTO LÍQUIDO) const calcularPercentuaisPorMes = React.useCallback(( @@ -706,12 +698,9 @@ export default function Teste() { ): Record> => { const percentuaisPorMesPorFilial: Record> = {}; - // Usar filiais selecionadas se houver filtros aplicados, senão usar todas as opções disponíveis - const filiaisDisponiveis = (filtrosAplicados && filiaisSelecionadas.length > 0) - ? filiaisSelecionadas - : (opcoesFiliais.length > 0 - ? opcoesFiliais - : Object.keys(valoresPorMesPorFilial[mesesDisponiveis[0] || ""] || {})); + // Extrair filiais únicas dos próprios valoresPorMesPorFilial para evitar dependência de arrays externos + const primeiroMes = mesesDisponiveis[0] || ""; + const filiaisDisponiveis = Object.keys(valoresPorMesPorFilial[primeiroMes] || {}); // Se for CODGRUPO 01, sempre retornar 100% para todas as filiais if (codigoGrupo === "01") { @@ -740,7 +729,7 @@ export default function Teste() { }); return percentuaisPorMesPorFilial; - }, [mesesDisponiveis, opcoesFiliais, valoresGrupo01PorMesPorFilialMemo, filtrosAplicados, filiaisSelecionadas]); + }, [mesesDisponiveis, valoresGrupo01PorMesPorFilialMemo]); // Memoizar total do grupo 01 const totalGrupo01Memo = React.useMemo(() => { @@ -896,9 +885,16 @@ export default function Teste() { const valoresGrupo01PorFilial = gruposPorCodigo["01"] ? calcularValoresPorMesPorFilial(gruposPorCodigo["01"]) : {}; const valoresGrupo02PorFilial = gruposPorCodigo["02"] ? calcularValoresPorMesPorFilial(gruposPorCodigo["02"]) : {}; + // Extrair filiais únicas dos valores calculados + const primeiroMes = mesesDisponiveis[0] || ""; + const filiaisDisponiveis = [...new Set([ + ...Object.keys(valoresGrupo01PorFilial[primeiroMes] || {}), + ...Object.keys(valoresGrupo02PorFilial[primeiroMes] || {}) + ])]; + mesesDisponiveis.forEach(mes => { valoresMargemPorMesPorFilial[mes] = {}; - opcoesFiliais.forEach(filial => { + filiaisDisponiveis.forEach(filial => { const valor01 = valoresGrupo01PorFilial[mes]?.[filial] || 0; const valor02 = valoresGrupo02PorFilial[mes]?.[filial] || 0; valoresMargemPorMesPorFilial[mes][filial] = valor01 - valor02; @@ -927,7 +923,7 @@ export default function Teste() { }); return rows; - }, [data, mesesDisponiveis, expandedGrupos, opcoesFiliais, filtrosAplicados, filiaisSelecionadas, calcularValoresPorMes, calcularValoresPorMesPorFilial, calcularPercentuaisPorMes, calcularPercentuaisPorMesPorFilial, calcularPercentualTotal]); + }, [data, mesesDisponiveis, expandedGrupos, calcularValoresPorMes, calcularValoresPorMesPorFilial, calcularPercentuaisPorMes, calcularPercentuaisPorMesPorFilial, calcularPercentualTotal]); const getRowStyle = React.useCallback((row: HierarchicalRow) => { const baseStyle =