diff --git a/src/components/modal/PlaylistModal.js b/src/components/modal/PlaylistModal.js
index 2a9b1e2..79902d9 100644
--- a/src/components/modal/PlaylistModal.js
+++ b/src/components/modal/PlaylistModal.js
@@ -11,6 +11,7 @@ import {
import { SheetManager } from "react-native-actions-sheet";
import SwiperFlatList from "react-native-swiper-flatlist";
import { icons } from "../../assets";
+import { arrayUnion, playlistsRef } from "../../config/firebase";
import { useUserData } from "../../providers/UserDataProvider";
import { createPlaylist } from "../../screens/Library/Playlists/playlist";
import { Palette } from "../../styles";
@@ -91,8 +92,25 @@ const PlaylistModal = (props) => {
containerStyle={{
width: "80%",
alignSelf: "center",
+ opacity: selectedId ? 1 : 0.5,
+ }}
+ disabled={!selectedId}
+ onPress={async () => {
+ try {
+ const projectId = props?.payload?.projectId;
+ if (!selectedId) return;
+ if (projectId) {
+ await playlistsRef.doc(selectedId).update({
+ musics: arrayUnion(projectId),
+ updatedAt: new Date(),
+ });
+ }
+ } catch (e) {
+ console.log("Add to playlist error", e?.message);
+ } finally {
+ SheetManager.hide("Playlist");
+ }
}}
- onPress={() => SheetManager.hide("Playlist")}
/>
@@ -160,7 +178,9 @@ const PlaylistModal = (props) => {
await createPlaylist({
createdBy: currentUID,
name: playlist.trim(),
- musics: [],
+ musics: props?.payload?.projectId
+ ? [props.payload.projectId]
+ : [],
createdAt: new Date(),
updatedAt: new Date(),
});
diff --git a/src/navigation/MainStack.js b/src/navigation/MainStack.js
index 7ceda17..e979b96 100644
--- a/src/navigation/MainStack.js
+++ b/src/navigation/MainStack.js
@@ -50,6 +50,7 @@ import AllMyPlaylist from "../screens/Library/AllMyPlaylist";
import AllMyLikedMusic from "../screens/Library/AllMyLikedMusic";
import Research from "../screens/Library/Research";
import MusicDetails from "../screens/Library/MusicDetails";
+import PlaylistDetails from "../screens/Library/PlaylistDetails";
import SingerProfile from "../screens/Profile/SingerProfile";
import EditProfile from "../screens/Profile/EditProfile";
import Settings from "../screens/Profile/Settings";
@@ -226,6 +227,10 @@ const screens = [
name: Routes.AllMyPlaylist,
component: AllMyPlaylist,
},
+ {
+ name: Routes.PlaylistDetails,
+ component: PlaylistDetails,
+ },
{
name: Routes.AllMyLikedMusic,
component: AllMyLikedMusic,
diff --git a/src/navigation/Routes.js b/src/navigation/Routes.js
index 8aa610b..e9cc154 100644
--- a/src/navigation/Routes.js
+++ b/src/navigation/Routes.js
@@ -65,6 +65,7 @@ export const Routes = {
Library: "Library",
AllMyMusic: "AllMyMusic",
AllMyPlaylist: "AllMyPlaylist",
+ PlaylistDetails: "PlaylistDetails",
AllMyLikedMusic: "AllMyLikedMusic",
Research: "Research",
MusicDetails: "MusicDetails",
diff --git a/src/screens/Library/AllMyLikedMusic.js b/src/screens/Library/AllMyLikedMusic.js
index b63bd55..fce7263 100644
--- a/src/screens/Library/AllMyLikedMusic.js
+++ b/src/screens/Library/AllMyLikedMusic.js
@@ -1,16 +1,16 @@
-import { View, Text, Pressable, Platform } from "react-native";
-import React, { useState } from "react";
-import Page from "../../layouts/Page";
-import { background } from "../../assets";
-import { gutters, Palette } from "../../styles";
-import MusicCard from "./components/MusicCard";
-import Animated, { Easing, FadeIn, FadeOut } from "react-native-reanimated";
import { BlurView } from "expo-blur";
-import { FONT_FAMILY } from "../../styles/Fonts";
+import React, { useState } from "react";
+import { Platform, Pressable, Text, View } from "react-native";
import { SheetManager } from "react-native-actions-sheet";
-import { navigate } from "../../navigation/NavigationService";
+import Animated, { Easing, FadeIn, FadeOut } from "react-native-reanimated";
+import { background } from "../../assets";
+import Page from "../../layouts/Page";
import { Routes } from "../../navigation";
+import { navigate } from "../../navigation/NavigationService";
import { useUser } from "../../providers/UserDataProvider";
+import { gutters, Palette } from "../../styles";
+import { FONT_FAMILY } from "../../styles/Fonts";
+import MusicCard from "./components/MusicCard";
const AllMyLikedMusic = () => {
const [top, setTop] = useState(0);
@@ -35,7 +35,9 @@ const AllMyLikedMusic = () => {
subtitle={"MusicLand"}
projectId={item?.id}
likedBy={item?.likedBy || []}
- onPress={() => navigate(Routes.MusicDetails, { projectId: item.id })}
+ onPress={() =>
+ navigate(Routes.MusicDetails, { projectId: item.id })
+ }
onPressMore={(posTop) => {
setTop(posTop);
if (showMenu) {
diff --git a/src/screens/Library/AllMyPlaylist.js b/src/screens/Library/AllMyPlaylist.js
index 108da33..caca0b4 100644
--- a/src/screens/Library/AllMyPlaylist.js
+++ b/src/screens/Library/AllMyPlaylist.js
@@ -4,10 +4,12 @@ import { Image, Platform, Pressable, Text, View } from "react-native";
import { SheetManager } from "react-native-actions-sheet";
import { background, icons } from "../../assets";
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 { useUser } from "../../providers/UserDataProvider";
+import { navigate } from "../../navigation/NavigationService";
+import { Routes } from "../../navigation";
const AllMyPlaylist = () => {
const { userPlaylists = [] } = useUser();
return (
@@ -23,7 +25,7 @@ const AllMyPlaylist = () => {
>
@@ -35,42 +37,46 @@ const AllMyPlaylist = () => {
{(Array.isArray(userPlaylists) ? userPlaylists : []).map((item) => (
-
+ navigate(Routes.PlaylistDetails, { playlistId: item?.id })
+ }
>
-
-
+
- {item?.name || "Sans nom"}
-
-
-
-
-
-
+ >
+ {item?.name || "Sans nom"}
+
+
+
+
+
+
+
))}
diff --git a/src/screens/Library/MusicDetails.js b/src/screens/Library/MusicDetails.js
index a237d2e..39d0208 100644
--- a/src/screens/Library/MusicDetails.js
+++ b/src/screens/Library/MusicDetails.js
@@ -233,7 +233,11 @@ const MusicDetails = () => {
resizeMode="contain"
/>
- SheetManager.show("Playlist")}>
+
+ SheetManager.show("Playlist", { payload: { projectId } })
+ }
+ >
{
+ const route = useRoute();
+ const playlistId = route?.params?.playlistId;
+
+ // Fetch the playlist document
+ const { data: playlist } = useDataFromRef({
+ ref: playlistId ? playlistsRef.doc(playlistId) : null,
+ simpleRef: true,
+ listener: true,
+ condition: !!playlistId,
+ refreshArray: [playlistId],
+ });
+
+ // Fetch projects by ids from playlist.musics
+ const { data: musics } = useDataFromArrayId({
+ ref: projectsRef,
+ arrayId: Array.isArray(playlist?.musics) ? playlist.musics : [],
+ condition: Array.isArray(playlist?.musics) && playlist.musics.length > 0,
+ refreshArray: [playlistId, playlist?.musics?.length || 0],
+ });
+
+ return (
+
+
+ {Array.isArray(musics) &&
+ musics.map((p) => (
+ navigate(Routes.MusicDetails, { projectId: p.id })}
+ onPressMore={() => {}}
+ />
+ ))}
+
+
+ );
+};
+
+export default PlaylistDetails;
+
diff --git a/src/screens/Library/components/MyPlaylist.js b/src/screens/Library/components/MyPlaylist.js
index e2df378..44bb92a 100644
--- a/src/screens/Library/components/MyPlaylist.js
+++ b/src/screens/Library/components/MyPlaylist.js
@@ -22,7 +22,13 @@ const MyPlaylist = () => {
>
{playlists.map((item) => (
-
+
+ navigate(Routes.PlaylistDetails, { playlistId: item.id })
+ }
+ >
{
>
{item?.name || "Sans nom"}
-
-
-
+
-
+
))}