fix: settings page redesign - tabbed interface, no sidebar dropdown

- AdminSidebar: removed dropdown menu, flat nav links, no scrolling
  - Removed SETTINGS_SUB_LINKS array
  - Removed settingsOpen state and dropdown logic
  - Settings is now a simple link to /admin/settings
  - Nav uses overflow-hidden to prevent sidebar scroll

- SettingsClient: unified tabbed interface (like CommunicationsPage)
  - New tabs: General, Add-ons, Billing, Integrations, AI, Advanced
  - Uses AdminFilterTabs for navigation
  - Each tab shows a card with link to full settings page

- Redirected pages to /admin/settings#tab:
  - /admin/settings/apps → /admin/settings#addons
  - /admin/settings/integrations → /admin/settings#integrations
  - /admin/settings/ai → /admin/settings#ai
  - /admin/advanced → /admin/settings#advanced

All TypeScript checks pass.
This commit is contained in:
2026-06-02 04:42:32 +00:00
parent 778b3fe311
commit 14ec2f9c71
6 changed files with 149 additions and 594 deletions
+2 -21
View File
@@ -1,28 +1,9 @@
import { redirect } from "next/navigation";
import { getAdminUser } from "@/lib/admin-permissions";
import { getAIProviderSettings } from "@/actions/integrations/ai-providers";
import AIClient from "./AIClient";
import AdminAccessDenied from "@/components/admin/AdminAccessDenied";
export default async function AISettingsPage() {
const adminUser = await getAdminUser();
if (!adminUser) return <AdminAccessDenied />;
if (!adminUser) redirect("/login");
const brandId = adminUser.brand_id ?? "";
const settings = await getAIProviderSettings(brandId);
const isConnected = !!settings.apiKey;
const brandName = "Brand"; // Note: resolved from adminUser.brand_id on the server; hardcoded fallback for settings UI
return (
<AIClient
isConnected={isConnected}
brandId={brandId}
brandName={brandName}
provider={settings.provider}
model={settings.model}
customEndpoint={settings.customEndpoint}
/>
);
redirect("/admin/settings#ai");
}