Changeset 50f2fb4 for src/components/header.tsx
- Timestamp:
- 01/30/26 01:40:27 (8 months ago)
- Branches:
- master
- Children:
- ba52069
- Parents:
- 298f9b3
- File:
-
- 1 edited
-
src/components/header.tsx (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/components/header.tsx
r298f9b3 r50f2fb4 1 1 "use client" 2 2 3 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; 3 4 import { faUser } from '@fortawesome/free-solid-svg-icons'; 4 5 import Image from 'next/image'; 5 6 7 import { useEffect, useState } from 'react'; 8 import { getAccessToken, clearAuthTokens } from '@/lib/auth'; 9 import { useTranslation } from 'react-i18next'; 10 import LanguageSwitcher from './LanguageSwitcher'; 11 6 12 const Header = () => { 13 14 const [userName, setUserName] = useState<string>(''); 15 const { t } = useTranslation(); 16 17 useEffect(() => { 18 async function fetchUser() { 19 const token = getAccessToken(); 20 if (!token) return; 21 try { 22 const response = await fetch('https://iknow-api.onrender.com/api/user/getUser', { 23 method: 'GET', 24 headers: { Authorization: `Bearer ${token}` }, 25 }); 26 if (!response.ok) return; 27 const data = await response.json(); 28 // Try both student and professor shape 29 if (data?.personalInfo) { 30 const p = data.personalInfo; 31 setUserName([p.firstName, p.middleName, p.lastName].filter(Boolean).join(' ')); 32 } 33 } catch {} 34 } 35 fetchUser(); 36 return () => {}; 37 }, []); 38 39 const handleLogout = () => { 40 clearAuthTokens(); 41 if (typeof window !== 'undefined') { 42 window.location.href = '/'; 43 } 44 }; 45 7 46 return ( 8 47 <header className="bg-white shadow-sm border-b border-gray-200"> 9 48 <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> 10 <div className="flex justify-between items-center py-4">49 <div className="flex flex-col sm:flex-row sm:justify-between sm:items-center py-4 gap-4 sm:gap-0"> 11 50 {/* Left side - Logos and University Info */} 12 <div className="flex items-center gap- 4">51 <div className="flex items-center gap-2 justify-center sm:justify-start"> 13 52 {/* UKIM Logo */} 14 53 <div className="flex-shrink-0"> … … 21 60 /> 22 61 </div> 23 24 62 {/* FINKI Logo */} 25 63 <div className="flex-shrink-0"> … … 32 70 /> 33 71 </div> 34 35 72 {/* University Text */} 36 73 <div className="hidden sm:block"> 37 74 <div className="text-gray-900 font-medium text-sm"> 38 Универзитет „Св. КИРИЛ И МЕТОДИЈ“ - Скопје75 {t('university')} 39 76 </div> 40 77 <div className="text-gray-700 text-sm"> 41 Факултет за информатички науки и компјутерско инженерство78 {t('faculty')} 42 79 </div> 43 80 </div> 44 81 </div> 45 46 82 {/* Right side - User Profile */} 47 <div className="flex items-center gap-4"> 48 <div className="flex items-center gap-3"> 83 <div className="flex flex-col sm:flex-row items-center gap-2 sm:gap-4 w-full sm:w-auto justify-center sm:justify-end"> 84 {/* Language Switcher - now left of user info */} 85 <div className="sm:mr-2 w-full sm:w-auto flex justify-center sm:justify-end"> 86 <LanguageSwitcher /> 87 </div> 88 <div className="flex items-center gap-2 sm:gap-3 w-full sm:w-auto justify-center sm:justify-end"> 49 89 {/* User Avatar */} 50 <div className=" flex items-center justify-center w-10 h-10 bg-gray-800 text-white rounded-full">90 <div className="hidden sm:flex items-center justify-center w-10 h-10 bg-gray-800 text-white rounded-full"> 51 91 <FontAwesomeIcon icon={faUser} className="text-sm" /> 52 92 </div> 53 54 93 {/* User Name */} 55 94 <div className="hidden sm:block text-gray-900 font-medium"> 56 Стефан Савески95 {userName || '...'} 57 96 </div> 58 59 {/* Logout Button */} 60 <button className="text-blue-600 hover:text-blue-800 font-medium text-sm transition-colors duration-200"> 61 Logout 97 {/* Logout Button - more stylish and full width on mobile */} 98 <button 99 className="w-full sm:w-auto ml-0 sm:ml-2 px-4 py-2 border-2 border-primary text-primary bg-white rounded-lg font-semibold flex items-center justify-center gap-2 hover:bg-blue-50 transition-all duration-200 shadow-sm" 100 onClick={handleLogout} 101 > 102 <svg xmlns='http://www.w3.org/2000/svg' className='h-4 w-4' fill='none' viewBox='0 0 24 24' stroke='currentColor'><path strokeLinecap='round' strokeLinejoin='round' strokeWidth={2} d='M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a2 2 0 01-2 2H7a2 2 0 01-2-2V7a2 2 0 012-2h4a2 2 0 012 2v1' /></svg> 103 {t('logout')} 62 104 </button> 63 105 </div>
Note:
See TracChangeset
for help on using the changeset viewer.
