Kiosk: find a free drive by typing, and use the width of the panel
Some checks failed
CI / naming (push) Successful in 2m13s
CI / frontend (push) Successful in 1m19s
CI / migrations-mysql (push) Failing after 6m11s
CI / backend (push) Has been cancelled

A cabinet of thirty drives was one long column to read through. The free list
now filters from a search box and lays out in as many columns as the panel is
wide - four on a wall display, two on a tablet, one on a phone - while the
steps that hold a single control stay narrow, because stretching one input
across a 24 inch screen reads as a broken page.

A drive is found by its id, by what is written on it, or by where it lives. The
words can arrive in any order, and "locker" is part of what is searched, so
"locker engineer" finds the engineering locker - that is how people say it out
loud. Filtering is client-side: every free drive is already on the screen, and a
round trip per keystroke on a wall panel would be worse than no filter at all.
The matcher lives in its own module with tests rather than inside the view.

The box takes focus as the picker opens so somebody can simply start typing,
and it is cleared when the kiosk resets - the next person at the cabinet must
not inherit a filter and conclude there are no drives left.

Also: both this view and the guides blocks coloured muted text with a
`--textmuted` variable this app has never defined. The browser dropped the
declaration, so every hint, subtitle and locker line was rendering at full
strength. The variable is `--text-light`.
This commit is contained in:
cproudlock
2026-08-27 10:35:11 -04:00
parent 11f39253c2
commit 605dd6cb1b
5 changed files with 190 additions and 13 deletions

View File

@@ -24,6 +24,12 @@ ADR-007 and ADR-002.
### Fixed
- **Muted text on the USB kiosk and in guides was not muted.** Both named a
`--textmuted` variable this app has never defined, so the browser dropped the
declaration and the hints, subtitles and locker lines rendered at full
strength against the text they were meant to sit behind. The variable is
`--text-light`.
- **Plugin reports rendered a raw JSON dump.** The reports page ran a hardcoded
switch over five core report ids and fell through to
`console.error('Unknown report')`, and its results panel was a matching chain
@@ -77,6 +83,13 @@ ADR-007 and ADR-002.
left behind by somebody on leave would then be unreturnable at the kiosk,
which just moves the problem to a person with a login.
The list of free drives is filtered from a search box, and lays itself out in
as many columns as the panel is wide - up to four on a wall display. A cabinet
of thirty drives was one long column somebody had to read through. A drive is
found by its id, by what is written on it, or by where it lives, in whatever
word order comes naturally: "locker engineer" finds the engineering locker,
because that is what people say.
- **Audit log retention.** The audit log is append-only and nothing ever removed
a row, so it grew for as long as a site ran - here to the point where the
audit page was tens of thousands of pages deep and therefore useless, because