fix: fix bug with stations in the route

This commit is contained in:
2026-02-04 20:29:09 +03:00
parent 58abe15ec4
commit 8fe6505249
4 changed files with 75 additions and 72 deletions

View File

@@ -162,7 +162,10 @@ const LinkedItemsContentsInner = <
const filteredAvailableItems = availableItems.filter((item) => { const filteredAvailableItems = availableItems.filter((item) => {
if (!searchQuery.trim()) return true; if (!searchQuery.trim()) return true;
return String(item.name).toLowerCase().includes(searchQuery.toLowerCase()); const query = searchQuery.toLowerCase();
const name = String(item.name || "").toLowerCase();
const description = String(item.description || "").toLowerCase();
return name.includes(query) || description.includes(query);
}); });
useEffect(() => { useEffect(() => {
@@ -206,12 +209,11 @@ const LinkedItemsContentsInner = <
authInstance authInstance
.post(`/${parentResource}/${parentId}/${childResource}`, { .post(`/${parentResource}/${parentId}/${childResource}`, {
stations: reorderedItems.map((item) => { stations: reorderedItems.map((item) => {
const stationData: any = { id: item.id };
const transfers = getStationTransfers(item.id, item.transfers); const transfers = getStationTransfers(item.id, item.transfers);
if (transfers) { return {
stationData.transfers = transfers; ...item,
} transfers: transfers || item.transfers,
return stationData; };
}), }),
}) })
.catch((error) => { .catch((error) => {
@@ -263,24 +265,23 @@ const LinkedItemsContentsInner = <
const requestData = { const requestData = {
stations: insertAtPosition( stations: insertAtPosition(
linkedItems.map((item) => { linkedItems.map((item) => {
const stationData: any = { id: item.id };
const transfers = getStationTransfers(item.id, item.transfers); const transfers = getStationTransfers(item.id, item.transfers);
if (transfers) { return {
stationData.transfers = transfers; ...item,
} transfers: transfers || item.transfers,
return stationData; };
}), }),
position, position,
(() => { (() => {
const newStationData: any = { id: selectedItemId }; if (!selectedItem) return { id: selectedItemId };
const transfers = getStationTransfers( const transfers = getStationTransfers(
selectedItemId, selectedItemId,
selectedItem?.transfers selectedItem.transfers
); );
if (transfers) { return {
newStationData.transfers = transfers; ...selectedItem,
} transfers: transfers || selectedItem.transfers,
return newStationData; };
})() })()
), ),
}; };
@@ -365,22 +366,21 @@ const LinkedItemsContentsInner = <
setIsLinkingBulk(true); setIsLinkingBulk(true);
const selectedStations = Array.from(selectedItems).map((id) => { const selectedStations = Array.from(selectedItems).map((id) => {
const item = allItems.find((item) => item.id === id); const item = allItems.find((item) => item.id === id);
const stationData: any = { id }; if (!item) return { id };
const transfers = getStationTransfers(id, item?.transfers); const transfers = getStationTransfers(id, item.transfers);
if (transfers) { return {
stationData.transfers = transfers; ...item,
} transfers: transfers || item.transfers,
return stationData; };
}); });
const requestData = { const requestData = {
stations: [ stations: [
...linkedItems.map((item) => { ...linkedItems.map((item) => {
const stationData: any = { id: item.id };
const transfers = getStationTransfers(item.id, item.transfers); const transfers = getStationTransfers(item.id, item.transfers);
if (transfers) { return {
stationData.transfers = transfers; ...item,
} transfers: transfers || item.transfers,
return stationData; };
}), }),
...selectedStations, ...selectedStations,
], ],

View File

@@ -169,7 +169,7 @@ export const MapDataProvider = observer(
} }
function setIconSize(size: number) { function setIconSize(size: number) {
const clamped = Math.max(50, Math.min(300, size)); const clamped = Math.max(1, Math.min(300, size));
setRouteChanges((prev) => { setRouteChanges((prev) => {
if (prev.icon_size === clamped) { if (prev.icon_size === clamped) {
return prev; return prev;
@@ -179,7 +179,7 @@ export const MapDataProvider = observer(
} }
function setFontSize(size: number) { function setFontSize(size: number) {
const clamped = Math.max(50, Math.min(300, size)); const clamped = Math.max(1, Math.min(300, size));
setRouteChanges((prev) => { setRouteChanges((prev) => {
if (prev.font_size === clamped) { if (prev.font_size === clamped) {
return prev; return prev;

View File

@@ -101,7 +101,7 @@ export function RightSidebar() {
if (!Number.isFinite(value)) { if (!Number.isFinite(value)) {
return; return;
} }
const clamped = Math.max(50, Math.min(300, Math.round(value))); const clamped = Math.max(1, Math.min(300, Math.round(value)));
setIconSize(clamped); setIconSize(clamped);
updateIconSize(clamped); updateIconSize(clamped);
}; };
@@ -110,7 +110,7 @@ export function RightSidebar() {
if (!Number.isFinite(value)) { if (!Number.isFinite(value)) {
return; return;
} }
const clamped = Math.max(50, Math.min(300, Math.round(value))); const clamped = Math.max(1, Math.min(300, Math.round(value)));
setFontSize(clamped); setFontSize(clamped);
updateFontSize(clamped); updateFontSize(clamped);
}; };
@@ -307,60 +307,58 @@ export function RightSidebar() {
}} }}
/> />
<Typography variant="body2" sx={{ color: "#fff", textAlign: "center" }}> <TextField
Размер иконок: {iconSize}% type="number"
</Typography> label="Размер иконок (%)"
variant="filled"
<Slider
value={iconSize} value={iconSize}
onChange={(_, value) => { onChange={(e) => {
if (typeof value === "number") { const value = Number(e.target.value);
if (!isNaN(value)) {
handleIconSizeChange(value); handleIconSizeChange(value);
} }
}} }}
min={50} style={{ backgroundColor: "#222", borderRadius: 4 }}
max={300}
step={1}
sx={{ sx={{
color: "#fff", "& .MuiInputLabel-root": {
"& .MuiSlider-thumb": { color: "#fff",
backgroundColor: "#fff",
}, },
"& .MuiSlider-track": { "& .MuiInputBase-input": {
backgroundColor: "#fff", color: "#fff",
},
"& .MuiSlider-rail": {
backgroundColor: "#666",
}, },
}} }}
inputProps={{
min: 1,
max: 300,
step: 1,
}}
/> />
<Typography variant="body2" sx={{ color: "#fff", textAlign: "center" }}> <TextField
Размер шрифта: {fontSize}% type="number"
</Typography> label="Размер шрифта (%)"
variant="filled"
<Slider
value={fontSize} value={fontSize}
onChange={(_, value) => { onChange={(e) => {
if (typeof value === "number") { const value = Number(e.target.value);
if (!isNaN(value)) {
handleFontSizeChange(value); handleFontSizeChange(value);
} }
}} }}
min={50} style={{ backgroundColor: "#222", borderRadius: 4 }}
max={300}
step={1}
sx={{ sx={{
color: "#fff", "& .MuiInputLabel-root": {
"& .MuiSlider-thumb": { color: "#fff",
backgroundColor: "#fff",
}, },
"& .MuiSlider-track": { "& .MuiInputBase-input": {
backgroundColor: "#fff", color: "#fff",
},
"& .MuiSlider-rail": {
backgroundColor: "#666",
}, },
}} }}
inputProps={{
min: 1,
max: 300,
step: 1,
}}
/> />
<TextField <TextField

View File

@@ -9,6 +9,7 @@ import { coordinatesToLocal, localToCoordinates } from "../utils";
import { BACKGROUND_COLOR, SCALE_FACTOR, UP_SCALE } from "../Constants"; import { BACKGROUND_COLOR, SCALE_FACTOR, UP_SCALE } from "../Constants";
import { languageStore } from "@shared"; import { languageStore } from "@shared";
import { SightData } from "../types"; import { SightData } from "../types";
import { isMediaIdEmpty } from "../../../../shared/lib/index";
const SIGHT_ICON_URL = "/sight_icon.svg"; const SIGHT_ICON_URL = "/sight_icon.svg";
@@ -1960,9 +1961,13 @@ export const WebGLRouteMapPrototype = observer(() => {
? { right: 0, transform: "none" } ? { right: 0, transform: "none" }
: { left: "50%", transform: "translateX(-50%)" }; : { left: "50%", transform: "translateX(-50%)" };
const iconUrl = station.icon let isMediaIdEmptyResult = isMediaIdEmpty(station.icon);
? `${import.meta.env.VITE_KRBL_MEDIA}${station.icon}/download?token=${localStorage.getItem("token") ?? ""}` const iconUrl = isMediaIdEmptyResult
: null; ? null
: `${import.meta.env.VITE_KRBL_MEDIA}${
station.icon
}/download?token=${localStorage.getItem("token") ?? ""}`;
const iconSizePx = Math.round(primaryFontSize * 1.2); const iconSizePx = Math.round(primaryFontSize * 1.2);
const secondaryLineHeight = 1.2; const secondaryLineHeight = 1.2;