feat(spaces): member add validation + feedback (#217) #225

Merged
Cordy merged 3 commits from feat-member-picker into main 2026-08-13 17:13:33 +00:00
Owner

Members dialog UX for #217.

  • Live validation on the add-member field: as the owner types, validateMember() checks the (already-fetched) members + owner and shows inline status — "already a member — change their role above" or "the owner always has full access" — and disables Add for those cases, so there's no silent no-op.
  • Clear feedback: a successful add shows "Added {u}." instead of the generic hint; state resets correctly on dialog open and after add.
  • Refresh stores the current owner + member set so validation stays in sync after any change.

Scope note (deferred part of #217): the candidate dropdown + autocomplete needs an enumerable user directory. On OIDC without an admin read-client — the openbao dogfood's case — users aren't enumerable, so a dropdown would be empty; the validated free-text field is the correct fallback there. A candidate source (local users, or the IdP read-client from #215) can feed a <datalist> later as a small follow-up; I'll note that on the issue rather than pretend it's universal.

JS validated with node --check. i18n added for the three new strings (EN/DE/FR/IT).

Members dialog UX for #217. - **Live validation** on the add-member field: as the owner types, `validateMember()` checks the (already-fetched) members + owner and shows inline status — "already a member — change their role above" or "the owner always has full access" — and **disables Add** for those cases, so there's no silent no-op. - **Clear feedback**: a successful add shows "Added {u}." instead of the generic hint; state resets correctly on dialog open and after add. - Refresh stores the current owner + member set so validation stays in sync after any change. **Scope note (deferred part of #217):** the candidate *dropdown + autocomplete* needs an enumerable user directory. On OIDC without an admin read-client — the openbao dogfood's case — users aren't enumerable, so a dropdown would be empty; the validated free-text field is the correct fallback there. A candidate source (local users, or the IdP read-client from #215) can feed a `<datalist>` later as a small follow-up; I'll note that on the issue rather than pretend it's universal. JS validated with `node --check`. i18n added for the three new strings (EN/DE/FR/IT).
scaffold: run #217
All checks were successful
ship217 / edit (push) Successful in 6s
06443bc0e4
feat(spaces): member add validation + feedback (#217)
All checks were successful
ci / test-and-build (pull_request) Successful in 34s
2796b6d024
Cordy merged commit 7b0d3fffe3 into main 2026-08-13 17:13:33 +00:00
Cordy deleted branch feat-member-picker 2026-08-13 17:13:35 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Cordy/Cairn#225
No description provided.