feat(admin): mount command palette + plumb addons to sidebar
- mount <CommandPalette /> in admin layout (Cmd+K) - fetch getEnabledAddons(activeBrandId) for sidebar gating - pass enabledAddons to AdminSidebar so Water Log / Route Trace hide when off
This commit is contained in:
@@ -41,9 +41,9 @@ git branch -D design/ui-revamp-2026-06 # delete the branch
|
|||||||
|
|
||||||
| Done | Task | Files | Notes | Commit |
|
| Done | Task | Files | Notes | Commit |
|
||||||
|---|---|---|---|---|
|
|---|---|---|---|---|
|
||||||
| [ ] | Replace `--admin-*` color tokens in admin-design-system.css | `src/styles/admin-design-system.css` | use spec §3 table. Drop the muddy `aba278` warning, the purple stat icons, the blue stat icons. | `style(admin): unify color tokens` |
|
| [x] | Replace `--admin-*` color tokens in admin-design-system.css | `src/styles/admin-design-system.css` | use spec §3 table. Drop the muddy `aba278` warning, the purple stat icons, the blue stat icons. | `style(admin): unify color tokens` (18fb44e) |
|
||||||
| [ ] | Update `globals.css` if any admin colors live there | `src/app/globals.css` | grep for `admin-accent`, `admin-bg` | (same commit) |
|
| [x] | Update `globals.css` if any admin colors live there | `src/app/globals.css` | grep for `admin-accent`, `admin-bg` | (same commit) |
|
||||||
| [ ] | Remove inline `#fef3c7` / `#dbeafe` / `#f3e8ff` from stat cards in DashboardClient | `src/components/admin/DashboardClient.tsx` | semantic colors only | `style(admin): semantic stat colors` |
|
| [x] | Remove inline `#fef3c7` / `#dbeafe` / `#f3e8ff` from stat cards in DashboardClient | `src/components/admin/DashboardClient.tsx` | semantic colors only | (same commit) |
|
||||||
|
|
||||||
## Phase 2 — Discoverability (sidebar + command palette)
|
## Phase 2 — Discoverability (sidebar + command palette)
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ import { ToastProvider } from "@/components/admin/Toast";
|
|||||||
import { ToastContainer } from "@/components/admin/ToastContainer";
|
import { ToastContainer } from "@/components/admin/ToastContainer";
|
||||||
import { SmoothViewTransition } from "@/components/transitions/SmoothViewTransition";
|
import { SmoothViewTransition } from "@/components/transitions/SmoothViewTransition";
|
||||||
import { RouteAnnouncer } from "@/components/transitions/RouteAnnouncer";
|
import { RouteAnnouncer } from "@/components/transitions/RouteAnnouncer";
|
||||||
|
import CommandPalette from "@/components/admin/CommandPalette";
|
||||||
|
import { getEnabledAddons } from "@/actions/billing/stripe-portal";
|
||||||
|
|
||||||
// Admin layout calls getAdminUser() which reads cookies(). Without this,
|
// Admin layout calls getAdminUser() which reads cookies(). Without this,
|
||||||
// Next.js tries to prerender the entire /admin/* tree statically and the
|
// Next.js tries to prerender the entire /admin/* tree statically and the
|
||||||
@@ -99,6 +101,17 @@ export default async function AdminLayout({ children }: { children: React.ReactN
|
|||||||
console.error("[admin/layout] listBrandsForAdmin failed:", err);
|
console.error("[admin/layout] listBrandsForAdmin failed:", err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fetch enabled add-ons for the active brand. Used to gate Water Log /
|
||||||
|
// Route Trace visibility in the sidebar. Empty object = all show.
|
||||||
|
let enabledAddons: Record<string, boolean> = {};
|
||||||
|
if (activeBrandId) {
|
||||||
|
try {
|
||||||
|
enabledAddons = await getEnabledAddons(activeBrandId);
|
||||||
|
} catch (err) {
|
||||||
|
console.error("[admin/layout] getEnabledAddons failed:", err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ToastProviderWrapper>
|
<ToastProviderWrapper>
|
||||||
<AdminSidebar
|
<AdminSidebar
|
||||||
@@ -106,7 +119,10 @@ export default async function AdminLayout({ children }: { children: React.ReactN
|
|||||||
brandIds={adminUser.brand_ids}
|
brandIds={adminUser.brand_ids}
|
||||||
activeBrandId={activeBrandId}
|
activeBrandId={activeBrandId}
|
||||||
brands={brands}
|
brands={brands}
|
||||||
|
enabledAddons={enabledAddons}
|
||||||
/>
|
/>
|
||||||
|
{/* Cmd+K command palette — mounted globally so any admin page can summon it */}
|
||||||
|
<CommandPalette />
|
||||||
{/* The main content area swaps on every navigation. Wrapping
|
{/* The main content area swaps on every navigation. Wrapping
|
||||||
it in <SmoothViewTransition> opts the swap into a soft
|
it in <SmoothViewTransition> opts the swap into a soft
|
||||||
crossfade via the View Transitions API — sidebar and
|
crossfade via the View Transitions API — sidebar and
|
||||||
|
|||||||
Reference in New Issue
Block a user