From 69470e8e4a2a85f1f898919f439f05469b47acd2 Mon Sep 17 00:00:00 2001 From: chan Date: Wed, 4 Mar 2026 09:41:49 +0900 Subject: [PATCH] feat(adminfront): remove unused tenant dashboard and update global overview quick links --- adminfront/src/app/routes.tsx | 2 - .../src/components/layout/AppLayout.tsx | 5 - .../src/features/dashboard/DashboardPage.tsx | 243 ------------------ .../features/overview/GlobalOverviewPage.tsx | 25 +- adminfront/src/locales/en.toml | 8 +- adminfront/src/locales/ko.toml | 4 +- adminfront/src/locales/template.toml | 4 +- 7 files changed, 27 insertions(+), 264 deletions(-) delete mode 100644 adminfront/src/features/dashboard/DashboardPage.tsx diff --git a/adminfront/src/app/routes.tsx b/adminfront/src/app/routes.tsx index 2117b8fe..5026833f 100644 --- a/adminfront/src/app/routes.tsx +++ b/adminfront/src/app/routes.tsx @@ -6,7 +6,6 @@ import AuditLogsPage from "../features/audit/AuditLogsPage"; import AuthCallbackPage from "../features/auth/AuthCallbackPage"; import AuthPage from "../features/auth/AuthPage"; import LoginPage from "../features/auth/LoginPage"; -import DashboardPage from "../features/dashboard/DashboardPage"; import GlobalOverviewPage from "../features/overview/GlobalOverviewPage"; import { TenantAdminsAndOwnersTab } from "../features/tenants/routes/TenantAdminsAndOwnersTab"; import TenantCreatePage from "../features/tenants/routes/TenantCreatePage"; @@ -35,7 +34,6 @@ export const router = createBrowserRouter( element: , children: [ { index: true, element: }, - { path: "dashboard", element: }, { path: "audit-logs", element: }, { path: "auth", element: }, { path: "users", element: }, diff --git a/adminfront/src/components/layout/AppLayout.tsx b/adminfront/src/components/layout/AppLayout.tsx index df69e221..c944f59d 100644 --- a/adminfront/src/components/layout/AppLayout.tsx +++ b/adminfront/src/components/layout/AppLayout.tsx @@ -24,11 +24,6 @@ import RoleSwitcher from "./RoleSwitcher"; const navItems = [ { label: "ui.admin.nav.overview", to: "/", icon: LayoutDashboard }, - { - label: "ui.admin.nav.tenant_dashboard", - to: "/dashboard", - icon: ShieldHalf, - }, { label: "ui.admin.nav.tenants", to: "/tenants", diff --git a/adminfront/src/features/dashboard/DashboardPage.tsx b/adminfront/src/features/dashboard/DashboardPage.tsx deleted file mode 100644 index e4b29dc2..00000000 --- a/adminfront/src/features/dashboard/DashboardPage.tsx +++ /dev/null @@ -1,243 +0,0 @@ -import { - Activity, - ArrowRight, - Building2, - CheckCircle2, - LineChart, - Radio, - ShieldCheck, - Sparkles, -} from "lucide-react"; - -const guardHighlights = [ - { - title: "Tenant isolation", - body: "All admin calls expect X-Tenant-ID and are prepared for tenant-aware headers.", - metric: "Header guard", - accent: "active", - }, - { - title: "Admin TTL", - body: "Session budget kept short for admins. App session vs admin session split is explicit.", - metric: "15m default", - accent: "ttl", - }, - { - title: "Audit-first", - body: "Every management action should log to ClickHouse. Hooks in place for later wiring.", - metric: "per-action", - accent: "audit", - }, -]; - -const stackReadiness = [ - "React 19 + Vite 7, strict TS, Router v6 data router.", - "TanStack Query 5 provider ready with sane defaults.", - "Axios client stub with bearer + tenant header injector.", - "Tailwind v4 tokens tuned for admin dark plane.", - "React Hook Form + Zod planned for client forms.", - "IdP-neutral auth hook point reserved for role guard.", -]; - -const nextSteps = [ - "Add IdP-neutral OIDC/OAuth auth layer and enforce admin role in RequireAuth.", - "Persist tenant picklist and feed X-Tenant-ID for every admin call.", - "Add shadcn/ui primitives for forms and tables; lock lint/format.", -]; - -function DashboardPage() { - return ( -
-
-
-
-
-
- - adminfront ready -
-

- Build the admin plane with{" "} - tenant-aware{" "} - defaults and{" "} - - least privilege - {" "} - UX. -

-

- Route, query, and styling scaffolds are in place. Use this canvas - to ship RP registry, audit exploration, and guarded login aligned - with issue #60 while keeping providers swappable. -

-
- - Router + Query wired - - - Admin namespace only - - - Auth hook pending - -
-
-
-
- - Admin guard scoped to /admin -
-
- - Tenant selection placeholder ready -
-
- - Audit stream hook for ClickHouse -
-
-
-
- -
- {guardHighlights.map((item) => ( -
-
-
-
- {item.metric} -
- - {item.accent} - -
-
-

{item.title}

-

{item.body}

-
-
- ))} -
- -
-
-
-
-

- Stack readiness -

-

Matches issue #60

-
- -
-
- {stackReadiness.map((item) => ( -
- -

{item}

-
- ))} -
-
- -
-

- Next actions -

-

- Ship the first guarded flows -

-
- {nextSteps.map((item, idx) => ( -
-
- {idx + 1} -
-

{item}

-
- ))} -
-
-
- -
-
-
-

- Ops board -

-

What to prototype next

-
-
- - Audit → ClickHouse - - - RP registry - -
-
-
-
-
- - - Metrics - -
-

- RP registration funnel -

-

- Visualize create → secret rotate → redirect URI edits per tenant. -

-
-
-
- - Audit -
-

Admin action stream

-

- Live feed of admin API calls with per-action tenant, actor, and - rate-limit outcome. -

-
-
-
- - - Access - -
-

Admin login journey

-

- Outline SMS + app-based MFA choice and emphasize “admin session” - TTL with logout. -

-
-
-
-
- ); -} - -export default DashboardPage; diff --git a/adminfront/src/features/overview/GlobalOverviewPage.tsx b/adminfront/src/features/overview/GlobalOverviewPage.tsx index 7db5a1cd..88cd6475 100644 --- a/adminfront/src/features/overview/GlobalOverviewPage.tsx +++ b/adminfront/src/features/overview/GlobalOverviewPage.tsx @@ -193,10 +193,10 @@ function GlobalOverviewPage() { className="w-full justify-between" variant="outline" > - + {t( - "ui.admin.overview.quick_links.view_audit_logs", - "감사 로그 보기", + "ui.admin.overview.quick_links.user_management", + "사용자 관리", )} @@ -206,10 +206,23 @@ function GlobalOverviewPage() { className="w-full justify-between" variant="outline" > - + {t( - "ui.admin.overview.quick_links.tenant_dashboard", - "테넌트 대시보드", + "ui.admin.overview.quick_links.api_key_management", + "API 키 관리", + )} + + + +