{label}
23 | 24 | ) 25 | } 26 | 27 | export default SidebarItem 28 | -------------------------------------------------------------------------------- /hooks/useOnPlay.ts: -------------------------------------------------------------------------------- 1 | import { Song } from "@/types" 2 | 3 | import usePlayer from "./usePlayer" 4 | import useAuthModal from "./useAuthModal" 5 | import { useUser } from "./useUser" 6 | import useSubscribeModal from "./useSubscribeModal" 7 | 8 | const useOnPlay = (songs: Song[]) => { 9 | const subscribeModal = useSubscribeModal() 10 | const player = usePlayer() 11 | const authModal = useAuthModal() 12 | const { subscription, user } = useUser() 13 | 14 | const onPlay = (id: string) => { 15 | if (!user) { 16 | return authModal.onOpen() 17 | } 18 | 19 | if (!subscription) { 20 | return subscribeModal.onOpen() 21 | } 22 | 23 | player.setId(id) 24 | player.setIds(songs.map(song => song.id)) 25 | } 26 | 27 | return onPlay 28 | } 29 | 30 | export default useOnPlay 31 | -------------------------------------------------------------------------------- /app/providers/ModalProvider.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | import { useEffect, useState } from "react" 3 | 4 | import AuthModal from "../../components/AuthModal" 5 | import UploadModal from "../../components/UploadModal" 6 | import SubscribeModal from "@/components/SubscribeModal" 7 | import { ProductWithPrice } from "@/types" 8 | 9 | interface ModalProviderProps { 10 | products: ProductWithPrice[] 11 | } 12 | 13 | export default function ModalProvider({ products }: ModalProviderProps) { 14 | const [isMounted, setIsMounted] = useState(false) 15 | 16 | useEffect(() => { 17 | setIsMounted(true) 18 | }, []) 19 | 20 | if (!isMounted) { 21 | return null 22 | } 23 | 24 | return ( 25 | <> 26 |Playlist
21 |{data.title}
51 |By {data.author}
52 |Your libray
40 |{data.title}
50 |58 | By {data.author} 59 |
60 |No active plan.
42 | 45 |50 | You are currently on the 51 | {subscription?.prices?.products?.name} 52 | plan. 53 |
54 | 57 |