menydock update, dashboard page create

This commit is contained in:
IluaAir
2025-10-12 22:52:48 +03:00
parent 2c35b781dd
commit 8ee524318c
3 changed files with 41 additions and 38 deletions

View File

@@ -3,7 +3,7 @@ import { LoginPage } from './pages/Login'
import { SignUp } from './pages/SignUp' import { SignUp } from './pages/SignUp'
import { AuthLayout } from './layouts/AuthLayout' import { AuthLayout } from './layouts/AuthLayout'
import { Routes, Route, Navigate } from 'react-router' import { Routes, Route, Navigate } from 'react-router'
import MenuDockVertical from './layouts/DashLayout' import Dashboard from './pages/Dashboard'
function App() { function App() {
@@ -20,9 +20,7 @@ function App() {
</Route> </Route>
<Route path="/dashboard" element={ <Route path="/dashboard" element={
// <div className="min-h-svh bg-background flex justify-start items-start"> <Dashboard />
<MenuDockVertical />
// </div>
} /> } />
<Route path="*" element={<Navigate to="/auth/login" replace />} /> <Route path="*" element={<Navigate to="/auth/login" replace />} />
</Routes> </Routes>

View File

@@ -4,11 +4,11 @@ import { Home, Briefcase, Calendar, Shield, Settings } from 'lucide-react';
import { cn } from '@/lib/utils'; import { cn } from '@/lib/utils';
const defaultItems = [ const defaultItems = [
{ label: 'home', icon: Home }, { label: 'home', icon: Home },
{ label: 'work', icon: Briefcase }, { label: 'work', icon: Briefcase },
{ label: 'calendar', icon: Calendar }, { label: 'calendar', icon: Calendar },
{ label: 'security', icon: Shield }, { label: 'security', icon: Shield },
{ label: 'settings', icon: Settings }, { label: 'settings', icon: Settings },
]; ];
export const MenuDock = ({ export const MenuDock = ({
@@ -17,19 +17,20 @@ export const MenuDock = ({
variant = 'default', variant = 'default',
orientation = 'horizontal', orientation = 'horizontal',
showLabels = true, showLabels = true,
animated = true animated = true,
showIndicator = true
}) => { }) => {
const finalItems = useMemo(() => { const finalItems = useMemo(() => {
const isValid = items && Array.isArray(items) && items.length >= 2 && items.length <= 8; const isValid = items && Array.isArray(items) && items.length >= 2 && items.length <= 8;
if (!isValid) { if (!isValid) {
console.warn( console.warn(
"MenuDock: 'items' prop is invalid or missing. Using default items.", "MenuDock: 'items' prop is invalid or missing. Using default items.",
items items
); );
return defaultItems; return defaultItems;
} }
return items; return items;
}, [items]); }, [items]);
const [activeIndex, setActiveIndex] = useState(0); const [activeIndex, setActiveIndex] = useState(0);
@@ -40,9 +41,9 @@ export const MenuDock = ({
const itemRefs = useRef([]); const itemRefs = useRef([]);
useEffect(() => { useEffect(() => {
if (activeIndex >= finalItems.length) { if (activeIndex >= finalItems.length) {
setActiveIndex(0); setActiveIndex(0);
} }
}, [finalItems, activeIndex]); }, [finalItems, activeIndex]);
useEffect(() => { useEffect(() => {
@@ -122,6 +123,7 @@ export const MenuDock = ({
className={cn( className={cn(
'relative flex flex-col items-center justify-center rounded-lg transition-all duration-200', 'relative flex flex-col items-center justify-center rounded-lg transition-all duration-200',
'hover:bg-muted/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring', 'hover:bg-muted/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
'select-none',
styles.item, styles.item,
isActive && 'text-primary', isActive && 'text-primary',
!isActive && 'text-muted-foreground hover:text-foreground' !isActive && 'text-muted-foreground hover:text-foreground'
@@ -153,7 +155,7 @@ export const MenuDock = ({
); );
})} })}
{/* Animated underline for horizontal orientation with labels */} {/* Animated underline for horizontal orientation with labels */}
{showLabels && orientation === 'horizontal' && ( {showIndicator && showLabels && orientation === 'horizontal' && (
<div <div
className={cn( className={cn(
'absolute bottom-2 h-0.5 bg-primary rounded-full transition-all duration-300 ease-out', 'absolute bottom-2 h-0.5 bg-primary rounded-full transition-all duration-300 ease-out',
@@ -165,7 +167,7 @@ export const MenuDock = ({
}} /> }} />
)} )}
{/* Active indicator for vertical orientation or no labels */} {/* Active indicator for vertical orientation or no labels */}
{(!showLabels || orientation === 'vertical') && ( {showIndicator && (!showLabels || orientation === 'vertical') && (
<div <div
className={cn( className={cn(
'absolute bg-primary rounded-full transition-all duration-300', 'absolute bg-primary rounded-full transition-all duration-300',

View File

@@ -2,12 +2,12 @@
import { MenuDock } from '@/components/ui/shadcn-io/menu-dock'; import { MenuDock } from '@/components/ui/shadcn-io/menu-dock';
import { Home, Settings, Bell } from 'lucide-react'; import { Home, Settings, Bell } from 'lucide-react';
import { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/avatar'; import { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/avatar';
const sidebarItems = [ const menuItems = [
{ label: 'home', icon: Home, onClick: () => console.log('Home clicked') }, { label: 'home', icon: Home, onClick: () => console.log('Home clicked') },
{ label: 'notifications', icon: Bell, onClick: () => console.log('Notifications clicked') }, { label: 'notifications', icon: Bell, onClick: () => console.log('Notifications clicked') },
{ label: 'settings', icon: Settings, onClick: () => console.log('Settings clicked') }, { label: 'settings', icon: Settings, onClick: () => console.log('Settings clicked') },
]; ];
export default function MenuDockVertical() { export default function Dashboard() {
return ( return (
<div className="min-h-[180px] p-4 flex justify-start items-start"> <div className="min-h-[180px] p-4 flex justify-start items-start">
<div className="flex flex-col items-center justify-center"> <div className="flex flex-col items-center justify-center">
@@ -16,11 +16,14 @@ export default function MenuDockVertical() {
<AvatarFallback>CN</AvatarFallback> <AvatarFallback>CN</AvatarFallback>
</Avatar> </Avatar>
<MenuDock <MenuDock
items={sidebarItems} items={menuItems}
variant="compact"
orientation="vertical" orientation="vertical"
showIndicator={false}
variant="default"
/> />
</div> </div>
</div> </div>
); );
} }