Repository navigation
feat(ui): rebuild the admin dashboard around the instance - #7302
Conversation
|
Claude finished @gustavosbarreto's task in 5m 57s —— View job Code Review CompleteI reviewed 25 files and posted 3 inline issues: 1 Standards violation, 1 Standards judgement call and 1 Correctness defect. The Spec axis did not run (see below). Standards
CorrectnessIn SpecThe Spec axis did not run because the PR references no issue to review against. Additional notes
To request another review round, comment |
62cfb30 to
d5138bb
Compare
|
/review |
d5138bb to
0916d82
Compare
|
/review |
|
Claude finished @gustavosbarreto's task in 8m 53s —— View job Code Review CompleteI reviewed 35 files and posted 3 inline issues: no Standards violations, 2 Standards judgement calls and 1 Correctness defect. The Spec axis did not run. StandardsThe worst one is Duplicated Code. Correctness
SpecThe Spec axis did not run because the PR references no issue to review against. Additional notes
To request another review round, comment |
0916d82 to
a171681
Compare
|
/review |
|
Claude finished @gustavosbarreto's task in 5m 36s —— View job Code Review CompleteI reviewed 36 files and posted 4 inline issues: 3 Standards judgement calls (no violations) and 1 Correctness defect. The Spec axis did not run. StandardsThe most significant judgement call is Divergent Change.
Correctness
SpecThe Spec axis did not run: the PR references no issue to review against. Additional notes
To request another review round, comment |
a171681 to
4e0e82d
Compare
|
/review |
|
Claude finished @gustavosbarreto's task in 10m 17s —— View job Code Review CompleteI reviewed 37 files and posted 2 inline issues, both Standards judgement calls. There are no Standards violations and no Correctness defects. The Spec axis did not run. StandardsThe most significant finding is Duplicated Code. The other judgement call: SpecThe Spec axis did not run because the PR references no issue to review against. Additional notes
To request another review round, comment |
4e0e82d to
f3c84e5
Compare
|
/review |
a7ca565 to
49d0730
Compare
a6b1fa4 to
aafa2d3
Compare
|
/review |
|
Claude finished @gustavosbarreto's task in 5m 48s —— View job Code Review CompleteI reviewed 38 files and posted 3 inline issues:
StandardsThe violation is in
SpecThe Spec axis did not run because the PR doesn't reference an issue to review against. Additional notes
To request another review round, comment |
aafa2d3 to
57a4953
Compare
|
/review |
|
Claude finished @gustavosbarreto's task in 2m 44s —— View job Code Review CompleteI reviewed 39 files and posted 2 inline issues:
StandardsThe judgement call is in Correctness
SpecThe Spec axis did not run because the PR references no issue to review against. Additional notes
To request another review round, comment |
57a4953 to
fea78db
Compare
|
/review |
|
Claude finished @gustavosbarreto's task in 8m 55s —— View job Code Review CompleteI reviewed 40 files and posted 2 inline issues:
StandardsThe judgement call is in Correctness
SpecThe Spec axis did not run because the PR references no issue to review against. Additional notes
To request another review round, comment |
fea78db to
c4dc012
Compare
|
/review |
|
Claude finished @gustavosbarreto's task in 2m 22s —— View job Code Review CompleteI reviewed 40 files and posted 1 inline issue:
StandardsThe judgement call is in SpecThe Spec axis did not run because the PR references no issue to review against. Additional notes
To request another review round, comment |
The six counters and the recent sessions repeated what a namespace already shows. The page becomes Instance and differs by edition. Enterprise leads with what waits on the instance admin: members a non-admin namespace owner added, who stay awaiting approval until an instance admin approves them, and a license that is expiring or out of devices. Cloud has open signup and no approval step, so it shows the instance's figures and no list of people. The admin namespace list returns members empty, so finding the namespace a pending member is joining takes one detail request per namespace. The scan stops at 10 namespaces; a member of a namespace past that is listed without "joining". The user filter grammar holds a single operator for all conditions, so it cannot express (name OR username OR email) AND subset. Search on the All tab matches the three fields; under a tab it falls back to username. expires_at <= 0 is a license that never expires on the server, shown as Never rather than the date or "Now". The Cloud device and session figures link nowhere: the admin pages for them were removed. LicenseGuard already sends an expired license, grace period included, and a failed license fetch to the license page. The grace-period notice and the failed-license line on Instance only show when a background refetch turns stale data into that state while the page is open. A figure checks failure before loading because a failed list request still reports a zero total, which would otherwise read as the answer. FilterTabs selects a tab as soon as the arrow keys reach it (automatic activation): a filter has nothing to preview before it applies. Past the device limit the cloud firewall refuses every connection, not just new accepts, so that case gets its own notice. A license whose starts_at is in the future refuses every device accept until then, so it gets a notice of its own.
c4dc012 to
6972d26
Compare
|
/review |
|
Claude finished @gustavosbarreto's task in 2m 8s —— View job Code Review CompleteI reviewed 40 files on Standards (repo rules, React conventions, tests, code smells) and on Correctness (security and runtime defects). I found no new issues. The Spec axis did not run because the PR references no issue to review against. |
Summary
The admin dashboard showed six counters and a recent-sessions table, which repeat what a namespace already shows. It becomes Instance, and its content depends on the edition.
On Enterprise, a namespace owner who is not an instance admin can invite someone, and that account waits for an instance admin's approval. The dashboard lists these requests together with the namespace each person is joining. Cloud has open signup and no approval step, so it shows instance figures and no list of people.
Admin users list:
Also:
deviceCapacityinutils/licensenow holds the 90% / limit rule, andDeviceLimitBanneruses it too.useServerInforeads/api/info, anduseSshEndpointnow goes through it.Everything uses endpoints that already exist; the backend is unchanged.
Evidence
After: Enterprise shows pending members with "joining acme" / "joining dev", a License panel (accepted devices, Expires, Issued to) and Access/Server. Cloud shows the numbers strip with Access/Server.
Instance.test.tsxreplaces the old dashboard test and covers both editions: member requests with their namespace, approve and reject hitting the right endpoints, the empty state waiting for the license, the grace-period and device-limit notices, unlimited and non-expiring licenses, the Access counts and links, server info, a failed request leaving the rest of the page, and the Cloud figures with no people or license.AdminUsers.test.tsx: the filter sent for each?subset=, a subset combined with the search underand, awaiting approval ignored outside Enterprise, and Reject on a pending account opening the reject dialog.Merge Danger
Door: two-way
UI only. Reverting the PR restores the old page.
Blast Radius: admin console
/admin/dashboardto/admin/instancewith no redirect. A workspace tab or bookmark saved on the old path lands on a missing route.