feat: update map, admin to and cache

This commit is contained in:
2026-05-08 13:33:41 +03:00
parent 4bda233b63
commit 193f53c029
22 changed files with 191 additions and 107 deletions

View File

@@ -12,6 +12,8 @@ import {
VEHICLE_TYPES,
carrierStore,
languageStore,
cityStore,
selectedCityStore,
} from "@shared";
import { observer } from "mobx-react-lite";
import { ArrowLeft, Save } from "lucide-react";
@@ -26,11 +28,13 @@ export const VehicleCreatePage = observer(() => {
const [type, setType] = useState("");
const [carrierId, setCarrierId] = useState<number | null>(null);
const [model, setModel] = useState("");
const [cityId, setCityId] = useState<number | null>(selectedCityStore.selectedCityId);
const [isLoading, setIsLoading] = useState(false);
const { language } = languageStore;
useEffect(() => {
carrierStore.getCarriers(language);
cityStore.getCities("ru");
}, [language]);
const handleCreate = async () => {
@@ -43,6 +47,7 @@ export const VehicleCreatePage = observer(() => {
?.full_name as string,
carrierId!,
model || undefined,
cityId ?? undefined,
);
toast.success("Транспорт успешно создан");
} catch (error) {
@@ -73,12 +78,11 @@ export const VehicleCreatePage = observer(() => {
onChange={(e) => setTailNumber(e.target.value)}
/>
<FormControl fullWidth>
<FormControl fullWidth required>
<InputLabel>Тип</InputLabel>
<Select
value={type}
label="Тип"
required
onChange={(e) => setType(e.target.value)}
>
{VEHICLE_TYPES.map((type) => (
@@ -89,12 +93,11 @@ export const VehicleCreatePage = observer(() => {
</Select>
</FormControl>
<FormControl fullWidth>
<FormControl fullWidth required>
<InputLabel>Перевозчик</InputLabel>
<Select
value={carrierId || ""}
label="Перевозчик"
required
onChange={(e) => setCarrierId(e.target.value as number)}
>
{carrierStore.carriers[language].data?.map((carrier) => (
@@ -113,12 +116,27 @@ export const VehicleCreatePage = observer(() => {
placeholder="Произвольное название модели"
/>
<FormControl fullWidth required>
<InputLabel>Город</InputLabel>
<Select
value={cityId ?? ""}
label="Город"
onChange={(e) => setCityId(e.target.value ? Number(e.target.value) : null)}
>
{cityStore.cities.ru.data.map((city) => (
<MenuItem key={city.id} value={city.id}>
{city.name}
</MenuItem>
))}
</Select>
</FormControl>
<Button
variant="contained"
className="w-min flex gap-2 items-center"
startIcon={<Save size={20} />}
onClick={handleCreate}
disabled={isLoading || !tailNumber || !type || !carrierId}
disabled={isLoading || !tailNumber || !type || !carrierId || !cityId}
>
{isLoading ? (
<Loader2 size={20} className="animate-spin" />