Commit 31357ec
Switch Variables tab Add form to on-submit validation
Replace the reactive (per-keystroke) Angular form-state validation with
a validate-on-click flow that pairs better with the L5 inline-form
pattern.
Why: reactive validation produced two surprises in the new L5 layout.
First, "Name is required" appeared after a type-then-erase ("xx" then
backspace) because Angular's `dirty` flag never resets to `pristine` —
the field was visually identical to its initial state but flagged
invalid. Second, inline error messages below the input pushed the
form's box height past the 42px input, breaking the row's pixel
stability.
What changed:
- Drop the `<form #addForm>` wrapper, the `required`/`[appUnique]`
validators on the Name input, and `[disabled]="!addForm.valid"` on
the ✓ button.
- Validation now runs in the new `validateAndSave()` click handler:
required (non-empty, non-whitespace), pattern
(`/^[A-Za-z_][A-Za-z0-9_]*$/` — CF env var convention), and
uniqueness against `envVarNames()`. On any failure the click
handler populates the new `nameError` signal; on success it calls
`envVarsDataSource.saveAdd()`.
- Render the error in an absolute-positioned `<div>` above the Name
input, sitting in the L5 row's 12px top-padding zone — out of flow,
so the row stays at 68px in every state (closed, open empty, open
with required error, open with pattern error, open with duplicate
error).
- Clear the error reactively as the user types (`(input)`) and on
cancel (×) so a stale error doesn't carry across open/close cycles.
- Drop the `UniqueDirective` import along with the validator removal;
uniqueness is now checked manually in `validateAndSave()`.
- Drop `[addForm]="addForm"` from the `<app-list>` — the legacy list
no longer needs to know about the form since it lives in the L5
sub-nav.
Tests: 6 new vitest cases covering validateAndSave (empty, whitespace,
space in name, leading digit, valid input clears prior error) and
clearNameError.1 parent 2beb91d commit 31357ec
3 files changed
Lines changed: 119 additions & 22 deletions
File tree
- src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/variables-tab
Lines changed: 22 additions & 19 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | | - | |
11 | | - | |
12 | | - | |
13 | | - | |
14 | | - | |
15 | | - | |
16 | | - | |
17 | | - | |
18 | | - | |
19 | | - | |
20 | | - | |
21 | | - | |
22 | | - | |
23 | | - | |
24 | | - | |
25 | | - | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
26 | 29 | | |
27 | 30 | | |
28 | | - | |
| 31 | + | |
29 | 32 | | |
30 | 33 | | |
31 | 34 | | |
32 | 35 | | |
33 | | - | |
| 36 | + | |
34 | 37 | | |
35 | 38 | | |
36 | 39 | | |
37 | 40 | | |
38 | | - | |
| 41 | + | |
39 | 42 | | |
40 | 43 | | |
41 | 44 | | |
| |||
Lines changed: 51 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
56 | 56 | | |
57 | 57 | | |
58 | 58 | | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
59 | 110 | | |
Lines changed: 46 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
| 2 | + | |
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
20 | | - | |
21 | 20 | | |
22 | 21 | | |
23 | 22 | | |
| |||
49 | 48 | | |
50 | 49 | | |
51 | 50 | | |
52 | | - | |
53 | 51 | | |
54 | 52 | | |
55 | 53 | | |
| |||
103 | 101 | | |
104 | 102 | | |
105 | 103 | | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
106 | 149 | | |
107 | 150 | | |
108 | 151 | | |
| |||
0 commit comments