saveinmed/saveinmed-frontend/src/hooks/usePagamentos.ts
Tiago Yamamoto b39caf0fd0 first commit
2025-12-17 13:58:26 -03:00

132 lines
3.6 KiB
TypeScript

import { useState, useCallback } from 'react';
import { Models } from 'appwrite';
import { pagamentoService, PagamentoData } from '@/services/pagamentoService';
export type { PagamentoData };
export interface UsePagamentosReturn {
pagamentos: Models.Document[];
loading: boolean;
error: string | null;
totalPagamentos: number;
currentPage: number;
listarPagamentos: (page?: number, search?: string) => Promise<void>;
buscarPagamentos: (termo: string, page?: number) => Promise<void>;
cadastrarPagamento: (data: PagamentoData) => Promise<boolean>;
atualizarPagamento: (id: string, data: PagamentoData) => Promise<boolean>;
deletarPagamento: (id: string) => Promise<boolean>;
setCurrentPage: (page: number) => void;
}
const PAGE_SIZE = 10;
export const usePagamentos = (): UsePagamentosReturn => {
const [pagamentos, setPagamentos] = useState<Models.Document[]>([]);
const [loading, setLoading] = useState(false);
const [error, setError] = useState<string | null>(null);
const [totalPagamentos, setTotalPagamentos] = useState(0);
const [currentPage, setCurrentPage] = useState(1);
const listarPagamentos = useCallback(
async (page = currentPage, search = '') => {
setLoading(true);
setError(null);
try {
const response = await pagamentoService.listar(page, PAGE_SIZE, search);
setPagamentos(response.documents || []);
setTotalPagamentos(response.total || 0);
setCurrentPage(page);
} catch (err) {
setError('Erro de conexão ao carregar pagamentos');
} finally {
setLoading(false);
}
}, [currentPage]);
const buscarPagamentos = useCallback(
async (termo: string, page = 1) => {
setLoading(true);
setError(null);
try {
const response = await pagamentoService.buscarPorNome(
termo,
page,
PAGE_SIZE
);
setPagamentos(response.documents || []);
setTotalPagamentos(response.total || 0);
setCurrentPage(page);
} catch (err) {
setError('Erro de conexão ao buscar pagamentos');
} finally {
setLoading(false);
}
},
[]
);
const cadastrarPagamento = useCallback(async (formData: PagamentoData): Promise<boolean> => {
setLoading(true);
setError(null);
try {
await pagamentoService.criar(formData);
await listarPagamentos(currentPage);
return true;
} catch (err) {
setError('Erro de conexão ao cadastrar pagamento');
return false;
} finally {
setLoading(false);
}
}, [currentPage, listarPagamentos]);
const atualizarPagamento = useCallback(async (id: string, formData: PagamentoData): Promise<boolean> => {
setLoading(true);
setError(null);
try {
await pagamentoService.atualizar(id, formData);
await listarPagamentos(currentPage);
return true;
} catch (err) {
setError('Erro de conexão ao atualizar pagamento');
return false;
} finally {
setLoading(false);
}
}, [currentPage, listarPagamentos]);
const deletarPagamento = useCallback(async (id: string): Promise<boolean> => {
setLoading(true);
setError(null);
try {
await pagamentoService.deletar(id);
await listarPagamentos(currentPage);
return true;
} catch (err) {
setError('Erro de conexão ao deletar pagamento');
return false;
} finally {
setLoading(false);
}
}, [currentPage, listarPagamentos]);
return {
pagamentos,
loading,
error,
totalPagamentos,
currentPage,
listarPagamentos,
buscarPagamentos,
cadastrarPagamento,
atualizarPagamento,
deletarPagamento,
setCurrentPage,
};
};