testes/src_2/features/financeiro-cnab/hooks/useCnabDashboard.js

91 lines
3.0 KiB
JavaScript

import { useState, useEffect, useCallback } from 'react';
import cnabService from '../services/cnabService';
import { useCnabStore } from './useCnabStore';
/**
* Hook customizado para o Dashboard CNAB
*/
export const useCnabDashboard = () => {
const { paymentMode } = useCnabStore();
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
const [selectedRemessa, setSelectedRemessa] = useState(null);
const [remessaDetails, setRemessaDetails] = useState([]);
const [loadingDetails, setLoadingDetails] = useState(false);
const loadData = useCallback(async () => {
setLoading(true);
try {
const result = await cnabService.getDashboardData(paymentMode === 'TED');
setData(result);
} catch (error) {
console.error('Failed to load dashboard data', error);
} finally {
setLoading(false);
}
}, [paymentMode]);
const fetchRemessaDetails = useCallback(async (remessaId) => {
setLoadingDetails(true);
setSelectedRemessa(remessaId);
try {
const details = await cnabService.getRemessaDetails(remessaId);
setRemessaDetails(details);
} catch (error) {
console.error('Failed to load remessa details', error);
} finally {
setLoadingDetails(false);
}
}, []);
const exportRemessa = useCallback(async (remessaId) => {
try {
const isTed = paymentMode === 'TED';
const files = await cnabService.getRemessaFileList(isTed);
// Procura o arquivo que contém o ID da remessa (n_remessa)
const matchedFile = files.find(file => file.includes(remessaId));
if (!matchedFile) {
alert("Arquivo não foi encontrado");
return;
}
const content = await cnabService.getRemessaFileContent(matchedFile, isTed);
// Lógica de geração de RTF (baixar_exel adaptado)
const rtf = `{\\rtf1\\ansi{\\fonttbl{\\f0 Courier New;}}\\f0\\fs20 ${content.replace(/\n/g, "\\line ")} }`;
const blob = new Blob([rtf], { type: "application/rtf" });
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = matchedFile.replace(".docx", ".doc"); // Mantém lógica do original
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
} catch (error) {
console.error('Failed to export remessa', error);
alert("Erro ao exportar arquivo");
}
}, [paymentMode]);
useEffect(() => {
loadData();
}, [loadData]);
return {
data,
loading,
selectedRemessa,
setSelectedRemessa,
remessaDetails,
loadingDetails,
fetchRemessaDetails,
exportRemessa,
refresh: loadData
};
};