import { NavLink } from 'react-router-dom' import SvgIcon from '@/components/SvgIcon' import useUser from '@/hooks/useUser' import useUserPlaylists from '@/hooks/useUserPlaylists' import { scrollToTop } from '@/utils/common' import { prefetchPlaylist } from '@/hooks/usePlaylist' interface Tab { name: string icon: string route: string } interface PrimaryTab extends Tab { icon: string } const primaryTabs: PrimaryTab[] = [ { name: '主页', icon: 'home', route: '/', }, { name: '播客', icon: 'podcast', route: '/podcast', }, { name: '音乐库', icon: 'music-library', route: '/library', }, ] const PrimaryTabs = () => { return (
{primaryTabs.map(tab => ( scrollToTop()} key={tab.route} to={tab.route} className={({ isActive }) => classNames( 'btn-hover-animation mx-3 flex cursor-default items-center rounded-lg px-3 py-2 transition-colors duration-200 after:scale-[0.97] after:bg-black/[.06] dark:after:bg-white/20', !isActive && 'text-gray-700 dark:text-white', isActive && 'text-brand-500 ' ) } > {tab.name} ))}
) } const Playlists = () => { const { data: playlists } = useUserPlaylists() return (
{playlists?.playlist?.map(playlist => ( prefetchPlaylist({ id: playlist.id })} key={playlist.id} onClick={() => scrollToTop()} to={`/playlist/${playlist.id}`} className={({ isActive }: { isActive: boolean }) => classNames( 'btn-hover-animation line-clamp-1 my-px mx-3 flex cursor-default items-center rounded-lg px-3 py-[0.38rem] text-sm text-black opacity-70 transition-colors duration-200 after:scale-[0.97] after:bg-black/[.06] dark:text-white dark:after:bg-white/20', isActive && 'after:scale-100 after:opacity-100' ) } > {playlist.name} ))}
) } const Sidebar = () => { return ( ) } export default Sidebar