Files
sim/apps
Waleed e39045d94e improvement(data-drains): move drains to the fullscreen list/detail pattern (#5954)
* improvement(data-drains): move drains to the fullscreen list/detail pattern

Data drains was the last settings surface still on a Table plus a create
modal. It now matches Skills and Custom Tools:

- the list is SettingsResourceRow rows in a clickable button, with the
  source, destination, cadence, and last run on the row and a Disabled tag
  when a drain is paused
- clicking a row opens a detail sub-view: the drain's actions (Run now /
  Test connection / Delete), its enabled toggle, resolved destination
  config, and recent run history — replacing the expanding table row
- creating a drain is a fullscreen view instead of a modal, reusing the
  destination form registry so the two never fork
- a drain's detail is deep-linkable via `data-drain-id`, pushed on open and
  replaced on close, matching custom-tool-id and custom-block-id

The detail is read-only apart from the enabled toggle: destination
credentials are never returned by the API, so changing one means recreating
the drain.

Alignment work the migration surfaced:

- the destination registry rendered its 36 fields with ChipModalField, whose
  label is byte-identical to a SettingsSection header — on a page that made
  section titles and field labels indistinguishable. All of them, and the
  create view's own fields, now use SettingRow like every other page-level
  detail view
- the shared source/destination/cadence label maps moved to labels.ts, now
  that three files need them
- run status uses Badge with a dot rather than hand-coloured text, and byte
  counts use formatFileSize — the old /1024 math showed a 5 GB export as
  "5242880.0 KB"
- copy follows the sibling surfaces: Create drain, Disabled, Run queued,
  Connection test passed, and "No drains found matching …"
- seed the list cache on create so landing on the new drain's detail doesn't
  depend on the invalidation refetch succeeding

* fix(data-drains): wire destination field labels to their controls

The ChipModalField -> SettingRow migration dropped the label/control
association that ChipModalField generated for free, so screen readers
announced the destination fields unnamed and clicking a label focused
nothing. All 35 id-capable controls now carry an id with a matching htmlFor
on their row; the one ChipSelect has no id prop, matching how the existing
SettingRow + combobox rows render.

Also pass includeBytes to formatFileSize — without it any run writing under
1 KB reported '0 Bytes'.

* fix(data-drains): name the select fields for assistive tech

ChipSelect takes an aria-label that lands on its trigger button, so the four
select fields no longer announce as unnamed buttons — the Datadog site plus
the create view's source, cadence, and destination type. The visible
SettingRow label stays; this only gives the trigger an accessible name,
since ChipSelect exposes no id for htmlFor to point at.
2026-07-24 19:49:16 -07:00
..