150 lines
4.2 KiB
JavaScript
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
|
|
};
|
|
};
|