source: lan-frontend/src/components/SideMenu.jsx

Last change on this file was a762898, checked in by istevanoska <ilinastevanoska@…>, 5 months ago

Added visualizations

  • Property mode set to 100644
File size: 3.5 KB
Line 
1import React, {useEffect, useRef, useState} from "react";
2
3function Item({active, icon, label, onClick, collapsed}) {
4 return (
5 <button
6 onClick={onClick}
7 className={`side-item ${active ? "active" : ""}`}
8 title={label}
9 type="button"
10 >
11 <span className="side-icon">{icon}</span>
12 {!collapsed && <span className="side-label">{label}</span>}
13 </button>
14 );
15}
16
17export default function SideMenu({activeView, setActiveView}) {
18 const [open, setOpen] = useState(false);
19 const rootRef = useRef(null);
20
21 // close on click outside (ако е open преку click)
22 useEffect(() => {
23 function onDocClick(e) {
24 if (!open) return;
25 if (!rootRef.current) return;
26 if (!rootRef.current.contains(e.target)) setOpen(false);
27 }
28
29 document.addEventListener("mousedown", onDocClick);
30 return () => document.removeEventListener("mousedown", onDocClick);
31 }, [open]);
32
33 const collapsed = !open;
34
35 return (
36 <aside
37 ref={rootRef}
38 className={`side ${open ? "open" : "collapsed"}`}
39 onMouseEnter={() => setOpen(true)} // hover open
40 onMouseLeave={() => setOpen(false)} // hover close
41 >
42 {/* мал “handle” што се гледа секогаш */}
43 <button
44 className="side-handle"
45 type="button"
46 onClick={() => setOpen((v) => !v)} // click toggle (ако не сакаш click, избриши ова)
47 aria-label="Toggle menu"
48 title="Menu"
49 >
50 {open ? "◀" : "▶"}
51 </button>
52
53 <div className="side-inner">
54 <div className="side-brand">
55 <div className="side-brand-dot"/>
56 {!collapsed && (
57 <div className="side-brand-text">
58 <div className="side-brand-title">netIntel</div>
59 <div className="side-brand-sub">tenant dashboard</div>
60 </div>
61 )}
62 </div>
63
64
65 <div className="side-section">
66 {/*<div className="side-section-title">MAIN</div>*/}
67
68 <Item
69 collapsed={collapsed}
70 active={activeView === "dashboard"}
71 icon="🖥️"
72 label="Dashboard"
73 onClick={() => setActiveView("dashboard")}
74 />
75
76 <Item
77 collapsed={collapsed}
78 active={activeView === "visualizations"}
79 icon="📈"
80 label="Visualizations"
81 onClick={() => setActiveView("visualizations")}
82 />
83
84 <Item
85 collapsed={collapsed}
86 active={activeView === "account"}
87 icon="👤"
88 label="Account"
89 onClick={() => setActiveView("account")}
90 />
91 </div>
92
93 {!collapsed && (
94 <div className="side-footer">
95 <div className="side-footer-hint">Tip: користи Visualizations за графови</div>
96 </div>
97 )}
98 </div>
99 </aside>
100 );
101}
Note: See TracBrowser for help on using the repository browser.