116 lines
2.8 KiB
TypeScript
Raw Normal View History

2022-05-29 17:53:27 +08:00
import { css, cx } from '@emotion/css'
import PlayLikedSongsCard from '@/web/components/New/PlayLikedSongsCard'
import PageTransition from '@/web/components/New/PageTransition'
import useUserArtists from '@/web/api/hooks/useUserArtists'
import ArtistRow from '@/web/components/New/ArtistRow'
import Tabs from '@/web/components/New/Tabs'
2022-06-06 01:00:25 +08:00
import { useMemo, useState } from 'react'
2022-05-29 17:53:27 +08:00
import CoverRow from '@/web/components/New/CoverRow'
import useUserPlaylists from '@/web/api/hooks/useUserPlaylists'
import useUserAlbums from '@/web/api/hooks/useUserAlbums'
2022-06-06 01:00:25 +08:00
import useUserListenedRecords from '@/web/api/hooks/useUserListenedRecords'
import useArtists from '@/web/api/hooks/useArtists'
2022-05-29 17:53:27 +08:00
const tabs = [
{
id: 'playlists',
name: 'Playlists',
},
{
id: 'albums',
name: 'Albums',
},
{
id: 'artists',
name: 'Artists',
},
{
id: 'videos',
name: 'Videos',
},
]
2022-06-11 00:19:07 +08:00
const Albums = () => {
2022-05-29 17:53:27 +08:00
const { data: albums } = useUserAlbums()
2022-06-11 00:19:07 +08:00
return <CoverRow albums={albums?.data} className='mt-6 px-2.5 lg:px-0' />
}
const Playlists = () => {
const { data: playlists } = useUserPlaylists()
return (
2022-06-12 15:29:14 +08:00
<CoverRow
playlists={playlists?.playlist?.slice(1)}
className='mt-6 px-2.5 lg:px-0'
/>
2022-06-11 00:19:07 +08:00
)
}
const Collections = () => {
// const { data: artists } = useUserArtists()
2022-05-29 17:53:27 +08:00
const [selectedTab, setSelectedTab] = useState(tabs[0].id)
2022-06-11 00:19:07 +08:00
return (
<div>
<Tabs
tabs={tabs}
value={selectedTab}
onChange={(id: string) => setSelectedTab(id)}
className='px-2.5 lg:px-0'
/>
{selectedTab === 'albums' && <Albums />}
{selectedTab === 'playlists' && <Playlists />}
</div>
)
}
const RecentlyListened = () => {
2022-06-06 01:00:25 +08:00
const { data: listenedRecords } = useUserListenedRecords({ type: 'week' })
const recentListenedArtistsIDs = useMemo(() => {
const artists: {
id: number
playCount: number
}[] = []
listenedRecords?.weekData?.forEach(record => {
const artist = record.song.ar[0]
const index = artists.findIndex(a => a.id === artist.id)
if (index === -1) {
artists.push({
id: artist.id,
playCount: record.playCount,
})
} else {
artists[index].playCount += record.playCount
}
})
return artists
.sort((a, b) => b.playCount - a.playCount)
.slice(0, 5)
.map(artist => artist.id)
}, [listenedRecords])
const { data: recentListenedArtists } = useArtists(recentListenedArtistsIDs)
2022-06-11 00:19:07 +08:00
return (
<ArtistRow
artists={recentListenedArtists?.map(a => a.artist)}
placeholderRow={1}
title='RECENTLY LISTENED'
/>
)
}
const My = () => {
2022-05-29 17:53:27 +08:00
return (
<PageTransition>
<div className='grid grid-cols-1 gap-10'>
<PlayLikedSongsCard />
2022-06-11 00:19:07 +08:00
<RecentlyListened />
<Collections />
2022-05-29 17:53:27 +08:00
</div>
</PageTransition>
)
}
export default My