#19 Фикс ошибки билда + название для маршрутов (#20)

Reviewed-on: #20
Reviewed-by: Микаэл Оганесян <15lu.akari@unprism.ru>
Co-authored-by: fisenko <kkzemeow@gmail.com>
Co-committed-by: fisenko <kkzemeow@gmail.com>
This commit is contained in:
2025-11-07 07:59:11 +00:00
parent 03fd04a420
commit 139d9e74ea
4 changed files with 1786 additions and 1734 deletions

View File

@@ -124,6 +124,7 @@ export const clearMapCaches = () => {
interface ApiRoute { interface ApiRoute {
id: number; id: number;
route_number: string; route_number: string;
route_name: string;
path: [number, number][]; path: [number, number][];
center_latitude: number; center_latitude: number;
center_longitude: number; center_longitude: number;
@@ -370,6 +371,7 @@ class MapStore {
this.routes = routeResponses.map((res) => ({ this.routes = routeResponses.map((res) => ({
id: res.data.id, id: res.data.id,
route_number: res.data.route_number, route_number: res.data.route_number,
route_name: res.data.route_name || "",
path: res.data.path, path: res.data.path,
center_latitude: res.data.center_latitude, center_latitude: res.data.center_latitude,
center_longitude: res.data.center_longitude, center_longitude: res.data.center_longitude,
@@ -2302,6 +2304,8 @@ const MapSightbar: React.FC<MapSightbarProps> = observer(
}); });
feature.setId(`route-${route.id}`); feature.setId(`route-${route.id}`);
feature.set("featureType", "route"); feature.set("featureType", "route");
feature.set("routeName", route.route_name);
feature.set("routeNumber", route.route_number);
return feature; return feature;
}); });
@@ -2317,11 +2321,18 @@ const MapSightbar: React.FC<MapSightbarProps> = observer(
const filteredFeatures = useMemo(() => { const filteredFeatures = useMemo(() => {
if (!searchQuery.trim()) return allFeatures; if (!searchQuery.trim()) return allFeatures;
return allFeatures.filter((f) => const normalizedQuery = searchQuery.toLowerCase();
((f.get("name") as string) || "") return allFeatures.filter((f) => {
.toLowerCase() const candidates = [
.includes(searchQuery.toLowerCase()) (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]); }, [allFeatures, searchQuery]);
const handleFeatureClick = useCallback( const handleFeatureClick = useCallback(
@@ -2649,6 +2660,38 @@ const MapSightbar: React.FC<MapSightbarProps> = observer(
featureType === "station" && featureType === "station" &&
description && description &&
description.trim() !== ""; 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 ( return (
<div <div
@@ -2667,7 +2710,7 @@ const MapSightbar: React.FC<MapSightbarProps> = observer(
checked={isChecked} checked={isChecked}
onChange={() => handleCheckboxChange(fId)} onChange={() => handleCheckboxChange(fId)}
onClick={(e) => e.stopPropagation()} onClick={(e) => e.stopPropagation()}
aria-label={`Выбрать ${fName}`} aria-label={`Выбрать ${titleText}`}
/> />
</div> </div>
<div <div
@@ -2692,9 +2735,9 @@ const MapSightbar: React.FC<MapSightbarProps> = observer(
<span <span
className={`font-medium whitespace-nowrap overflow-x-auto block className={`font-medium whitespace-nowrap overflow-x-auto block
scrollbar-visible`} scrollbar-visible`}
title={fName} title={titleText}
> >
{fName} {displayName}
</span> </span>
</div> </div>
{showDescription && ( {showDescription && (
@@ -2702,6 +2745,11 @@ const MapSightbar: React.FC<MapSightbarProps> = observer(
{description} {description}
</div> </div>
)} )}
{showRouteName && (
<div className="mt-1 text-xs text-gray-600">
{routeNameTrimmed}
</div>
)}
</div> </div>
<div className="flex-shrink-0 flex items-center space-x-1 opacity-60 group-hover:opacity-100"> <div className="flex-shrink-0 flex items-center space-x-1 opacity-60 group-hover:opacity-100">
<button <button

File diff suppressed because it is too large Load Diff

View File

@@ -132,12 +132,16 @@ class SightsStore {
common: boolean common: boolean
) => { ) => {
if (common) { if (common) {
// @ts-ignore
this.sight!.common = { this.sight!.common = {
// @ts-ignore
...this.sight!.common, ...this.sight!.common,
...content, ...content,
}; };
} else { } else {
// @ts-ignore
this.sight![language] = { this.sight![language] = {
// @ts-ignore
...this.sight![language], ...this.sight![language],
...content, ...content,
}; };

File diff suppressed because one or more lines are too long