77 lines
2.1 KiB
JavaScript
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 });
|
|
}
|
|
}
|
|
}));
|
|
|
|
|
|
|