Sidebar.js ung

import React, { useState, useEffect, memo } from 'react'; import { Link, useLocation, useNavigate } from 'react-router-dom'; import { Home, DollarSign, Briefcase, Settings, LogOut, Menu, X, AlertCircle } from 'lucide-react'; import toast from 'react-hot-toast'; const Sidebar = memo(() => { const [isCollapsed, setIsCollapsed] = useState(localStorage.getItem('sidebarCollapsed') === 'true'); const [isDarkMode, setIsDarkMode] = useState(localStorage.getItem('darkMode') === 'true'); const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); const location = useLocation(); const navigate = useNavigate(); const colors = { primary: '#2171B5', secondary: '#6BAED6', tertiary: '#BDD7E7', background: '#EFF3FF', }; useEffect(() => { localStorage.setItem('sidebarCollapsed', isCollapsed); }, [isCollapsed]); useEffect(() => { localStorage.setItem('darkMode', isDarkMode); }, [isDarkMode]); const menuItems = [ { path: '/home', label: 'Trang chủ', icon: Home }, { path: '/expenses', label: 'Chi tiêu', icon: DollarSign }, { path: '/investments', label: 'Đầu tư', icon: Briefcase }, { path: '/settings', label: 'Cài đặt', icon: Settings }, ]; const handleLogout = async () => { try { const token = localStorage.getItem('token'); if (token) { await fetch('https://rockefeller-finance-backend.onrender.com/api/logout', { method: 'POST', headers: { Authorization: `Bearer ${token}` }, }); } localStorage.removeItem('token'); navigate('/login'); toast.success('Đăng xuất thành công!'); } catch (err) { toast.error('Lỗi khi đăng xuất'); } }; const toggleSidebar = () => { setIsCollapsed(!isCollapsed); }; const toggleMobileMenu = () => { setIsMobileMenuOpen(!isMobileMenuOpen); }; return ( <>
{!isCollapsed && (
Rockefeller Finance

Rockefeller

)}
{!isCollapsed && (

*32 Lá Thư*: "Điều hướng thông minh, lập kế hoạch tài chính hiệu quả."

)}
    {menuItems.map((item) => { const isActive = location.pathname === item.path; return (
  • {!isCollapsed && {item.label}}
  • ); })}
{!isCollapsed && ( )}
{isMobileMenuOpen && (
)} ); }); export default Sidebar;
Huyền

Một Blog Anime chia sẻ những bộ anime hay download về để xem chất lượng cao nhất. neyuhv.blogspot.com does not host any files, it merely links to 3rd party services. Legal issues should be taken up with the file hosts and providers. neyuhv.blogspot.com is not responsible for any media files shown by the video providers.

Mới hơn Cũ hơn