quest-vorteq/src/app/(portal)/layout.tsx
Lorentz 56ce4ba940
Some checks failed
Build and Deploy / build (push) Successful in 3m26s
Build and Deploy / deploy (push) Failing after 2s
feat: replace company switcher button with searchable combobox
Add cmdk-based combobox to portal header for inline company switching
with search by name or Epicor ID. Also update select-company page to
use the same pattern. Fix admin company switching by allowing admins
to switch to any active company without requiring a quest_user_company
link.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 18:07:39 +00:00

65 lines
1.7 KiB
TypeScript

import {
getQuestSession,
getActiveCompany,
getUserCompanies,
} from '@/lib/permissions';
import { PortalSidebar } from '@/components/layout/portal-sidebar';
import { PortalHeader } from '@/components/layout/portal-header';
import { Breadcrumb } from '@/components/layout/breadcrumb';
import { redirect } from 'next/navigation';
import { db } from '@/lib/db';
export default async function PortalLayout({
children,
}: {
children: React.ReactNode;
}) {
// Check authentication
const session = await getQuestSession();
if (!session) {
redirect('/login');
}
// Get active company
const activeCompany = await getActiveCompany();
// Get unread notifications count
const unreadNotifications = await db.quest_user_notification_alert_read.count(
{
where: {
auth_user_id: session.user.id,
},
}
);
const isAdmin =
session.userType === 'Admin' || session.userType === 'Super Admin';
// Get available companies for the switcher
const companies = await getUserCompanies();
return (
<div className="flex min-h-screen">
<PortalSidebar isAdmin={isAdmin} permissions={session.permissionRules} />
<div className="flex-1 pl-64">
<PortalHeader
companyName={activeCompany?.display_name}
activeCompanyId={activeCompany?.id}
companies={companies.map((c) => ({
id: c.id,
display_name: c.display_name,
epicor_cust_id: c.epicor_cust_id,
}))}
userEmail={session.user.email}
isAdmin={isAdmin}
unreadNotifications={unreadNotifications}
/>
<main className="p-6">
<Breadcrumb />
{children}
</main>
</div>
</div>
);
}