import { useEffect, useState } from 'react'; import { useRecoilValue } from 'recoil'; import { AREAS, collectionStore } from '../../stores'; import { getPlaylistsFromWNFS, type Playlist } from '../../lib/playlists'; import FileUploadCard from '../upload/FileUploadCard'; import PlaylistCard from './playlistCard'; import PlaylistModal from './playlistModal'; const Collection = () => { const collection = useRecoilValue(collectionStore); const [selectedArea, setSelectedArea] = useState<string | null>( collection.selectedArea ); const [selectedPlaylist, setSelectedPlaylist] = useState<Playlist | null>( null ); const selectedCollection = collection.selectedArea === AREAS.PRIVATE ? collection.privatePlaylists : collection.publicPlaylists; /** * Open the ImageModal and pass it the selected `image` from the gallery * @param image */ const handleOpenModal: (playlist: Playlist) => void = (playlist) => setSelectedPlaylist(playlist); const clearSelectedPlaylist = () => setSelectedPlaylist(null); useEffect(() => { // If collectionStore.selectedArea changes from private to public, re-run getPlaylistsFromWNFS if (!collection.loading && selectedArea !== collection.selectedArea) { const refetchPlaylists = async () => { setSelectedArea(collection.selectedArea); await getPlaylistsFromWNFS(); }; refetchPlaylists(); } // eslint-disable-next-line }, [collection.selectedArea, selectedArea]); const useMountEffect = () => useEffect(() => { // Get images from the user's public WNFS getPlaylistsFromWNFS(); }, []); useMountEffect(); return ( <section className="overflow-hidden text-gray-700"> <div className="p-6 pt-8 mx-auto md:p-8"> <div className="grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-4 xl:lg:grid-cols-6"> <FileUploadCard /> {selectedCollection?.map((playlist: Playlist) => ( <PlaylistCard key={playlist.cid} playlist={playlist} openModal={handleOpenModal} /> ))} </div> </div> {selectedPlaylist && ( <PlaylistModal playlist={selectedPlaylist} isModalOpen={!!selectedPlaylist} onClose={clearSelectedPlaylist} /> )} </section> ); }; export default Collection;