import { BlurView } from "expo-blur"; import React, { useState } from "react"; import { Image, Pressable, Text, View } from "react-native"; import { SheetManager } from "react-native-actions-sheet"; import { useGlobal } from "reactn"; import { background, icons } from "../../assets"; import MoreMenu from "../../components/MoreMenu"; import { playlistsRef, projectsRef } from "../../config/firebase"; import useDataFromArrayDocId from "../../hooks/useDataFromArrayId"; import useDataFromRef from "../../hooks/useDataFromRef"; import useNavigateToMusicDetails from "../../hooks/useNavigateToMusicDetails"; import Page from "../../layouts/Page"; import { useUser } from "../../providers/UserDataProvider"; import { gutters, Palette, Style } from "../../styles"; import { FONT_FAMILY } from "../../styles/Fonts"; import { size } from "../../styles/Style"; import MusicCard from "./components/MusicCard"; const AllMyPlaylist = ({ route }) => { const { playListId } = route?.params || {}; const [, setTooltip] = useGlobal("_tooltip"); const { userPlaylists = [] } = useUser(); const [selectedPlaylistId, setSelectedPlaylistId] = useState( playListId || null ); const { data: playlist } = useDataFromRef({ ref: selectedPlaylistId ? playlistsRef.doc(selectedPlaylistId) : null, simpleRef: true, listener: true, condition: !!selectedPlaylistId, refreshArray: [selectedPlaylistId], }); // Fetch projects by ids from playlist.musics const { data: musics } = useDataFromArrayDocId({ ref: projectsRef, arrayId: Array.isArray(playlist?.musics) ? playlist.musics : [], condition: Array.isArray(playlist?.musics) && playlist.musics.length > 0, refreshArray: [selectedPlaylistId, playlist?.musics?.length || 0], }); const [menuPosition, setMenuPosition] = useState(null); const [showMenu, setShowMenu] = useState(false); const [selectedProjectId, setSelectedProjectId] = useState(null); const navigateToMusicDetails = useNavigateToMusicDetails(); // delete playlist const confirmDelete = () => { SheetManager.show("Delete", { payload: { title: "Supprimer la playlist", message: "Es-tu sûr de vouloir supprimer cette playlist ?", onConfirm: async () => { try { if (selectedPlaylistId) { await playlistsRef.doc(selectedPlaylistId).delete(); setTooltip({ type: "success", text: "Playlist supprimée" }); } } catch (e) { console.log("Delete playlist error", e?.message); setTooltip({ type: "error", text: e?.message || "Suppression impossible", }); } }, }, }); }; return ( ( <> {selectedPlaylistId != null && ( )} )} > {(Array.isArray(userPlaylists) ? userPlaylists : []).map( (item) => { const isSelected = selectedPlaylistId === item?.id; return ( setSelectedPlaylistId(item?.id)} > {item?.name || "Sans nom"} ); } )} SheetManager.show("Playlist", { payload: { startAtCreate: true }, }) } > Ajouter une playlist {Array.isArray(musics) && musics.map((p) => ( navigateToMusicDetails({ projectId: p.id, songUrl: p?.songUrl, }) } onPressMore={(posTop) => { setSelectedProjectId(p.id); setMenuPosition(posTop); setShowMenu( (prev) => !prev || posTop?.top !== (menuPosition?.top ?? null) ); }} /> ))} setShowMenu(false)} inPlaylist playlistId={selectedPlaylistId} projectId={selectedProjectId} /> ); }; export default AllMyPlaylist;