import { languageInstance } from "@shared"; import { makeAutoObservable, runInAction } from "mobx"; export type Vehicle = { vehicle: { id: number; tail_number: number; type: number; carrier_id: number; carrier: string; uuid?: string; }; device_status?: { device_uuid: string; online: boolean; gps_ok: boolean; media_service_ok: boolean; last_update: string; is_connected: boolean; }; }; class VehicleStore { vehicles: { data: Vehicle[]; loaded: boolean; } = { data: [], loaded: false, }; vehicle: Record = {}; constructor() { makeAutoObservable(this); } getVehicles = async () => { const response = await languageInstance("ru").get(`/vehicle`); runInAction(() => { this.vehicles.data = response.data; this.vehicles.loaded = true; }); }; deleteVehicle = async (id: number) => { await languageInstance("ru").delete(`/vehicle/${id}`); runInAction(() => { this.vehicles.data = this.vehicles.data.filter( (vehicle) => vehicle.vehicle.id !== id ); }); }; getVehicle = async (id: number) => { const response = await languageInstance("ru").get(`/vehicle/${id}`); runInAction(() => { this.vehicle[id] = response.data; }); }; createVehicle = async ( tailNumber: number, type: number, carrier: string, carrierId: number ) => { const response = await languageInstance("ru").post("/vehicle", { tail_number: tailNumber, type, carrier, carrier_id: carrierId, }); runInAction(() => { this.vehicles.data.push({ vehicle: { id: response.data.id, tail_number: response.data.tail_number, type: response.data.type, carrier_id: response.data.carrier_id, carrier: response.data.carrier, uuid: response.data.uuid, }, }); }); }; editVehicleData: { tail_number: number; type: number; carrier: string; carrier_id: number; } = { tail_number: 0, type: 0, carrier: "", carrier_id: 0, }; setEditVehicleData = (data: { tail_number: number; type: number; carrier: string; carrier_id: number; }) => { this.editVehicleData = { ...this.editVehicleData, ...data, }; }; editVehicle = async ( id: number, data: { tail_number: number; type: number; carrier: string; carrier_id: number; } ) => { const response = await languageInstance("ru").patch(`/vehicle/${id}`, { tail_number: data.tail_number, type: data.type, carrier: data.carrier, carrier_id: data.carrier_id, }); runInAction(() => { this.vehicle[id] = { vehicle: { ...this.vehicle[id].vehicle, ...response.data, }, }; this.vehicles.data = this.vehicles.data.map((vehicle) => vehicle.vehicle.id === id ? { ...vehicle, ...response.data, } : vehicle ); }); }; } export const vehicleStore = new VehicleStore();