feat(ui): F8-11 — battles table under table submenu (#54)
Tests · UI / test (push) Successful in 2m53s
Tests · UI / test (pull_request) Successful in 3m0s

Adds a sortable battles list as a new entity under the existing
`view → table` submenu (entity slug `battles`), replacing the
standalone top-level `battle log` shortcut which always opened a
"battle not found" placeholder. The single-battle viewer stays put
and is reached only by clicking a row (or a battle marker on the
map), identical to the existing `section-battles.svelte` flow.

Columns are planet (via the shared `planetLabel` helper) and shots
(the per-battle action count carried by `BattleSummary`), sortable
both ways with shots-desc default. No backend / FBS / map changes:
the wire payload is unchanged. Participants / observers / total
mass require the full BattleReport and were intentionally dropped
to avoid N round trips per menu open.

The top-level `battle log` item is removed from `header/view-menu`
and `sidebar/bottom-tabs` (and their stale comment blocks updated);
the now-orphan `game.view.battle` i18n key is dropped from both
locales.
This commit is contained in:
Ilia Denisov
2026-05-27 22:12:51 +02:00
parent e4fbb6644c
commit 209f8508cd
10 changed files with 529 additions and 30 deletions
+8 -14
View File
@@ -5,12 +5,13 @@ hamburger (☰) at the 1024 px breakpoint via CSS only; the surface
itself is identical. The same component is reused for the mobile
"More" drawer entry of `bottom-tabs.svelte`.
Lists the seven IA destinations: map, tables (sub-list of six
entities), report, battle, mail, ship-class designer, science
designer. Each entry mutates `activeView` (the single-URL app-shell
has no per-view routes) and closes the menu. Closes on Escape, on
outside click, and after a selection. Phase 26 introduces the
history-mode entry; microcopy is refined in a later polish pass.
Lists the IA destinations: map, tables (sub-list of seven entities
including the battles roll-up that replaces the standalone battle-log
shortcut), report, mail, science designer. Each entry mutates
`activeView` (the single-URL app-shell has no per-view routes) and
closes the menu. Closes on Escape, on outside click, and after a
selection. Phase 26 introduces the history-mode entry; microcopy is
refined in a later polish pass.
-->
<script lang="ts">
import { onMount } from "svelte";
@@ -31,6 +32,7 @@ history-mode entry; microcopy is refined in a later polish pass.
{ slug: "fleets", key: "game.view.table.fleets" },
{ slug: "sciences", key: "game.view.table.sciences" },
{ slug: "races", key: "game.view.table.races" },
{ slug: "battles", key: "game.view.table.battles" },
];
function toggleOpen(): void {
@@ -120,14 +122,6 @@ history-mode entry; microcopy is refined in a later polish pass.
>
{i18n.t("game.view.report")}
</button>
<button
type="button"
role="menuitem"
data-testid="view-menu-item-battle"
onclick={() => select("battle")}
>
{i18n.t("game.view.battle")}
</button>
<button
type="button"
role="menuitem"