Improve admin UX: hub i18n, dynamic topbar, settings strings, staff logs DataTable.
Local Build and Deploy / deploy (push) Successful in 1m12s
Local Build and Deploy / deploy (push) Successful in 1m12s
Co-authored-by: Cursor <[email protected]>
This commit is contained in:
1 parent
604e63da51
commit
1039044e48
11 files changed
+526
-305
No files matched your search
@@ -2,6 +2,7 @@
|
||||
|
||||
import Link from "next/link";
|
||||
import { usePathname } from "next/navigation";
|
||||
import { useTranslations } from "next-intl";
|
||||
import { cn } from "@/lib/utils";
|
||||
|
||||
export interface AdminTab {
|
||||
@@ -13,11 +14,6 @@ export interface AdminTab {
|
||||
group?: string;
|
||||
}
|
||||
|
||||
const GROUP_LABELS: Record<string, string> = {
|
||||
primary: "",
|
||||
tools: "Tools",
|
||||
};
|
||||
|
||||
function matchLength(pathname: string, prefix: string): number {
|
||||
if (pathname === prefix) return prefix.length + 1; // prefer exact
|
||||
if (pathname.startsWith(`${prefix}/`)) return prefix.length;
|
||||
@@ -71,6 +67,7 @@ function TabRow({
|
||||
|
||||
export function AdminSectionTabs({ tabs }: { tabs: AdminTab[] }) {
|
||||
const pathname = usePathname() ?? "";
|
||||
const t = useTranslations("pages.admin.hubs");
|
||||
|
||||
let bestIndex = -1;
|
||||
let bestScore = -1;
|
||||
@@ -87,9 +84,7 @@ export function AdminSectionTabs({ tabs }: { tabs: AdminTab[] }) {
|
||||
|
||||
const hasGroups = tabs.some((t) => t.group);
|
||||
if (!hasGroups) {
|
||||
return (
|
||||
<TabRow tabs={tabs} bestIndex={bestIndex} globalOffset={0} />
|
||||
);
|
||||
return <TabRow tabs={tabs} bestIndex={bestIndex} globalOffset={0} />;
|
||||
}
|
||||
|
||||
const order: string[] = [];
|
||||
@@ -102,16 +97,18 @@ export function AdminSectionTabs({ tabs }: { tabs: AdminTab[] }) {
|
||||
return (
|
||||
<div className="space-y-3">
|
||||
{order.map((groupId) => {
|
||||
const groupTabs = tabs.filter((t) => (t.group ?? "primary") === groupId);
|
||||
const groupTabs = tabs.filter((tab) => (tab.group ?? "primary") === groupId);
|
||||
const rowOffset = offset;
|
||||
offset += groupTabs.length;
|
||||
const label =
|
||||
groupId === "tools" ? t("tabs.toolsGroup") : undefined;
|
||||
return (
|
||||
<TabRow
|
||||
key={groupId}
|
||||
tabs={groupTabs}
|
||||
bestIndex={bestIndex}
|
||||
globalOffset={rowOffset}
|
||||
label={GROUP_LABELS[groupId] || undefined}
|
||||
label={label}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
|
||||
Reference in new issue
Block a user