diff --git a/apps/web/src/app/(app)/admin/dispo-imports/page.tsx b/apps/web/src/app/(app)/admin/dispo-imports/page.tsx index 81809b3..fd453eb 100644 --- a/apps/web/src/app/(app)/admin/dispo-imports/page.tsx +++ b/apps/web/src/app/(app)/admin/dispo-imports/page.tsx @@ -1,5 +1,5 @@ -import { DispoImportClient } from "~/components/admin/DispoImportClient.js"; +import { redirect } from "next/navigation"; -export default function DispoImportsPage() { - return ; +export default function DispoImportRedirect() { + redirect("/admin/imports?tab=dispo"); } diff --git a/apps/web/src/app/(app)/admin/imports/page.tsx b/apps/web/src/app/(app)/admin/imports/page.tsx new file mode 100644 index 0000000..21ed33c --- /dev/null +++ b/apps/web/src/app/(app)/admin/imports/page.tsx @@ -0,0 +1,63 @@ +"use client"; + +import { useState } from "react"; +import dynamic from "next/dynamic"; +import { useSearchParams } from "next/navigation"; + +const DispoImportClient = dynamic( + () => import("~/components/admin/DispoImportClient.js").then((m) => m.DispoImportClient), + { loading: () =>
}, +); + +const BatchSkillImport = dynamic( + () => import("~/components/admin/BatchSkillImport.js").then((m) => m.BatchSkillImport), + { loading: () =>
}, +); + +type Tab = "dispo" | "skills"; + +const TABS: { key: Tab; label: string; description: string }[] = [ + { key: "dispo", label: "Dispo Import", description: "Import planning data from Dispo V2 workbooks" }, + { key: "skills", label: "Skill Matrix", description: "Import skill matrices from XLSX files" }, +]; + +export default function ImportsPage() { + const searchParams = useSearchParams(); + const initialTab = (searchParams.get("tab") as Tab) ?? "dispo"; + const [activeTab, setActiveTab] = useState(initialTab); + + return ( +
+
+
+

Data Import

+

Import planning data and skill matrices

+
+
+ + {/* Tab bar */} +
+ {TABS.map((tab) => ( + + ))} +
+ + {/* Tab content */} +
+ {activeTab === "dispo" && } + {activeTab === "skills" && } +
+
+ ); +} diff --git a/apps/web/src/app/(app)/admin/skill-import/page.tsx b/apps/web/src/app/(app)/admin/skill-import/page.tsx index a3f2d05..f191481 100644 --- a/apps/web/src/app/(app)/admin/skill-import/page.tsx +++ b/apps/web/src/app/(app)/admin/skill-import/page.tsx @@ -1,5 +1,5 @@ -import { BatchSkillImport } from "~/components/admin/BatchSkillImport.js"; +import { redirect } from "next/navigation"; -export default function BatchSkillImportPage() { - return ; +export default function SkillImportRedirect() { + redirect("/admin/imports?tab=skills"); } diff --git a/apps/web/src/components/layout/AppShell.tsx b/apps/web/src/components/layout/AppShell.tsx index c874061..db8fb4a 100644 --- a/apps/web/src/components/layout/AppShell.tsx +++ b/apps/web/src/components/layout/AppShell.tsx @@ -182,8 +182,7 @@ const adminNavEntries: AdminEntry[] = [ { href: "/admin/org-units", label: "Org Units", icon: }, { href: "/admin/utilization-categories", label: "Util. Categories", icon: }, { href: "/admin/management-levels", label: "Mgmt Levels", icon: }, - { href: "/admin/dispo-imports", label: "Dispo Import", icon: }, - { href: "/admin/skill-import", label: "Skill Import", icon: }, + { href: "/admin/imports", label: "Data Import", icon: }, ], }, { href: "/admin/calculation-rules", label: "Calc. Rules", icon: },