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

49 lines
2.3 KiB
JavaScript

import { create } from 'zustand';
/**
* Store global para gerenciar o estado do Novo Ambiente de Frota (Fleet V2).
* Contém dados mockados baseados no mockup original.
*/
export const useFleetStore = create((set) => ({
veiculos: [
{ id: 1, placa: 'ABC-1234', modelo: 'Fiorino', base: 'Pralog CD', uf:'SP', status: 'operacao', kmAtual: 45000, motorista: 'João Silva', sascar: 'Sim', t4s: 'Não', geotab: 'Sim', statusTel: 'Ativo' },
{ id: 2, placa: 'XYZ-9876', modelo: 'Constellation', base: 'Pralog Norte', uf:'AM', status: 'manutencao', kmAtual: 120000, motorista: 'Maria Oliveira', sascar: 'Sim', t4s: 'Sim', geotab: 'Não', statusTel: 'Inativo' },
{ id: 3, placa: 'PRL-2024', modelo: 'Sprinter', base: 'Pralog Sul', uf:'RS', status: 'operacao', kmAtual: 15000, motorista: 'Pedro Santos', sascar: 'Não', t4s: 'Sim', geotab: 'Sim', statusTel: 'Ativo' }
],
abastecimentos: [
{ id: 1, data: '2023-10-25', veiculoId: 1, motorista: 'João Silva', km: 45000, litros: 40, valor: 240.00, posto: 'Shell Centro', combustivel: 'Diesel S10' }
],
manutencoes: [
{ id: 101, veiculoId: 2, dataSolicitacao: '2023-10-20', tipo: 'Corretiva', status: 'Em Execução', oficina: 'Oficina Central', custo: 1850.00 }
],
checklists: [
{ id: 1, data: '2023-10-26', unidade: 'CD SP', checklist: 'Diário', autor: 'João', aprovacao: 100, status: 'Aprovado' },
{ id: 2, data: '2023-10-25', unidade: 'Norte AM', checklist: 'Segurança', autor: 'Maria', aprovacao: 60, status: 'Reprovado' }
],
// Ações
addAbastecimento: (novo) => set((state) => ({
abastecimentos: [ { ...novo, id: Date.now() }, ...state.abastecimentos ],
veiculos: state.veiculos.map(v => v.id === novo.veiculoId ? { ...v, kmAtual: novo.km } : v)
})),
updateVeiculoStatus: (id, status) => set((state) => ({
veiculos: state.veiculos.map(v => v.id === id ? { ...v, status } : v)
})),
}));
export const useFleetData = () => {
const store = useFleetStore();
const stats = {
total: store.veiculos.length,
operacao: store.veiculos.filter(v => v.status === 'operacao').length,
manutencao: store.veiculos.filter(v => v.status === 'manutencao').length,
abastecimentosMes: store.abastecimentos.length,
checklists: store.checklists.length,
alertas: store.veiculos.filter(v => v.statusTel === 'Inativo').length
};
return { ...store, stats };
};