fix: Hot bug fix
This commit is contained in:
@ -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(() => {
|
||||
|
Reference in New Issue
Block a user