Commit 6416e4f
authored
refactor(ui): homogenize Account, Organization detail, and Admin pages (#4187)
* chore(git): ignore top-level .worktrees/ directory
* feat(core): add coreConfirmDialog shared destructive-confirm component
Options API dialog with simple yes/no, typed-confirmation gate, loading
mode, custom confirmColor/titleClass, and default slot override.
* feat(core): add coreAvatarUploader (v-badge camera overlay, no inline styles)
* test(core): use flushPromises in coreAvatarUploader test (cleaner than setTimeout)
* feat(admin): currentBreadcrumb state so sub-views push titles to the layout
* test(admin): split currentBreadcrumb test for clearer failure messages
* refactor(admin): banners on top, tabs in PageHeader, breadcrumb support for sub-views
* refactor(admin): resolveActiveTab uses allTabs (single source of truth)
* refactor(admin): drop v-container on list sub-views; users.view uses coreConfirmDialog
* refactor(admin): drop gratuitous div wrapper in admin.users.view (Vue 3 multi-root)
* refactor(admin): activity view — drop chrome + inline styles, use v-row/v-col + v-table hover
* refactor(admin): user detail — drop nested PageHeader, push breadcrumb, shared dialog
* refactor(users): profile component — coreAvatarUploader + native Vuetify labels, no inline styles
* refactor(users): drop dead isActiveOrg method from profile component
* refactor(admin): migrate layout to CoreSurfaceTabBar — chrome convergence with Account+Org
Drop inline v-tabs, activeTab data, $route watcher, isValidTab, tabTo, resolveActiveTab,
extraTabs computed. Replace with CoreSurfaceTabBar receiving allTabs (built-in + config extras)
and adminCan predicate. Matches user.view.vue + organization.detail.component.vue pattern.
* refactor(users): account dialogs — Delete Account + Leave Org use coreConfirmDialog
* refactor(organizations): detail — Delete Organization uses coreConfirmDialog with org-name gate
* fix(admin): remove unused beforeEach import in admin.user.view tests
* fix(admin): clear stale breadcrumb on blank user; fix org delete JSDoc
- publishBreadcrumb() now calls clearBreadcrumb() when the user record is
null/blank, preventing stale title display during same-component navigation
between /admin/users/:id routes (Copilot finding).
- Add test: "clears breadcrumb when user resets to blank record".
- Fix misleading JSDoc on deleteConfirmTarget() in organization.detail —
the confirm button is guarded by v-if on the trigger, not by the empty
confirmText fallback (Copilot finding).
* fix(review): address CodeRabbit + Copilot findings
- admin.users.view: replace inline :style binding on membership chips with
:class="cursor-pointer" (no-inline-style convention, CR finding)
- admin.activity.view: add keyboard semantics to expandable rows (tabindex=0,
role=button, aria-expanded, @keydown.enter+.space) + test (CR finding)
- organizations.detail layout test: fix tautological assertion for
deleteConfirmTarget null fallback (CR finding)
- admin.store: add full JSDoc (@param/@returns) to setBreadcrumb + clearBreadcrumb
- admin.layout: add @returns {void} to clearError
- admin.user.view: add JSDoc to user watcher handler + beforeUnmount
- admin.user.view test: add JSDoc to mountView helper
- admin.layout test: add JSDoc to mountLayout helper
- core.avatarUploader: add JSDoc to triggerUpload + onFile
- core.confirmDialog: add JSDoc to data, canConfirm, modelValue watcher,
onCancel, onConfirm; document the intentional non-self-close design
- user.profile.component: add @returns {void} to syncForm + syncOrganizations
- user.profile.component test: add JSDoc to mountProfile helper1 parent 9701f85 commit 6416e4f
27 files changed
Lines changed: 1387 additions & 774 deletions
File tree
- src/modules
- admin
- stores
- tests
- views
- core
- components
- tests
- organizations
- components
- tests
- users
- components
- tests
- views
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
81 | 81 | | |
82 | 82 | | |
83 | 83 | | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
55 | 55 | | |
56 | 56 | | |
57 | 57 | | |
| 58 | + | |
58 | 59 | | |
59 | 60 | | |
60 | 61 | | |
| |||
124 | 125 | | |
125 | 126 | | |
126 | 127 | | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
127 | 147 | | |
128 | 148 | | |
129 | 149 | | |
| |||
Lines changed: 41 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
181 | 181 | | |
182 | 182 | | |
183 | 183 | | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
0 commit comments