testes/src_2/features/rh/hooks/useDescontos.js

90 lines
2.7 KiB
JavaScript

import { useState, useCallback } from 'react';
import { rhService } from '../services/rhService';
import { toast } from 'sonner';
/**
* Hook customizado para gerenciar descontos de colaboradores
*/
export const useDescontos = () => {
const [descontos, setDescontos] = useState([]);
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null);
/**
* Criar ou atualizar descontos
*/
const createOrUpdateDescontos = useCallback(async (payload) => {
setLoading(true);
setError(null);
try {
const response = await rhService.createOrUpdateDescontos(payload);
const data = response?.data || response;
toast.success(response?.message || 'Descontos salvos com sucesso!');
return data;
} catch (err) {
const errorMessage = err?.response?.data?.message || err?.message || 'Erro ao salvar descontos';
setError(errorMessage);
toast.error(errorMessage);
throw err;
} finally {
setLoading(false);
}
}, []);
/**
* Buscar descontos por colaborador
*/
const fetchDescontosByColaborador = useCallback(async (idcolaborador, params = {}) => {
setLoading(true);
setError(null);
try {
const response = await rhService.getDescontosByColaborador(idcolaborador, params);
console.log('📥 Response descontos da API:', response);
// A API retorna { data: [...], success: true } ou diretamente [...]
const descontosList = Array.isArray(response)
? response
: (Array.isArray(response?.data) ? response.data : (response?.descontos || []));
console.log('📊 Descontos processados:', descontosList);
setDescontos(descontosList);
return response;
} catch (err) {
const errorMessage = err?.response?.data?.message || err?.message || 'Erro ao buscar descontos';
setError(errorMessage);
toast.error(errorMessage);
return null;
} finally {
setLoading(false);
}
}, []);
/**
* Listar todos os descontos
*/
const fetchAllDescontos = useCallback(async (params = {}) => {
setLoading(true);
setError(null);
try {
const response = await rhService.getAllDescontos(params);
const descontosList = response?.descontos || response?.data || [];
setDescontos(descontosList);
return response;
} catch (err) {
const errorMessage = err?.response?.data?.message || err?.message || 'Erro ao listar descontos';
setError(errorMessage);
toast.error(errorMessage);
return null;
} finally {
setLoading(false);
}
}, []);
return {
descontos,
loading,
error,
createOrUpdateDescontos,
fetchDescontosByColaborador,
fetchAllDescontos
};
};