91 lines
3.0 KiB
JavaScript
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
|
|
};
|
|
};
|