151 lines
3.1 KiB
TypeScript
151 lines
3.1 KiB
TypeScript
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<string, Vehicle> = {};
|
|
|
|
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();
|