-
-
-
- Peer-at Code
-
+ (width >= 640 && (
+
-
-
- {navItems.map((item) => (
- -
-
-
- ))}
-
-
-
-
-
+
+
+ {navItems.map((item) => (
+ -
+
+
+ ))}
+
+
+
+
+
+ )) || (
+
+ )
);
}
-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 (
+
+ );
+}