From 139d9e74eac2474fe10878e0b5094059b9b68e56 Mon Sep 17 00:00:00 2001 From: fisenko Date: Fri, 7 Nov 2025 07:59:11 +0000 Subject: [PATCH] =?UTF-8?q?#19=20=D0=A4=D0=B8=D0=BA=D1=81=20=D0=BE=D1=88?= =?UTF-8?q?=D0=B8=D0=B1=D0=BA=D0=B8=20=D0=B1=D0=B8=D0=BB=D0=B4=D0=B0=20+?= =?UTF-8?q?=20=D0=BD=D0=B0=D0=B7=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=BC=D0=B0=D1=80=D1=88=D1=80=D1=83=D1=82=D0=BE?= =?UTF-8?q?=D0=B2=20(#20)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-on: https://gitea.unprism.ru/KRBL/WhiteNightsAdminPanel/pulls/20 Reviewed-by: Микаэл Оганесян <15lu.akari@unprism.ru> Co-authored-by: fisenko Co-committed-by: fisenko --- src/pages/MapPage/index.tsx | 64 +- .../route-preview/web-gl/web-gl-version.tsx | 3450 ++++++++--------- src/shared/store/SightsStore/index.tsx | 4 + tsconfig.tsbuildinfo | 2 +- 4 files changed, 1786 insertions(+), 1734 deletions(-) diff --git a/src/pages/MapPage/index.tsx b/src/pages/MapPage/index.tsx index 33fdf5d..ab72571 100644 --- a/src/pages/MapPage/index.tsx +++ b/src/pages/MapPage/index.tsx @@ -124,6 +124,7 @@ export const clearMapCaches = () => { interface ApiRoute { id: number; route_number: string; + route_name: string; path: [number, number][]; center_latitude: number; center_longitude: number; @@ -370,6 +371,7 @@ class MapStore { this.routes = routeResponses.map((res) => ({ id: res.data.id, route_number: res.data.route_number, + route_name: res.data.route_name || "", path: res.data.path, center_latitude: res.data.center_latitude, center_longitude: res.data.center_longitude, @@ -2302,6 +2304,8 @@ const MapSightbar: React.FC = observer( }); feature.setId(`route-${route.id}`); feature.set("featureType", "route"); + feature.set("routeName", route.route_name); + feature.set("routeNumber", route.route_number); return feature; }); @@ -2317,11 +2321,18 @@ const MapSightbar: React.FC = observer( const filteredFeatures = useMemo(() => { if (!searchQuery.trim()) return allFeatures; - return allFeatures.filter((f) => - ((f.get("name") as string) || "") - .toLowerCase() - .includes(searchQuery.toLowerCase()) - ); + const normalizedQuery = searchQuery.toLowerCase(); + return allFeatures.filter((f) => { + const candidates = [ + (f.get("name") as string) || "", + (f.get("description") as string) || "", + (f.get("routeName") as string) || "", + (f.get("routeNumber") as string) || "", + ]; + return candidates.some((value) => + value.toLowerCase().includes(normalizedQuery) + ); + }); }, [allFeatures, searchQuery]); const handleFeatureClick = useCallback( @@ -2649,6 +2660,38 @@ const MapSightbar: React.FC = observer( featureType === "station" && description && description.trim() !== ""; + const routeName = + featureType === "route" + ? (feature.get("routeName") as string) || "" + : ""; + const routeNumber = + featureType === "route" + ? (feature.get("routeNumber") as string) || fName + : ""; + const routeNumberTrimmed = routeNumber.trim(); + const routeNameTrimmed = routeName.trim(); + const displayName = + featureType === "route" ? routeNumberTrimmed || fName : fName; + const showRouteName = + featureType === "route" && + routeNameTrimmed !== "" && + routeNameTrimmed !== displayName; + const titleParts: string[] = []; + if (featureType === "route") { + if (routeNumberTrimmed) { + titleParts.push(routeNumberTrimmed); + } + if (routeNameTrimmed) { + titleParts.push(routeNameTrimmed); + } + } + const titleText = + featureType === "route" + ? titleParts.join(" • ") || + routeNumberTrimmed || + routeNameTrimmed || + fName + : fName; return (
= observer( checked={isChecked} onChange={() => handleCheckboxChange(fId)} onClick={(e) => e.stopPropagation()} - aria-label={`Выбрать ${fName}`} + aria-label={`Выбрать ${titleText}`} />
= observer( - {fName} + {displayName}
{showDescription && ( @@ -2702,6 +2745,11 @@ const MapSightbar: React.FC = observer( {description} )} + {showRouteName && ( +
+ {routeNameTrimmed} +
+ )}