import { useEffect, useState } from 'react'; import { Link, router, usePage } from '@inertiajs/react'; import { BadgeCheck, ChevronsUpDown, Star, History, ChevronDown, LogOut, Search, Book, TableOfContents, House, HardDriveDownload, Moon, Sun, Layers, SquarePower } from 'lucide-react'; import { Avatar, AvatarFallback } from '@/components/ui/avatar'; import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'; import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'; import { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarMenu, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem } from '@/components/ui/sidebar'; import { useToast } from '@/hooks/use-toast.js'; export function AppSidebar({ auth }) { const { tags } = usePage().props; const [search, setSearch] = useState(''); const [historyDisabled, setHistoryDisabled] = useState(false); const { toast } = useToast(); const searchOnSubmitHandler = (e) => { e.preventDefault(); // Visit the search page router.get(route('comics.search', [search])); } const SidebarItem = (props) => { const searchParams = new URL(window.location).searchParams; const isActive = (!searchParams.has(props.query) && props.name === 'All') || (searchParams.has(props.query) && searchParams.get(props.query) === props.path_word); // To current, replace if (searchParams.has(props.query)) { searchParams.set(props.query, props.path_word); } else { searchParams.set(props.query, props.path_word); } return ( setSearch("") }> { props.name } { props.count && { props.count } } ); }; const getTheme = () => { if (localStorage.getItem('theme')) { return localStorage.getItem('theme'); } return 'light'; } const themeButtonOnclickHandler = () => { const t = (theme === 'light') ? 'dark' : 'light'; // Set local storage localStorage.setItem('theme', t); setTheme(t); setThemeInHtml(t); } const setThemeInHtml = (theme) => { const root = window.document.documentElement; root.classList.remove("light", "dark"); root.classList.add(theme); } const [theme, setTheme] = useState(getTheme()); const toggleHistoryButtonHandler = () => { axios.post(route('comics.toggleHistory')).then(res => { setHistoryDisabled(res.data.historyDisabled); toast({ title: "All set", description: `Histories are now ${ res.data.historyDisabled ? 'Disabled' : 'Enabled' }`, }); }); } useEffect(() => { setTheme(getTheme()); setThemeInHtml(getTheme()); // Set historyDisabled setHistoryDisabled(auth.user.historyDisabled); }, []); return (
Comic 0.1.6
searchOnSubmitHandler(e) }> setSearch(e.target.value) } id="search" placeholder="Search" className="pl-8" />
Others Index Installation Updates and notes Tags { tags.theme.map(item => ) } Region { tags.top.map(item => ) }
{ auth.user.name.slice(0, 1).toLocaleUpperCase() }
{ auth.user.name }
{ auth.user.name.slice(0, 1).toLocaleUpperCase() }
{ auth.user.name }
toggleHistoryButtonHandler() }> { (historyDisabled) ? "History Off" : "History On" } themeButtonOnclickHandler() }> <>{ theme === 'dark' ? () : () } Toggle theme Queues Profile Favourites History Log out
) }