Update TGU 2D map spacecraft visibility controls

Switch the 2D map sidebar from single-spacecraft selection to per-spacecraft visibility toggles, add a show-all action, and update map tab labels and styles for the all-spacecraft view.
This commit is contained in:
Дмитрий Соловьев
2026-05-30 21:13:50 +03:00
parent 39f108e496
commit 3d508b6be9
6 changed files with 72 additions and 54 deletions
@@ -5,36 +5,41 @@ import type { Tgu2DMapLayerAvailability } from "./Tgu2DMapLayers";
type Tgu2DMapSidebarProps = {
platforms: TguPlatformUi[];
selectedSpacecraftId?: string;
selectedPlanId?: string;
hiddenIds: ReadonlySet<string>;
layers: Tgu2DMapLayersState;
search: string;
layerAvailability: Tgu2DMapLayerAvailability;
onSearchChange: (value: string) => void;
onSelectSpacecraft: (spacecraftId?: string) => void;
onToggleSpacecraft: (id: string) => void;
onShowAll: () => void;
onToggleLayer: (key: Tgu2DMapLayerKey) => void;
};
export function Tgu2DMapSidebar({
platforms,
selectedSpacecraftId,
selectedPlanId,
hiddenIds,
layers,
search,
layerAvailability,
onSearchChange,
onSelectSpacecraft,
onToggleSpacecraft,
onShowAll,
onToggleLayer
}: Tgu2DMapSidebarProps) {
const filteredPlatforms = filterPlatforms(platforms, search);
const hiddenCount = hiddenIds.size;
return (
<aside className="tgu-map-panel">
<div className="tgu-panel-heading">
<span>Карта 2D</span>
<button className="tgu-link-button" type="button" onClick={() => onSelectSpacecraft(undefined)}>
Все
</button>
{hiddenCount > 0 && (
<button className="tgu-link-button" type="button" onClick={onShowAll}>
Показать все ({hiddenCount} скрыто)
</button>
)}
</div>
<div className="tgu-map-panel__section">
<div className="tgu-map-panel__label">Выбранный план</div>
@@ -69,14 +74,17 @@ export function Tgu2DMapSidebar({
</div>
<div className="tgu-map-spacecraft-list">
{filteredPlatforms.map((platform) => {
const selected = selectedSpacecraftId === platform.spacecraftId;
const visible = !hiddenIds.has(platform.spacecraftId);
return (
<button
className={`tgu-map-spacecraft ${selected ? "is-selected" : ""}`}
type="button"
<label
className={`tgu-map-spacecraft ${visible ? "" : "is-hidden"}`}
key={platform.spacecraftId}
onClick={() => onSelectSpacecraft(platform.spacecraftId)}
>
<input
type="checkbox"
checked={visible}
onChange={() => onToggleSpacecraft(platform.spacecraftId)}
/>
<span>
<span className="tgu-map-spacecraft__name">{platformLabel(platform, platform.spacecraftId)}</span>
<span className="tgu-map-spacecraft__meta">
@@ -85,7 +93,7 @@ export function Tgu2DMapSidebar({
</span>
</span>
<span className="tgu-spacecraft__count">{platform.planCount}</span>
</button>
</label>
);
})}
{filteredPlatforms.length === 0 && <div className="tgu-empty tgu-empty--compact">Нет КА по текущему поиску.</div>}
@@ -107,4 +115,3 @@ export function Tgu2DMapSidebar({
</aside>
);
}