refactor(admin): remove sidebar favorites
CI / check (push) Successful in 1m8s
CI / deploy (push) Successful in 1m5s

This commit is contained in:
Simo committed 2026-09-06 17:25:04 +02:00
1 parent a070004e7b
commit 96234075f8
7 files changed
+1 -152

No files matched your search

-1
View File
@@ -95,7 +95,6 @@ async function Sidebar({
</div>
<AdminSidebarNav
userId={staff.id}
allowedPermissions={allowedPermissions}
isSuperAdmin={isSuperAdmin}
navConfig={navConfig}
File diff suppressed because it is too large. Load diff
@@ -15,7 +15,6 @@ import type { AdminNavItem } from "@/lib/admin-nav";
import type { AdminNavConfig } from "@/lib/admin-nav-config";
import { visibleAdminNavigation } from "@/lib/admin-navigation";
import { cn } from "@/lib/utils";
import { AdminFavorites } from "./admin-favorites";
const STORAGE_KEY = "admin-nav-collapsed";
@@ -62,12 +61,10 @@ function persistCollapsed(next: Record<string, boolean>) {
}
export function AdminSidebarNav({
userId = 0,
allowedPermissions = [],
isSuperAdmin = false,
navConfig = {},
}: {
userId?: number;
/** ACL slugs the staff member holds (ignored when isSuperAdmin). */
allowedPermissions?: string[];
isSuperAdmin?: boolean;
@@ -263,12 +260,6 @@ export function AdminSidebarNav({
</div>
<div className="min-h-0 flex-1 overflow-y-auto overscroll-contain px-3 py-3">
{!search && (
<AdminFavorites
userId={userId}
items={groups.flatMap((group) => group.items)}
/>
)}
{visibleGroups.length === 0 && (
<p
role="status"
+1 -9
View File
@@ -1,6 +1,6 @@
import { expect, it } from "vitest";
import { ADMIN_NAV_GROUPS } from "@/lib/admin-nav";
import { parseFavoritePages, visibleAdminNavigation } from "./admin-navigation";
import { visibleAdminNavigation } from "./admin-navigation";
const access = { isSuperAdmin: true, allowedPermissions: [], navConfig: {} };
it("retains each route and its permission definition once after regrouping", () => {
@@ -36,11 +36,3 @@ it("respects hidden groups, owner order and ACL in every consumer", () => {
}).flatMap((g) => g.items);
expect(limited.every((i) => !i.permission)).toBe(true);
});
it("rejects malformed favorites, external links and duplicates", () => {
expect(parseFavoritePages("{")).toEqual([]);
expect(
parseFavoritePages(
'["/admin/users","https://evil.test","/admin/users",null,"/admin?token=x"]',
),
).toEqual(["/admin/users"]);
});
-19
View File
@@ -159,22 +159,3 @@ export function visibleAdminNavigation(
});
return organized;
}
export function parseFavoritePages(raw: string | null): string[] {
try {
const value: unknown = JSON.parse(raw ?? "[]");
return Array.isArray(value)
? [
...new Set(
value.filter(
(entry): entry is string =>
typeof entry === "string" &&
/^\/admin(?:\/[^?#]*)?$/.test(entry),
),
),
].slice(0, 6)
: [];
} catch {
return [];
}
}
-4
View File
@@ -1099,10 +1099,6 @@
"catalogFurniture": "Catalog and furniture",
"communityContent": "Community and content",
"staffPermissions": "Staff and access",
"favorites": "Favorites",
"addFavorite": "Add favorite",
"removeFavorite": "Remove {name} from favorites",
"favoriteStorageError": "Favorites are available for this session; browser storage is unavailable.",
"cmsErrors": "CMS errors",
"themeBuilder": "Theme builder",
"openSidebar": "Open menu",
-4
View File
@@ -1057,10 +1057,6 @@
"catalogFurniture": "Catalogo e furni",
"communityContent": "Community e contenuti",
"staffPermissions": "Staff e accessi",
"favorites": "Preferiti",
"addFavorite": "Aggiungi preferito",
"removeFavorite": "Rimuovi {name} dai preferiti",
"favoriteStorageError": "Preferiti disponibili per questa sessione: memoria del browser non disponibile.",
"cmsErrors": "Errori CMS",
"themeBuilder": "Editor del tema",
"catalogMaintenance": "Manutenzione catalogo",