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

150 lines
4.2 KiB
JavaScript

import { useState, useCallback } from 'react';
import { rhService } from '../services/rhService';
import { toast } from 'sonner';
/**
* Hook customizado para gerenciar benefícios
*/
export const useBeneficios = () => {
const [beneficios, setBeneficios] = useState([]);
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null);
/**
* Criar benefício
*/
const createBeneficio = useCallback(async (payload) => {
setLoading(true);
setError(null);
try {
const response = await rhService.createBeneficio(payload);
const data = response?.data || response;
toast.success(response?.message || 'Benefício criado com sucesso!');
return data;
} catch (err) {
const errorMessage = err?.response?.data?.message || err?.message || 'Erro ao criar benefício';
setError(errorMessage);
toast.error(errorMessage);
throw err;
} finally {
setLoading(false);
}
}, []);
/**
* Listar benefícios
*/
const fetchBeneficios = useCallback(async (params = {}) => {
setLoading(true);
setError(null);
try {
const response = await rhService.getAllBeneficios(params);
// A API retorna { data: [...], success: true } ou diretamente [...]
const beneficiosList = Array.isArray(response)
? response
: (Array.isArray(response?.data) ? response.data : (response?.beneficios || []));
setBeneficios(beneficiosList);
return response;
} catch (err) {
const errorMessage = err?.response?.data?.message || err?.message || 'Erro ao listar benefícios';
setError(errorMessage);
toast.error(errorMessage);
return null;
} finally {
setLoading(false);
}
}, []);
/**
* Buscar benefício por ID
*/
const fetchBeneficioById = useCallback(async (id) => {
setLoading(true);
setError(null);
try {
const response = await rhService.getBeneficioById(id);
const beneficio = response?.beneficio || response?.data || response;
return beneficio;
} catch (err) {
const errorMessage = err?.response?.data?.message || err?.message || 'Erro ao buscar benefício';
setError(errorMessage);
toast.error(errorMessage);
return null;
} finally {
setLoading(false);
}
}, []);
/**
* Atualizar benefício
*/
const updateBeneficio = useCallback(async (id, payload) => {
setLoading(true);
setError(null);
try {
const response = await rhService.updateBeneficio(id, payload);
const data = response?.data || response;
toast.success(response?.message || 'Benefício atualizado com sucesso!');
return data;
} catch (err) {
const errorMessage = err?.response?.data?.message || err?.message || 'Erro ao atualizar benefício';
setError(errorMessage);
toast.error(errorMessage);
throw err;
} finally {
setLoading(false);
}
}, []);
/**
* Deletar benefício
*/
const deleteBeneficio = useCallback(async (id) => {
setLoading(true);
setError(null);
try {
const response = await rhService.deleteBeneficio(id);
toast.success(response?.message || 'Benefício deletado com sucesso!');
return response;
} catch (err) {
const errorMessage = err?.response?.data?.message || err?.message || 'Erro ao deletar benefício';
setError(errorMessage);
toast.error(errorMessage);
throw err;
} finally {
setLoading(false);
}
}, []);
/**
* Calcular desconto do benefício
*/
const calcularBeneficio = useCallback(async (id, payload = {}) => {
setLoading(true);
setError(null);
try {
const response = await rhService.calcularBeneficio(id, payload);
return response;
} catch (err) {
const errorMessage = err?.response?.data?.message || err?.message || 'Erro ao calcular benefício';
setError(errorMessage);
toast.error(errorMessage);
throw err;
} finally {
setLoading(false);
}
}, []);
return {
beneficios,
loading,
error,
createBeneficio,
fetchBeneficios,
fetchBeneficioById,
updateBeneficio,
deleteBeneficio,
calcularBeneficio
};
};