feat: Add edit pages with cache

This commit is contained in:
2025-06-08 08:33:43 +03:00
parent e37f9e14bc
commit b09c1b3214
37 changed files with 2223 additions and 772 deletions

View File

@ -1,5 +1,5 @@
import { authInstance } from "@shared";
import { makeAutoObservable } from "mobx";
import { authInstance, languageStore, languageInstance } from "@shared";
import { makeAutoObservable, runInAction } from "mobx";
export type Vehicle = {
vehicle: {
@ -22,42 +22,121 @@ export type Vehicle = {
class VehicleStore {
vehicles: Vehicle[] = [];
vehicle: Vehicle | null = null;
vehicle: Record<string, Vehicle> = {};
constructor() {
makeAutoObservable(this);
}
getVehicles = async () => {
const response = await authInstance.get(`/vehicle`);
this.vehicles = response.data;
const response = await languageInstance("ru").get(`/vehicle`);
runInAction(() => {
this.vehicles = response.data;
});
};
deleteVehicle = async (id: number) => {
await authInstance.delete(`/vehicle/${id}`);
this.vehicles = this.vehicles.filter(
(vehicle) => vehicle.vehicle.id !== id
);
await languageInstance("ru").delete(`/vehicle/${id}`);
runInAction(() => {
this.vehicles = this.vehicles.filter(
(vehicle) => vehicle.vehicle.id !== id
);
});
};
getVehicle = async (id: number) => {
const response = await authInstance.get(`/vehicle/${id}`);
this.vehicle = response.data;
const response = await languageInstance("ru").get(`/vehicle/${id}`);
runInAction(() => {
this.vehicle[id] = response.data;
});
};
createVehicle = async (
tailNumber: number,
type: string,
type: number,
carrier: string,
carrierId: number
) => {
await authInstance.post("/vehicle", {
const response = await languageInstance("ru").post("/vehicle", {
tail_number: tailNumber,
type,
carrier,
carrier_id: carrierId,
});
await this.getVehicles();
runInAction(() => {
this.vehicles.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 = this.vehicles.map((vehicle) =>
vehicle.vehicle.id === id
? {
...vehicle,
...response.data,
}
: vehicle
);
});
};
}