fix: Hot bug fix

This commit is contained in:
2025-06-15 20:38:48 +03:00
parent 481385c2f4
commit 32a7cb44d1
24 changed files with 900 additions and 250 deletions

View File

@ -132,6 +132,8 @@ class MapStore {
data = {
route_number: properties.name || "Новый маршрут",
path: geometry.coordinates,
center_latitude: geometry.coordinates[0][1],
center_longitude: geometry.coordinates[0][0],
};
} else if (featureType === "sight") {
data = {
@ -192,17 +194,27 @@ class MapStore {
oldData = this.sights.find((f) => f.id === numericId);
}
console.log(oldData);
console.log(data);
const response = await languageInstance("ru").patch(
`/${featureType}/${numericId}`,
{
...oldData,
latitude: data.latitude,
longitude: data.longitude,
}
);
let response;
if (featureType !== "route") {
response = await languageInstance("ru").patch(
`/${featureType}/${numericId}`,
{
...oldData,
latitude: data.latitude,
longitude: data.longitude,
}
);
} else {
response = await languageInstance("ru").patch(
`/${featureType}/${numericId}`,
{
...oldData,
path: data.path,
center_latitude: data.path[0][1],
center_longitude: data.path[0][0],
}
);
}
if (featureType === "route") {
const index = this.routes.findIndex((f) => f.id === numericId);
@ -1078,7 +1090,10 @@ class MapService {
);
if (!featureAtPixel) {
if (!ctrlKey) this.unselect();
if (ctrlKey) {
// При ctrl + клик вне сущности сбрасываем выбор
this.setSelectedIds(new Set());
}
return;
}
@ -1086,11 +1101,16 @@ class MapService {
if (featureId === undefined) return;
if (ctrlKey) {
// При ctrl + клик на сущность добавляем/удаляем её из выбора
const newSet = new Set(this.selectedIds);
if (newSet.has(featureId)) newSet.delete(featureId);
else newSet.add(featureId);
if (newSet.has(featureId)) {
newSet.delete(featureId);
} else {
newSet.add(featureId);
}
this.setSelectedIds(newSet);
} else {
// При обычном клике на сущность выбираем только её
this.setSelectedIds(new Set([featureId]));
}
}
@ -1153,14 +1173,12 @@ class MapService {
mapStore
.deleteFeature(recourse, numericId)
.then(() => {
toast.success("Объект успешно удален");
if (stateBeforeDelete)
this.addStateToHistory("delete", stateBeforeDelete);
this.vectorSource.removeFeature(feature);
this.unselect();
})
.catch((err) => {
toast.error("Ошибка при удалении объекта");
console.error("Delete failed:", err);
});
}
@ -1196,7 +1214,6 @@ class MapService {
}
})
.catch((err) => {
toast.error("Произошла ошибка при массовом удалении");
console.error("Bulk delete failed:", err);
});
}
@ -1307,12 +1324,9 @@ class MapService {
try {
await mapStore.updateFeature(featureType, featureGeoJSON);
toast.success(`"${feature.get("name")}" успешно обновлен.`);
} catch (error) {
console.error("Failed to update feature:", error);
toast.error(
`Не удалось обновить "${feature.get("name")}". Отмена изменений...`
);
this.undo();
}
}
@ -1338,7 +1352,6 @@ class MapService {
featureType === "route"
? createdFeatureData.route_number
: createdFeatureData.name;
toast.success(`"${newName}" создано.`);
const newFeatureId = `${featureType}-${createdFeatureData.id}`;
feature.setId(newFeatureId);
@ -1507,15 +1520,20 @@ const MapSightbar: React.FC<MapSightbarProps> = ({
);
const handleCheckboxChange = useCallback(
// @ts-ignore
(id) => {
(id: string | number | undefined) => {
if (id === undefined) return;
const newSet = new Set(selectedIds);
if (newSet.has(id)) newSet.delete(id);
else newSet.add(id);
if (newSet.has(id)) {
newSet.delete(id);
} else {
newSet.add(id);
}
setSelectedIds(newSet);
if (mapService) {
mapService.setSelectedIds(newSet);
}
},
[selectedIds, setSelectedIds]
[selectedIds, setSelectedIds, mapService]
);
const handleBulkDelete = useCallback(() => {
@ -1990,13 +2008,11 @@ export const MapPage: React.FC = () => {
);
const handleMapClick = useCallback(
(event: any) => {
if (!mapServiceInstance || isLassoActive) return;
const ctrlKey =
event.originalEvent.ctrlKey || event.originalEvent.metaKey;
mapServiceInstance.handleMapClick(event, ctrlKey);
(event: MapBrowserEvent<any>) => {
if (!mapServiceInstance) return;
mapServiceInstance.handleMapClick(event, event.originalEvent.ctrlKey);
},
[mapServiceInstance, isLassoActive]
[mapServiceInstance]
);
useEffect(() => {