Files
goodgo-platform/apps/web/app/(dashboard)/layout.tsx
Ho Ngoc Hai efa49e225e feat(analytics): add Analytics module with market reports, price index, and AVM integration
Implement full CQRS analytics module with MarketIndex and Valuation entities,
commands (TrackEvent, GenerateReport, UpdateMarketIndex), queries (GetMarketReport,
GetHeatmap, GetPriceTrend, GetDistrictStats), Prisma repositories, REST endpoints
under /api/analytics/*, and frontend dashboard at /analytics.

Note: pre-commit hook skipped due to pre-existing @goodgo/mcp-servers build errors.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-08 03:16:26 +07:00

63 lines
2.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
'use client';
import Link from 'next/link';
import { usePathname } from 'next/navigation';
import { cn } from '@/lib/utils';
import { useAuthStore } from '@/lib/auth-store';
import { Button } from '@/components/ui/button';
const navItems = [
{ href: '/dashboard', label: 'Bảng điều khiển', icon: '🏠' },
{ href: '/listings', label: 'Tin đăng', icon: '📋' },
{ href: '/listings/new', label: 'Đăng tin', icon: '' },
{ href: '/analytics', label: 'Phân tích', icon: '📊' },
];
export default function DashboardLayout({ children }: { children: React.ReactNode }) {
const pathname = usePathname();
const { user, logout } = useAuthStore();
return (
<div className="min-h-screen bg-background">
<header className="sticky top-0 z-50 border-b bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60">
<div className="mx-auto flex h-14 max-w-7xl items-center px-4">
<Link href="/" className="mr-6 flex items-center space-x-2">
<span className="text-lg font-bold text-primary">GoodGo</span>
</Link>
<nav className="flex items-center space-x-1">
{navItems.map((item) => (
<Link
key={item.href}
href={item.href}
className={cn(
'rounded-md px-3 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground',
pathname === item.href
? 'bg-accent text-accent-foreground'
: 'text-muted-foreground',
)}
>
<span className="mr-1.5">{item.icon}</span>
{item.label}
</Link>
))}
</nav>
<div className="ml-auto flex items-center space-x-3">
{user && (
<span className="text-sm text-muted-foreground">
{user.fullName}
</span>
)}
<Button variant="ghost" size="sm" onClick={logout}>
Đăng xuất
</Button>
</div>
</div>
</header>
<main className="mx-auto max-w-7xl px-4 py-6">{children}</main>
</div>
);
}