109 lines
3.0 KiB
JavaScript
109 lines
3.0 KiB
JavaScript
import { create } from 'zustand';
|
|
import { fleetService } from '../services/fleetService';
|
|
import { toast } from 'sonner';
|
|
|
|
export const useVehicles = create((set, get) => ({
|
|
vehicles: [],
|
|
availability: [], // Store availability data
|
|
statusList: [], // Store status data
|
|
loading: false,
|
|
error: null,
|
|
|
|
fetchVehicles: async () => {
|
|
set({ loading: true, error: null });
|
|
try {
|
|
const data = await fleetService.getVehicles();
|
|
// Ensure data is an array, handle different API return structures if needed
|
|
set({ vehicles: Array.isArray(data) ? data : (data.data || []) });
|
|
} catch (error) {
|
|
set({ error: error.message });
|
|
toast.error('Erro ao carregar veículos: ' + error.message);
|
|
} finally {
|
|
set({ loading: false });
|
|
}
|
|
},
|
|
|
|
createVehicle: async (vehicleData) => {
|
|
set({ loading: true });
|
|
try {
|
|
await fleetService.createVehicle(vehicleData);
|
|
toast.success('Veículo cadastrado com sucesso!');
|
|
get().fetchVehicles(); // Refresh list
|
|
return true;
|
|
} catch (error) {
|
|
toast.error('Erro ao cadastrar veículo: ' + error.message);
|
|
return false;
|
|
} finally {
|
|
set({ loading: false });
|
|
}
|
|
},
|
|
|
|
updateVehicle: async (id, vehicleData) => {
|
|
set({ loading: true });
|
|
try {
|
|
await fleetService.updateVehicle(id, vehicleData);
|
|
toast.success('Veículo atualizado com sucesso!');
|
|
get().fetchVehicles();
|
|
return true;
|
|
} catch (error) {
|
|
toast.error('Erro ao atualizar veículo: ' + error.message);
|
|
return false;
|
|
} finally {
|
|
set({ loading: false });
|
|
}
|
|
},
|
|
|
|
// --- Disponibilidade ---
|
|
|
|
fetchAvailability: async () => {
|
|
try {
|
|
const data = await fleetService.getAvailability();
|
|
set({ availability: Array.isArray(data) ? data : (data.data || []) });
|
|
} catch (error) {
|
|
console.error('Erro ao buscar disponibilidade', error);
|
|
}
|
|
},
|
|
|
|
createAvailability: async (data) => {
|
|
try {
|
|
await fleetService.createAvailability(data);
|
|
toast.success('Disponibilidade registrada!');
|
|
get().fetchAvailability();
|
|
} catch (error) {
|
|
toast.error('Erro ao registrar disponibilidade: ' + error.message);
|
|
}
|
|
},
|
|
|
|
updateAvailability: async (id, data) => {
|
|
try {
|
|
await fleetService.updateAvailability(id, data);
|
|
toast.success('Disponibilidade atualizada!');
|
|
get().fetchAvailability();
|
|
} catch (error) {
|
|
toast.error('Erro ao atualizar disponibilidade: ' + error.message);
|
|
}
|
|
},
|
|
|
|
// --- Status ---
|
|
|
|
fetchStatus: async () => {
|
|
try {
|
|
const data = await fleetService.getStatus();
|
|
set({ statusList: Array.isArray(data) ? data : (data.data || []) });
|
|
} catch (error) {
|
|
console.error('Erro ao buscar status', error);
|
|
}
|
|
},
|
|
|
|
updateStatus: async (id, data) => {
|
|
try {
|
|
await fleetService.updateStatus(id, data);
|
|
toast.success('Status atualizado!');
|
|
get().fetchStatus();
|
|
} catch (error) {
|
|
toast.error('Erro ao atualizar status: ' + error.message);
|
|
}
|
|
}
|
|
|
|
}));
|