From 16252ee5a23776d3738f4ffc870576b8afa06a9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o?= <43091603+glazk0@users.noreply.github.com> Date: Sun, 5 Feb 2023 18:28:55 +0100 Subject: [PATCH] Responsive Sidenav --- app/(auth)/sign-in/page.tsx | 15 ++++ app/(auth)/sign-up/page.tsx | 15 ++++ app/dashboard/layout.tsx | 9 +- app/dashboard/puzzles/page.tsx | 2 +- app/layout.tsx | 1 + lib/nav-items.ts | 6 ++ next.config.js | 2 + package.json | 4 +- pnpm-lock.yaml | 12 +-- ui/Icon.tsx | 5 ++ ui/dashboard/Sidenav.tsx | 150 ++++++++++++++++++++++++++------- ui/dashboard/Wrapper.tsx | 43 ++++++++++ 12 files changed, 216 insertions(+), 48 deletions(-) create mode 100644 app/(auth)/sign-in/page.tsx create mode 100644 app/(auth)/sign-up/page.tsx create mode 100644 ui/Icon.tsx create mode 100644 ui/dashboard/Wrapper.tsx diff --git a/app/(auth)/sign-in/page.tsx b/app/(auth)/sign-in/page.tsx new file mode 100644 index 0000000..35289f2 --- /dev/null +++ b/app/(auth)/sign-in/page.tsx @@ -0,0 +1,15 @@ +import AppLink from '@/ui/AppLink'; + +export default function Home() { + return ( +
+
+

+ Amuse toi avec Next.js et{' '} + Tailwindcss ! +

+ Dashboard +
+
+ ); +} diff --git a/app/(auth)/sign-up/page.tsx b/app/(auth)/sign-up/page.tsx new file mode 100644 index 0000000..35289f2 --- /dev/null +++ b/app/(auth)/sign-up/page.tsx @@ -0,0 +1,15 @@ +import AppLink from '@/ui/AppLink'; + +export default function Home() { + return ( +
+
+

+ Amuse toi avec Next.js et{' '} + Tailwindcss ! +

+ Dashboard +
+
+ ); +} diff --git a/app/dashboard/layout.tsx b/app/dashboard/layout.tsx index fb7d88e..2ca9fb1 100644 --- a/app/dashboard/layout.tsx +++ b/app/dashboard/layout.tsx @@ -1,11 +1,6 @@ -import Sidenav from '@/ui/dashboard/Sidenav'; +import Wrapper from '@/ui/dashboard/Wrapper'; import { type ReactNode } from 'react'; export default function Layout({ children }: { children: ReactNode }) { - return ( -
- -
{children}
-
- ); + return {children}; } diff --git a/app/dashboard/puzzles/page.tsx b/app/dashboard/puzzles/page.tsx index 54c053f..e5e4acf 100644 --- a/app/dashboard/puzzles/page.tsx +++ b/app/dashboard/puzzles/page.tsx @@ -27,7 +27,7 @@ export default function Page() { label="Code" name="code_file" type="file" - accept=".py,.js,.ts,.java,.rust" + accept=".py,.js,.ts,.java,.rust,.c" /> - -
- -
- -
- +
+ +
+ +
+ + )) || ( + + ) ); } -function NavItem({ item }: { item: NavItem }) { +function NavItem({ item, isOpen }: { item: NavItem; isOpen: boolean }) { const segment = useSelectedLayoutSegment(); const isActive = segment?.split('/').pop() === item.slug || (item.slug === '' && !segment); return ( - {item.name} +
+ + {item.name} +
); } diff --git a/ui/dashboard/Wrapper.tsx b/ui/dashboard/Wrapper.tsx new file mode 100644 index 0000000..6663716 --- /dev/null +++ b/ui/dashboard/Wrapper.tsx @@ -0,0 +1,43 @@ +'use client'; + +import { cn } from '@/lib/utils'; +import { useCallback, useEffect, useState, type ReactNode } from 'react'; +import Sidenav from './Sidenav'; + +export default function Wrapper({ children }: { children: ReactNode }) { + const [isOpen, setIsOpen] = useState(false); + const [width, setWidth] = useState(0); + + function toggleSidenav() { + setIsOpen(!isOpen); + } + + function useWidth() { + const handleResize = useCallback(() => setWidth(window.innerWidth), []); + useEffect(() => { + handleResize(); + window.addEventListener('resize', handleResize); + return () => window.removeEventListener('resize', handleResize); + }, [handleResize]); + return width; + } + + return ( +
+ +
+ {children} +
+
+ ); +}