import { NavLink } from 'react-router-dom' import Icon from './Icon' import useUserPlaylists from '@/web/api/hooks/useUserPlaylists' import { scrollToTop } from '@/web/utils/common' import { prefetchPlaylist } from '@/web/api/hooks/usePlaylist' import { player } from '@/web/store' import { Mode, TrackListSourceType } from '@/web/utils/player' import { cx } from '@emotion/css' import { useMemo } from 'react' import { useSnapshot } from 'valtio' const primaryTabs = [ { name: '主页', icon: 'home', route: '/', }, { name: '播客', icon: 'podcast', route: '/podcast', }, { name: '音乐库', icon: 'music-library', route: '/library', }, ] as const const PrimaryTabs = () => { return (
{primaryTabs.map(tab => ( scrollToTop()} key={tab.route} to={tab.route} className={({ isActive }) => cx( '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() const playerSnapshot = useSnapshot(player) const currentPlaylistID = useMemo( () => playerSnapshot.trackListSource?.id, [playerSnapshot.trackListSource] ) const playlistMode = useMemo( () => playerSnapshot.trackListSource?.type, [playerSnapshot.trackListSource] ) const mode = useMemo(() => playerSnapshot.mode, [playerSnapshot.mode]) return (
{playlists?.playlist?.map(playlist => ( prefetchPlaylist({ id: playlist.id })} key={playlist.id} onClick={() => scrollToTop()} to={`/playlist/${playlist.id}`} className={({ isActive }: { isActive: boolean }) => cx( 'btn-hover-animation line-clamp-1 my-px mx-3 flex cursor-default items-center justify-between 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} {playlistMode === TrackListSourceType.Playlist && mode === Mode.TrackList && currentPlaylistID === playlist.id && ( )} ))}
) } const Sidebar = () => { return ( ) } export default Sidebar