diff --git a/src/app/(dashboard)/images/page.tsx b/src/app/(dashboard)/images/page.tsx new file mode 100644 index 0000000..760c962 --- /dev/null +++ b/src/app/(dashboard)/images/page.tsx @@ -0,0 +1,9 @@ +import { Header } from '@/components/layout/Header' +export default function ImagesPage() { + return ( + <> +
+

Module Images — à implémenter (Plan 2)

+ + ) +} diff --git a/src/app/(dashboard)/layout.tsx b/src/app/(dashboard)/layout.tsx new file mode 100644 index 0000000..4f0e7c4 --- /dev/null +++ b/src/app/(dashboard)/layout.tsx @@ -0,0 +1,10 @@ +import { Sidebar } from '@/components/layout/Sidebar' + +export default function DashboardLayout({ children }: { children: React.ReactNode }) { + return ( +
+ +
{children}
+
+ ) +} diff --git a/src/app/(dashboard)/page.tsx b/src/app/(dashboard)/page.tsx new file mode 100644 index 0000000..98a0bb9 --- /dev/null +++ b/src/app/(dashboard)/page.tsx @@ -0,0 +1,9 @@ +import { Header } from '@/components/layout/Header' +export default function DashboardPage() { + return ( + <> +
+

Dashboard — à implémenter (Plan 4)

+ + ) +} diff --git a/src/app/(dashboard)/parametres/page.tsx b/src/app/(dashboard)/parametres/page.tsx new file mode 100644 index 0000000..4e04263 --- /dev/null +++ b/src/app/(dashboard)/parametres/page.tsx @@ -0,0 +1,9 @@ +import { Header } from '@/components/layout/Header' +export default function ParametresPage() { + return ( + <> +
+

Module Paramètres — à implémenter (Plan 4)

+ + ) +} diff --git a/src/app/(dashboard)/produits/page.tsx b/src/app/(dashboard)/produits/page.tsx new file mode 100644 index 0000000..904b19d --- /dev/null +++ b/src/app/(dashboard)/produits/page.tsx @@ -0,0 +1,9 @@ +import { Header } from '@/components/layout/Header' +export default function ProduitsPage() { + return ( + <> +
+

Module Produits — à implémenter (Plan 4)

+ + ) +} diff --git a/src/app/(dashboard)/sync/page.tsx b/src/app/(dashboard)/sync/page.tsx new file mode 100644 index 0000000..2116231 --- /dev/null +++ b/src/app/(dashboard)/sync/page.tsx @@ -0,0 +1,9 @@ +import { Header } from '@/components/layout/Header' +export default function SyncPage() { + return ( + <> +
+

Module Sync — à implémenter (Plan 3)

+ + ) +} diff --git a/src/app/page.tsx b/src/app/page.tsx deleted file mode 100644 index 5f2df66..0000000 --- a/src/app/page.tsx +++ /dev/null @@ -1,7 +0,0 @@ -export default function Home() { - return ( -
- Gestion — Matériaux Destock -
- ) -} diff --git a/src/components/layout/Header.tsx b/src/components/layout/Header.tsx new file mode 100644 index 0000000..ee42f9f --- /dev/null +++ b/src/components/layout/Header.tsx @@ -0,0 +1,13 @@ +interface HeaderProps { + title: string + actions?: React.ReactNode +} + +export function Header({ title, actions }: HeaderProps) { + return ( +
+

{title}

+ {actions &&
{actions}
} +
+ ) +} diff --git a/src/components/layout/Sidebar.tsx b/src/components/layout/Sidebar.tsx new file mode 100644 index 0000000..2acaaf5 --- /dev/null +++ b/src/components/layout/Sidebar.tsx @@ -0,0 +1,72 @@ +'use client' +import Link from 'next/link' +import { usePathname } from 'next/navigation' +import { signOut, useSession } from 'next-auth/react' + +type NavItem = { + href: string + label: string + icon: string + adminOnly?: boolean +} + +const NAV_ITEMS: NavItem[] = [ + { href: '/', label: 'Dashboard', icon: '📊' }, + { href: '/produits', label: 'Produits', icon: '📦' }, + { href: '/images', label: 'Images', icon: '🖼️' }, + { href: '/sync', label: 'Sync Sheets', icon: '🔄' }, + { href: '/parametres', label: 'Paramètres', icon: '⚙️', adminOnly: true }, +] + +export function Sidebar() { + const pathname = usePathname() + const { data: session } = useSession() + const isAdmin = session?.user?.role === 'admin' + + const visible = NAV_ITEMS.filter(item => !item.adminOnly || isAdmin) + + return ( + + ) +}