63 lines
1.8 KiB
JavaScript
63 lines
1.8 KiB
JavaScript
import { useState, useEffect, useCallback } from 'react';
|
|
import { toast } from 'sonner';
|
|
import cnabService from '../services/cnabService';
|
|
|
|
/**
|
|
* Hook customizado para gestão de favorecidos CNAB
|
|
*/
|
|
export const useFavorecidos = () => {
|
|
const [favorecidos, setFavorecidos] = useState([]);
|
|
const [loading, setLoading] = useState(true);
|
|
const [selectedFavorecido, setSelectedFavorecido] = useState(null);
|
|
const [searchTerm, setSearchTerm] = useState('');
|
|
|
|
/**
|
|
* Carrega favorecidos iniciais
|
|
*/
|
|
const loadFavorecidos = useCallback(async () => {
|
|
setLoading(true);
|
|
try {
|
|
const data = await cnabService.getFavorecidos();
|
|
setFavorecidos(data);
|
|
} catch (error) {
|
|
toast.error('Erro ao carregar favorecidos.');
|
|
} finally {
|
|
setLoading(false);
|
|
}
|
|
}, []);
|
|
|
|
useEffect(() => {
|
|
loadFavorecidos();
|
|
}, [loadFavorecidos]);
|
|
|
|
/**
|
|
* Filtra favorecidos baseado no termo de busca
|
|
*/
|
|
const filteredFavorecidos = favorecidos.filter(f =>
|
|
f.nome.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
|
f.documento.includes(searchTerm) ||
|
|
f.pix.toLowerCase().includes(searchTerm.toLowerCase())
|
|
);
|
|
|
|
const handleExport = () => {
|
|
toast.success('Exportação iniciada para o formato Excel.');
|
|
};
|
|
|
|
const handleDelete = (id) => {
|
|
setFavorecidos(prev => prev.filter(f => f.id !== id));
|
|
toast.success('Favorecido removido com sucesso.');
|
|
};
|
|
|
|
return {
|
|
favorecidos: filteredFavorecidos,
|
|
loading,
|
|
searchTerm,
|
|
setSearchTerm,
|
|
selectedFavorecido,
|
|
setSelectedFavorecido,
|
|
handleExport,
|
|
handleDelete,
|
|
refresh: loadFavorecidos
|
|
};
|
|
};
|