2024-04-01 19:07:20 +03:00
|
|
|
import { LuLightbulb, LuLightbulbOff, LuLogOut, LuMoon, LuSun, LuUserCircle2 } from 'react-icons/lu';
|
|
|
|
|
2024-01-04 19:38:12 +03:00
|
|
|
import Dropdown from '@/components/ui/Dropdown';
|
|
|
|
import DropdownButton from '@/components/ui/DropdownButton';
|
2023-12-13 14:32:57 +03:00
|
|
|
import { useAuth } from '@/context/AuthContext';
|
2023-12-26 14:23:51 +03:00
|
|
|
import { useConceptNavigation } from '@/context/NavigationContext';
|
2024-04-01 19:07:20 +03:00
|
|
|
import { useConceptOptions } from '@/context/OptionsContext';
|
2023-07-15 17:46:19 +03:00
|
|
|
|
|
|
|
interface UserDropdownProps {
|
2023-12-28 14:04:44 +03:00
|
|
|
isOpen: boolean;
|
|
|
|
hideDropdown: () => void;
|
2023-07-15 17:46:19 +03:00
|
|
|
}
|
|
|
|
|
2023-12-25 16:53:27 +03:00
|
|
|
function UserDropdown({ isOpen, hideDropdown }: UserDropdownProps) {
|
2024-04-01 19:07:20 +03:00
|
|
|
const { darkMode, toggleDarkMode, showHelp, toggleShowHelp } = useConceptOptions();
|
2023-12-13 14:32:57 +03:00
|
|
|
const router = useConceptNavigation();
|
2023-07-25 20:27:29 +03:00
|
|
|
const { user, logout } = useAuth();
|
2023-07-15 17:46:19 +03:00
|
|
|
|
2024-04-01 19:07:20 +03:00
|
|
|
function navigateProfile() {
|
2023-08-27 16:35:17 +03:00
|
|
|
hideDropdown();
|
2023-12-13 14:32:57 +03:00
|
|
|
router.push('/profile');
|
2024-04-01 19:07:20 +03:00
|
|
|
}
|
2023-07-15 17:46:19 +03:00
|
|
|
|
2024-04-01 19:07:20 +03:00
|
|
|
function logoutAndRedirect() {
|
2023-07-25 20:27:29 +03:00
|
|
|
hideDropdown();
|
2023-12-13 14:32:57 +03:00
|
|
|
logout(() => router.push('/login/'));
|
2024-04-01 19:07:20 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
function handleToggleDarkMode() {
|
|
|
|
hideDropdown();
|
|
|
|
toggleDarkMode();
|
|
|
|
}
|
2023-07-16 22:53:22 +03:00
|
|
|
|
2023-07-15 17:46:19 +03:00
|
|
|
return (
|
2024-04-01 19:07:20 +03:00
|
|
|
<Dropdown className='min-w-[18ch] max-w-[12rem]' stretchLeft isOpen={isOpen}>
|
|
|
|
<DropdownButton
|
|
|
|
text={user?.username}
|
|
|
|
title='Профиль пользователя'
|
|
|
|
icon={<LuUserCircle2 size='1rem' />}
|
|
|
|
onClick={navigateProfile}
|
|
|
|
/>
|
2023-12-28 14:04:44 +03:00
|
|
|
<DropdownButton
|
2024-04-01 19:07:20 +03:00
|
|
|
text={darkMode ? 'Тема: Темная' : 'Тема: Светлая'}
|
|
|
|
icon={darkMode ? <LuMoon size='1rem' /> : <LuSun size='1rem' />}
|
2023-12-28 14:04:44 +03:00
|
|
|
title='Переключение темы оформления'
|
2024-04-01 19:07:20 +03:00
|
|
|
onClick={handleToggleDarkMode}
|
|
|
|
/>
|
|
|
|
<DropdownButton
|
|
|
|
text={showHelp ? 'Помощь: Вкл' : 'Помощь: Выкл'}
|
|
|
|
icon={showHelp ? <LuLightbulb size='1rem' /> : <LuLightbulbOff size='1rem' />}
|
|
|
|
title='Отображение иконок подсказок'
|
|
|
|
onClick={toggleShowHelp}
|
|
|
|
/>
|
|
|
|
<DropdownButton
|
|
|
|
text='Выйти...'
|
|
|
|
className='font-semibold'
|
|
|
|
icon={<LuLogOut size='1rem' />}
|
|
|
|
onClick={logoutAndRedirect}
|
2023-12-28 14:04:44 +03:00
|
|
|
/>
|
|
|
|
</Dropdown>
|
|
|
|
);
|
2023-07-15 17:46:19 +03:00
|
|
|
}
|
|
|
|
|
2023-12-28 14:04:44 +03:00
|
|
|
export default UserDropdown;
|