testes/src/features/prafrot/hooks/useAvailability.js

77 lines
2.1 KiB
JavaScript

import { create } from 'zustand';
import { prafrotService } from '../services/prafrotService';
import { toast } from 'sonner';
import { extractFriendlyMessage } from '../utils/errorMessages';
export const useAvailability = create((set, get) => ({
availabilities: [],
loading: false,
error: null,
fetchAvailabilities: async () => {
set({ loading: true, error: null });
try {
const data = await prafrotService.getAvailability();
set({ availabilities: Array.isArray(data) ? data : (data.data || []) });
} catch (error) {
const friendlyMsg = extractFriendlyMessage(error);
set({ error: friendlyMsg });
toast.error(friendlyMsg);
} finally {
set({ loading: false });
}
},
createAvailability: async (payload) => {
set({ loading: true });
try {
await prafrotService.createAvailability(payload);
toast.success('Disponibilidade registrada com sucesso!');
get().fetchAvailabilities();
return true;
} catch (error) {
const friendlyMsg = extractFriendlyMessage(error);
toast.error(friendlyMsg);
return false;
} finally {
set({ loading: false });
}
},
updateAvailability: async (id, payload) => {
set({ loading: true });
try {
await prafrotService.updateAvailability(id, payload);
toast.success('Disponibilidade atualizada com sucesso!');
get().fetchAvailabilities();
return true;
} catch (error) {
const friendlyMsg = extractFriendlyMessage(error);
toast.error(friendlyMsg);
return false;
} finally {
set({ loading: false });
}
},
deleteAvailability: async (id) => {
if (!window.confirm('Tem certeza que deseja excluir este registro de disponibilidade?')) return;
set({ loading: true });
try {
await prafrotService.deleteAvailability(id);
toast.success('Disponibilidade excluída com sucesso!');
get().fetchAvailabilities();
return true;
} catch (error) {
const friendlyMsg = extractFriendlyMessage(error);
toast.error(friendlyMsg);
return false;
} finally {
set({ loading: false });
}
}
}));