web+tui: honor enumNames in enum forms (#1750)
* web+tui: honor enumNames in enum forms (#1691) Legacy titled enums (`enum` + non-standard `enumNames`) rendered their raw wire values instead of the human-readable titles in both the web SchemaForm and the TUI schemaToForm builder, so a user picking "pet-1" had no idea it meant "Cats". Web (SchemaForm.tsx): extract a `toEnumData` helper that zips `enum` with `enumNames` into `{ value, label }[]` when the lengths match, falling back to bare values otherwise. Use it in both the string-enum and array multi-select branches (the latter previously inlined the same zip). TUI (schemaToForm.ts): add `enumNames` / `items.enumNames` to the property interface and a `toSelectOptions` helper used by the single-select and array-of-enum branches, labeling by `enumNames[i]` when length-matched and falling back to `String(val)`. Both guard on the arrays being the same length: a wrong-length zip would mislabel options, which is worse than showing raw values. Raw values are always submitted; only the display label changes. Closes #1691 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XNdjEPKLG637X8YmhDiEk5 * docs(pr-screenshots): TUI enumNames before/after proof shots (#1691) Before/after captures of the TUI tool-test form (schemaToForm -> ink-form) against a legacy titled enum: with the fix the field resolves pet-1 -> "Cats"; before, it showed the raw "pet-1". Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XNdjEPKLG637X8YmhDiEk5 --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
402d7b204d
commit
8c41dcd383
3 changed files with 240 additions and 19 deletions
|
|
@ -1,3 +1,32 @@
|
|||
# TUI enum forms honor `enumNames` (#1691) — proof screenshots
|
||||
|
||||
The TUI tool-test form (`schemaToForm` → `ink-form`) rendered against a legacy
|
||||
titled enum: `enum: [pet-1 … pet-5]` paired with the non-standard
|
||||
`enumNames: [Cats … Reptiles]`, `default: "pet-1"`. Captured non-interactively
|
||||
(a standalone render of the real `ink-form` built by the real `schemaToForm`;
|
||||
the Ink TUI can't take live keystrokes in a headless pty).
|
||||
|
||||

|
||||
|
||||
**With the fix:** the required **Favorite Pet** field resolves the default
|
||||
`pet-1` to its human title **"Cats"**. The submitted value stays the raw
|
||||
`pet-1` — only the display label changes. (`Plain Enum`, which has no
|
||||
`enumNames`, is unaffected.)
|
||||
|
||||

|
||||
|
||||
**Before the fix** (same schema with `enumNames` stripped, reproducing the old
|
||||
behavior): the field shows the opaque wire value **"pet-1"** with no indication
|
||||
it means "Cats".
|
||||
|
||||
Ground-truth options from the real `schemaToForm` confirm the label↔value
|
||||
pairing and the length-guarded fallbacks: `pet` → `Cats=>pet-1 … Reptiles=>pet-5`;
|
||||
array-of-enum `sizes` → `Small=>s | Medium=>m | Large=>l`; a mismatched-length
|
||||
`enumNames` (2 names, 3 values) falls back to raw `a=>a | b=>b | c=>c`. The web
|
||||
side of this fix is covered by `SchemaForm.test.tsx`.
|
||||
|
||||
---
|
||||
|
||||
# Server Settings OAuth field disambiguation under EMA (#1692) — proof screenshots
|
||||
|
||||
The **Server Settings → OAuth Settings** fields, rendered from the
|
||||
|
|
|
|||
BIN
pr-screenshots/tui-enumnames-after-cats.png
Normal file
BIN
pr-screenshots/tui-enumnames-after-cats.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 38 KiB |
BIN
pr-screenshots/tui-enumnames-before-raw.png
Normal file
BIN
pr-screenshots/tui-enumnames-before-raw.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 38 KiB |
Loading…
Reference in a new issue