1
1
"use client" ;
2
- import React from "react" ;
2
+ import React , { useState , useEffect } from "react" ;
3
3
import SideBarButton from "./SidebarButton" ;
4
4
import { Award , CalendarCheck2 , Home } from "lucide-react" ;
5
5
import { useSelectedButton } from "@/context/SelectedButtonContext" ; // Adjust the path as necessary
6
6
import Image from 'next/image' ;
7
+ import { FaAngleLeft , FaAngleRight } from "react-icons/fa" ;
7
8
8
9
const buttons = [
9
10
{
@@ -21,33 +22,77 @@ const buttons = [
21
22
] ;
22
23
23
24
const SidePanel : React . FC = ( ) => {
25
+ const [ collapsed , setcollapsed ] = useState ( true ) ;
26
+ const [ isMobile , setIsMobile ] = useState ( false ) ;
24
27
const { setSelectedButton } = useSelectedButton ( ) ;
25
28
26
29
const handleButtonClick = ( name : string ) => {
27
30
setSelectedButton ( name ) ;
28
31
} ;
32
+ const toggleCollapsed = ( ) => {
33
+ setcollapsed ( ! collapsed ) ;
34
+ }
29
35
30
- return (
31
- < div className = "flex flex-col items-center min-h-full p-5 bg-panelColor text-white w-full" >
32
- < div className = "flex flex-col md:flex-row items-center" >
33
- < Image
34
- src = "/amfoss-logo-white.png"
35
- alt = "amfoss-logo-white"
36
- className = "h-auto min-w-[10vw] sm:w-[10vw] md:w-[40px] lg:w-[50px] md:min-w-[40px] lg:min-w-[50px] max-h-auto"
37
- width = { 50 }
38
- height = { 50 }
39
- priority
40
- />
41
- < div className = "hidden md:flex flex-col text-center text-[20px] md:text-[24px] font-jetbrains items-center text-offWhite justify-center md:ml-2" >
42
- Home
36
+ useEffect ( ( ) => {
37
+ const handleResize = ( ) => {
38
+ setIsMobile ( window . innerWidth < 768 ) ;
39
+ } ;
40
+
41
+ handleResize ( ) ;
42
+ window . addEventListener ( 'resize' , handleResize ) ;
43
+
44
+ return ( ) => window . removeEventListener ( 'resize' , handleResize ) ;
45
+ } , [ ] ) ;
46
+
47
+ return ( ! isMobile ?
48
+ < div className = "flex flex-col items-center min-h-full py-5 px-3 bg-panelColor text-white w-full" >
49
+ < div className = "flex flex-row md:justify-evenly w-full" >
50
+ < div className = "flex flex-col md:flex-row items-center" >
51
+ < Image
52
+ src = "/amfoss-logo-white.png"
53
+ alt = "amfoss-logo-white"
54
+ className = "h-auto min-w-[10vw] md:w-[40px] lg:w-[50px] md:min-w-[40px] lg:min-w-[50px] max-h-auto"
55
+ width = { 50 }
56
+ height = { 50 }
57
+ priority
58
+ />
59
+ < div className = "md:flex flex-col text-center text-[20px] md:text-[24px] font-jetbrains items-center text-offWhite justify-center md:ml-2" >
60
+ Home
61
+ </ div >
43
62
</ div >
44
63
</ div >
45
- < div className = "sm:flex flex-col space-y-4 font-jetbrains m-2 mt-10 overflow-hidden lg:w-full" >
64
+ < div className = "md:flex flex-col space-y-4 font-jetbrains m-2 mt-10 overflow-hidden lg:w-full" >
65
+ { buttons . map ( ( button , index ) => (
66
+ < SideBarButton
67
+ key = { index }
68
+ icon = { button . icon }
69
+ text = { button . name }
70
+ collapsed = { collapsed }
71
+ onClick = { ( ) => handleButtonClick ( button . name . toLowerCase ( ) ) }
72
+ />
73
+ ) ) }
74
+ </ div >
75
+ </ div > :
76
+ // For mobile scren
77
+ < div className = "flex flex-col items-center min-h-full py-5 px-2 bg-panelColor text-white w-full" >
78
+ < div className = "flex flex-row items-center" >
79
+ < Image
80
+ src = "/amfoss-logo-white.png"
81
+ alt = "amfoss-logo-white"
82
+ className = "h-auto w-[8vw] max-h-auto"
83
+ width = { 50 }
84
+ height = { 50 }
85
+ priority
86
+ />
87
+ < div className = "flex text-center items-center mr-0" onClick = { toggleCollapsed } > { collapsed ? < FaAngleRight className = "text-2xl" /> : < FaAngleLeft className = "text-2xl" /> } </ div >
88
+ </ div >
89
+ < div className = "sflex flex-col space-y-4 font-jetbrains m-2 mt-10 overflow-hidden" >
46
90
{ buttons . map ( ( button , index ) => (
47
91
< SideBarButton
48
92
key = { index }
49
93
icon = { button . icon }
50
94
text = { button . name }
95
+ collapsed = { collapsed }
51
96
onClick = { ( ) => handleButtonClick ( button . name . toLowerCase ( ) ) }
52
97
/>
53
98
) ) }
0 commit comments