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

82 lines
2.9 KiB
JavaScript

import { create } from 'zustand';
import { dashboardFleetService } from '../services/dashboardFleetService';
export const useFleetDashboard = create((set) => ({
metrics: {
totalPlacas: null,
placasPorBase: null,
placasPorAno: null,
placasPorCategoria: null, // Novo
placasPorModelo: null, // Novo
placasPorTipo: null, // Novo
placasPorStatus: null,
placasPorManutencao: null,
placasPorProprietario: null, // Novo
disponibilidade: null,
monitoramentoPorUnidade: null,
sinistrosPorStatus: null,
manutencaoPorStatus: null
},
loading: false,
error: null,
fetchAllMetrics: async () => {
set({ loading: true, error: null });
try {
// Executa todas as promises em paralelo para carregar o dashboard
const [
totalPlacas,
placasPorBase,
placasPorAno,
placasPorCategoria,
placasPorModelo,
placasPorTipo,
placasPorStatus,
placasPorManutencao,
placasPorProprietario,
disponibilidade,
monitoramentoPorUnidade,
sinistrosPorStatus,
manutencaoPorStatus
] = await Promise.all([
dashboardFleetService.getTotalPlacas().catch(err => ({ error: err.message })),
dashboardFleetService.getPlacasPorBase().catch(err => ({ error: err.message })),
dashboardFleetService.getPlacasPorAno().catch(err => ({ error: err.message })),
dashboardFleetService.getPlacasPorCategoria().catch(err => ({ error: err.message })),
dashboardFleetService.getPlacasPorModelo().catch(err => ({ error: err.message })),
dashboardFleetService.getPlacasPorTipo().catch(err => ({ error: err.message })),
dashboardFleetService.getPlacasPorStatus().catch(err => ({ error: err.message })),
dashboardFleetService.getPlacasPorManutencao().catch(err => ({ error: err.message })),
dashboardFleetService.getPlacasPorProprietario().catch(err => ({ error: err.message })),
dashboardFleetService.getDisponibilidade().catch(err => ({ error: err.message })),
dashboardFleetService.getMonitoramentoPorUnidade().catch(err => ({ error: err.message })),
dashboardFleetService.getSinistrosPorStatus().catch(err => ({ error: err.message })),
dashboardFleetService.getManutencaoPorStatus().catch(err => ({ error: err.message }))
]);
set({
metrics: {
totalPlacas,
placasPorBase,
placasPorAno,
placasPorCategoria,
placasPorModelo,
placasPorTipo,
placasPorStatus,
placasPorManutencao,
placasPorProprietario,
disponibilidade,
monitoramentoPorUnidade,
sinistrosPorStatus,
manutencaoPorStatus
}
});
} catch (error) {
console.error('Erro geral no dashboard:', error);
set({ error: 'Falha ao carregar indicadores.' });
} finally {
set({ loading: false });
}
}
}));