source: src/components/navbar.tsx@ 82c9c53

Last change on this file since 82c9c53 was 6b8332f, checked in by stefansaveski <stefansaveski19@…>, 11 months ago

feat: Add student exams, profile, semesters, and subjects pages with respective components and data integration

  • Property mode set to 100644
File size: 3.5 KB
Line 
1"use client"
2import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
3import { faUser } from '@fortawesome/free-solid-svg-icons';
4import { faBookmark } from '@fortawesome/free-solid-svg-icons';
5import { faBook } from '@fortawesome/free-solid-svg-icons';
6import { faPenToSquare } from '@fortawesome/free-solid-svg-icons';
7import { faListCheck } from '@fortawesome/free-solid-svg-icons';
8import { faFilePdf } from '@fortawesome/free-solid-svg-icons';
9import { faBars, faTimes, faGraduationCap } from '@fortawesome/free-solid-svg-icons';
10import { useState } from 'react';
11import Link from 'next/link';
12
13const Navbar = () => {
14 const [isMenuOpen, setIsMenuOpen] = useState(false);
15
16 const toggleMenu = () => {
17 setIsMenuOpen(!isMenuOpen);
18 };
19
20 const menuItems = [
21 { icon: faUser, label: 'Профил', href: '/students/profile' },
22 { icon: faBookmark, label: 'Семестри', href: '/students/semesters' },
23 { icon: faBook, label: 'Предмети', href: '/students/subjects' },
24 { icon: faPenToSquare, label: 'Пријави', href: '/students/applications' },
25 { icon: faListCheck, label: 'Положени', href: '/students/exams' },
26 { icon: faFilePdf, label: 'Документи', href: '/students/documents' }
27 ];
28
29 return (
30 <>
31 {/* Desktop Navbar */}
32 <nav className="hidden md:flex flex-row gap-2 justify-evenly bg-primary text-white p-7 rounded-xl my-5 text-xl">
33 {menuItems.map((item, index) => (
34 <Link key={index} href={item.href}>
35 <div className="group flex flex-row items-center gap-2 px-3 py-2 rounded-lg cursor-pointer transition-all duration-300 hover:bg-white hover:bg-opacity-20 hover:scale-105 hover:shadow-lg hover:text-primary">
36 <FontAwesomeIcon icon={item.icon} className="transition-transform duration-300 group-hover:rotate-12" />
37 <span>{item.label}</span>
38 </div>
39 </Link>
40 ))}
41 </nav>
42
43 {/* Mobile Navbar */}
44 <nav className="md:hidden bg-primary text-white rounded-xl my-5">
45 <div className="flex justify-between items-center p-4">
46 {/* IKnow Logo/Text */}
47 <div className="flex items-center gap-2 text-xl font-bold">
48 <FontAwesomeIcon icon={faGraduationCap} className="text-xl" />
49 IKnow
50 </div>
51
52 {/* Hamburger Menu Button */}
53 <button
54 onClick={toggleMenu}
55 className="p-2 rounded-lg hover:bg-white hover:bg-opacity-20 transition-colors duration-300"
56 >
57 <FontAwesomeIcon
58 icon={isMenuOpen ? faTimes : faBars}
59 className="text-xl transition-transform duration-300"
60 />
61 </button>
62 </div>
63
64 {/* Mobile Menu Items */}
65 <div className={`overflow-hidden transition-all duration-300 ease-in-out ${
66 isMenuOpen ? 'max-h-96 opacity-100' : 'max-h-0 opacity-0'
67 }`}>
68 <div className="px-4 pb-4 space-y-2">
69 {menuItems.map((item, index) => (
70 <Link key={index} href={item.href}>
71 <div className="group flex flex-row items-center gap-3 px-3 py-3 rounded-lg cursor-pointer transition-all duration-300 hover:bg-white hover:bg-opacity-20 hover:text-primary">
72 <FontAwesomeIcon icon={item.icon} className="transition-transform duration-300 group-hover:rotate-12" />
73 <span className="text-lg">{item.label}</span>
74 </div>
75 </Link>
76 ))}
77 </div>
78 </div>
79 </nav>
80 </>
81 );
82};
83
84export default Navbar;
Note: See TracBrowser for help on using the repository browser.