feat(console): add enterprise-only license banner#6342
Conversation
|
Claude finished @luannmoreira's task in 54s —— View job Code Review CompleteReviewed 5 files. 3 inline issues posted (2 high, 1 medium).
Additional notesThe core recommendation for issues 1 and 2 is to remove If you've addressed the feedback and want a new review, tag |
00f8628 to
96601c8
Compare
|
/review |
|
Claude finished @gustavosbarreto's task in 11m 22s —— View job Code Review CompleteReviewed 3 files. 3 inline issues posted (3 high).
Additional notesThe previous review's three issues (wrong type name, dual cache, weak assertion) have all been addressed — If you've addressed the feedback and want a new review, tag |
0d51de6 to
2c10c56
Compare
2c10c56 to
dacbedc
Compare
|
/review |
|
Claude finished @otavio's task in 57s —— View job Code Review CompleteReviewed 3 files across code quality, security, testing, TypeScript/React patterns, and architecture — no issues found. The previous review's three issues (missing
The code looks good as-is. If you push additional changes and want a new review, tag |
What
Adds a persistent status banner to the React console
AppLayoutthatalerts enterprise users when the instance license is missing, expired, or
nearing expiration.
Why
Enterprise deployments are self-managed — when the license is invalid the
instance silently degrades. Users need an actionable in-product signal
rather than discovering the problem after the fact.
Cloud is intentionally excluded: in that environment the license is managed
by the provider and end users have no path to upload a new one.
Changes
api/license.ts: thin wrapper aroundGET /admin/api/license,typed against the generated
GetLicenseResponses[200]stores/licenseStore.ts: Zustand store that fetches on demand andcomputes
daysUntilExpiration; 403/network errors are silently swallowedso the banner never appears for non-admin users or in non-enterprise builds
LicenseBanner.tsx: animated collapse banner mounted inAppLayoutabove the main content area. Severity is split by intent — a missing
license is an error (red/
role="alert"), while expired, grace-period, andabout-to-expire states are warnings (yellow/
role="status"). The CTArenders as an upload link for admins and as "Contact your administrator"
for non-admins.
aria-hidden={!visible}keeps the collapsed content outof the accessibility tree.
LicenseBanner.test.tsx: 23 unit tests covering visibility rules,severity mapping, message copy, admin/non-admin action, and fetch
lifecycle.