testes/src_2/features/fleet-v2/hooks/useVehicles.js

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);
}
}
}));