import React, { useState, useEffect, useRef } from 'react'; import { SunIcon, MoonIcon, PlusIcon, CheckIcon, FolderIcon, BookOpenIcon, Squares2X2Icon, TagIcon, InboxIcon, } from '@heroicons/react/24/outline'; import TelegramIcon from '../Icons/TelegramIcon'; import { useTranslation } from 'react-i18next'; import { Note } from '../../entities/Note'; import { Area } from '../../entities/Area'; import { useTelegramStatus } from '../../contexts/TelegramStatusContext'; interface SidebarFooterProps { currentUser: { email: string }; isDarkMode: boolean; toggleDarkMode: () => void; isSidebarOpen: boolean; setIsSidebarOpen: React.Dispatch>; isDropdownOpen: boolean; toggleDropdown: () => void; openTaskModal: (type?: 'simplified' | 'full') => void; openProjectModal: () => void; openNoteModal: (note: Note | null) => void; openAreaModal: (area: Area | null) => void; openTagModal: (tag: any | null) => void; } const SidebarFooter: React.FC = ({ isDarkMode, toggleDarkMode, isSidebarOpen, openTaskModal, openProjectModal, openNoteModal, openAreaModal, openTagModal, }) => { const { t } = useTranslation(); const [isDropdownOpen, setIsDropdownOpen] = useState(false); const { status: telegramStatus } = useTelegramStatus(); const dropdownRef = useRef(null); const toggleDropdown = () => { setIsDropdownOpen(!isDropdownOpen); }; // Handle click outside to close dropdown useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if ( dropdownRef.current && !dropdownRef.current.contains(event.target as Node) ) { setIsDropdownOpen(false); } }; if (isDropdownOpen) { document.addEventListener('mousedown', handleClickOutside); } return () => { document.removeEventListener('mousedown', handleClickOutside); }; }, [isDropdownOpen]); // Handle keyboard shortcuts useEffect(() => { const handleKeyDown = (event: KeyboardEvent) => { // Check for Ctrl + Shift key combinations only (not Cmd/Meta key) if (event.ctrlKey && event.shiftKey && !event.metaKey) { switch (event.key.toLowerCase()) { case 'i': event.preventDefault(); handleDropdownSelect('Inbox'); break; case 't': event.preventDefault(); handleDropdownSelect('Task'); break; case 'p': event.preventDefault(); handleDropdownSelect('Project'); break; case 'n': event.preventDefault(); handleDropdownSelect('Note'); break; case 'a': event.preventDefault(); handleDropdownSelect('Area'); break; case 'g': event.preventDefault(); handleDropdownSelect('Tag'); break; default: break; } } }; document.addEventListener('keydown', handleKeyDown); return () => { document.removeEventListener('keydown', handleKeyDown); }; }, []); const handleDropdownSelect = (type: string) => { switch (type) { case 'Inbox': openTaskModal('simplified'); break; case 'Task': openTaskModal('full'); break; case 'Project': openProjectModal(); break; case 'Note': openNoteModal(null); break; case 'Area': openAreaModal(null); break; case 'Tag': openTagModal(null); break; default: break; } setIsDropdownOpen(false); }; const dropdownItems = [ { label: 'Inbox', translationKey: 'dropdown.inbox', icon: , shortcut: 'Ctrl+Shift+I', }, { label: 'Task', translationKey: 'dropdown.task', icon: , shortcut: 'Ctrl+Shift+T', }, { label: 'Project', translationKey: 'dropdown.project', icon: , shortcut: 'Ctrl+Shift+P', }, { label: 'Note', translationKey: 'dropdown.note', icon: , shortcut: 'Ctrl+Shift+N', }, { label: 'Area', translationKey: 'dropdown.area', icon: , shortcut: 'Ctrl+Shift+A', }, { label: 'Tag', translationKey: 'dropdown.tag', icon: , shortcut: 'Ctrl+Shift+G', }, ]; return (
{isSidebarOpen && (
{/* Plus Icon Button - Left */}
{/* Dropdown Menu */} {isDropdownOpen && (
{dropdownItems.map( ({ label, translationKey, icon, shortcut, }) => ( ) )}
)}
{/* Telegram Status and Dark Mode Toggle - Right */}
{/* Telegram Status Indicator */} {telegramStatus !== 'none' && (
)} {/* Dark Mode Toggle */}
)}
); }; export default SidebarFooter;