diff --git a/public/assets/icons/side-menu/close.svg b/public/assets/icons/side-menu/close.svg new file mode 100644 index 0000000..123b186 --- /dev/null +++ b/public/assets/icons/side-menu/close.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/components/mobile/Header/index.tsx b/src/components/mobile/Header/index.tsx index db9af0a..a226d86 100644 --- a/src/components/mobile/Header/index.tsx +++ b/src/components/mobile/Header/index.tsx @@ -1,6 +1,8 @@ 'use client'; import { useRouter } from 'next/navigation'; +import Sidebar from '@/components/mobile/SidebarMenu/index'; +import { useState } from 'react'; import IconArrow from 'public/assets/icons/icon-arrow.svg'; import IconHamburger from 'public/assets/icons/icon-hamburger.svg'; @@ -11,28 +13,33 @@ interface HeaderProps { export default function Header({ title, menu = false }: HeaderProps) { const router = useRouter(); + const [isSidebarOpen, setIsSidebarOpen] = useState(false); return ( -
- -
{title}
- {menu ? ( + <> +
- ) : ( -
- )} -
+
{title}
+ {menu ? ( + + ) : ( +
+ )} +
+ + setIsSidebarOpen(false)} /> + ); } diff --git a/src/components/mobile/SidebarMenu/index.tsx b/src/components/mobile/SidebarMenu/index.tsx new file mode 100644 index 0000000..6d1fa50 --- /dev/null +++ b/src/components/mobile/SidebarMenu/index.tsx @@ -0,0 +1,121 @@ +'use client'; + +import { useEffect } from 'react'; +import IconClose from 'public/assets/icons/side-menu/close.svg'; +import IconRentalList from 'public/assets/icons/side-menu/rental-item-list.svg'; +import IconRentalHistory from 'public/assets/icons/side-menu/rental-history.svg'; +import IconUserAlarm from 'public/assets/icons/side-menu/user-alarm.svg'; +import IconAdminDashboard from 'public/assets/icons/side-menu/admin-dashboard.svg'; +import IconAdminAlarm from 'public/assets/icons/side-menu/admin-alarm.svg'; +import IconLogout from 'public/assets/icons/side-menu/logout.svg'; + +interface SidebarProps { + isOpen: boolean; + onClose: () => void; +} + +const menuItems = [ + { icon: IconRentalList, label: '복지 물품 목록', href: '/mobile/main' }, + { icon: IconRentalHistory, label: '대여기록', href: '/mobile/history' }, + { icon: IconUserAlarm, label: '알림', href: '/mobile/notification' }, +]; + +const adminItems = [ + { + icon: IconAdminDashboard, + label: '관리자 대시보드', + href: '/mobile/admin/dashboard', + }, + { + icon: IconAdminAlarm, + label: '관리자 알림', + href: '/mobile/admin/notification', + }, +]; + +const logoutItem = { + icon: IconLogout, + label: '로그아웃', + href: '/mobile/sign-in', +}; + +export default function Sidebar({ isOpen, onClose }: SidebarProps) { + return ( + <> + {/* 오버레이 배경 */} +
+ + {/* 사이드바 */} + + + ); +} diff --git a/src/components/mobile/layout/index.tsx b/src/components/mobile/layout/index.tsx index 3451c5a..feb4a14 100644 --- a/src/components/mobile/layout/index.tsx +++ b/src/components/mobile/layout/index.tsx @@ -1,3 +1,5 @@ +'use client'; + import React, { useEffect } from 'react'; interface MobileLayoutProps {