Files
WhiteNightsAdminPanel/src/shared/store/VehicleStore/index.ts

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