From c30b87b565ba2dc311a948e40c1ac5f6769f1890 Mon Sep 17 00:00:00 2001 From: leon-morival Date: Wed, 3 Sep 2025 17:03:30 +0200 Subject: [PATCH] refacto --- src/navigation/MainStack.js | 11 +-- src/navigation/Routes.js | 3 +- .../{AllMyLikedMusic.js => AllMyList.js} | 58 +++++++++--- src/screens/Library/AllMyMusic.js | 93 ------------------- src/screens/Library/components/BackTracks.js | 11 ++- src/screens/Library/components/LikedMusic.js | 8 +- .../Library/components/LikedPlayback.js | 11 ++- src/screens/Library/components/MyMusic.js | 8 +- 8 files changed, 81 insertions(+), 122 deletions(-) rename src/screens/Library/{AllMyLikedMusic.js => AllMyList.js} (58%) delete mode 100644 src/screens/Library/AllMyMusic.js diff --git a/src/navigation/MainStack.js b/src/navigation/MainStack.js index 17c519e..b52ad5f 100644 --- a/src/navigation/MainStack.js +++ b/src/navigation/MainStack.js @@ -46,9 +46,8 @@ import ChooseDecor from "../screens/Playback/ChooseDecor"; import CreatingDecor from "../screens/Playback/CreatingDecor"; import VideoFinalize from "../screens/Playback/VideoFinalize"; import GeneratingSong from "../screens/Studio/GeneratingSong"; -import AllMyMusic from "../screens/Library/AllMyMusic"; import AllMyPlaylist from "../screens/Library/AllMyPlaylist"; -import AllMyLikedMusic from "../screens/Library/AllMyLikedMusic"; +import AllMyList from "../screens/Library/AllMyList"; import Research from "../screens/Library/Research"; import MusicDetails from "../screens/Library/MusicDetails"; import PlaylistDetails from "../screens/Library/PlaylistDetails"; @@ -227,10 +226,6 @@ const screens = [ name: Routes.VideoFinalize, component: VideoFinalize, }, - { - name: Routes.AllMyMusic, - component: AllMyMusic, - }, { name: Routes.AllMyPlaylist, component: AllMyPlaylist, @@ -240,8 +235,8 @@ const screens = [ component: PlaylistDetails, }, { - name: Routes.AllMyLikedMusic, - component: AllMyLikedMusic, + name: Routes.AllMyList, + component: AllMyList, }, { name: Routes.Research, diff --git a/src/navigation/Routes.js b/src/navigation/Routes.js index 6936f2b..7541dbe 100644 --- a/src/navigation/Routes.js +++ b/src/navigation/Routes.js @@ -64,10 +64,9 @@ export const Routes = { Playbacks: "Playbacks", Library: "Library", - AllMyMusic: "AllMyMusic", AllMyPlaylist: "AllMyPlaylist", PlaylistDetails: "PlaylistDetails", - AllMyLikedMusic: "AllMyLikedMusic", + AllMyList: "AllMyList", Research: "Research", MusicDetails: "MusicDetails", diff --git a/src/screens/Library/AllMyLikedMusic.js b/src/screens/Library/AllMyList.js similarity index 58% rename from src/screens/Library/AllMyLikedMusic.js rename to src/screens/Library/AllMyList.js index afe81f3..7b28ddf 100644 --- a/src/screens/Library/AllMyLikedMusic.js +++ b/src/screens/Library/AllMyList.js @@ -1,33 +1,65 @@ -import { BlurView } from "expo-blur"; +import { useRoute } from "@react-navigation/core"; import React, { useState } from "react"; import { View } from "react-native"; import { background } from "../../assets"; +import MoreMenu from "../../components/MoreMenu"; 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 { gutters } from "../../styles"; import MusicCard from "./components/MusicCard"; -import MoreMenu from "../../components/MoreMenu"; -const AllMyLikedMusic = () => { +export default function AllMyList() { + const route = useRoute(); + const { + title = "Mes éléments", + scope = "music", + liked = false, + } = route?.params || {}; + + const { userProjects, userLikedProjects, userPlaybacks, userLikedPlaybacks } = + useUser(); + + const items = (() => { + if (scope === "playback") { + return Array.isArray(liked ? userLikedPlaybacks : userPlaybacks) + ? liked + ? userLikedPlaybacks + : userPlaybacks + : []; + } + // music (projects) + return Array.isArray(liked ? userLikedProjects : userProjects) + ? liked + ? userLikedProjects + : userProjects + : []; + })(); + const [top, setTop] = useState(0); const [showMenu, setShowMenu] = useState(false); const [selectedProjectId, setSelectedProjectId] = useState(null); - const { userLikedProjects: projects } = useUser(); + + const onPressItem = (item) => { + if (scope === "playback") { + navigate(Routes.Playbacks, { projectId: item.id }); + } else { + navigate(Routes.MusicDetails, { projectId: item.id }); + } + }; return ( - {Array.isArray(projects) && - projects.map((item) => ( + {Array.isArray(items) && + items.map((item) => ( { subtitle={"MusicLand"} projectId={item?.id} likedBy={item?.likedBy || []} - onPress={() => - navigate(Routes.MusicDetails, { projectId: item.id }) - } + onPress={() => onPressItem(item)} onPressMore={(posTop) => { setSelectedProjectId(item.id); setTop(posTop); @@ -56,6 +86,4 @@ const AllMyLikedMusic = () => { ); -}; - -export default AllMyLikedMusic; +} diff --git a/src/screens/Library/AllMyMusic.js b/src/screens/Library/AllMyMusic.js deleted file mode 100644 index 03d587e..0000000 --- a/src/screens/Library/AllMyMusic.js +++ /dev/null @@ -1,93 +0,0 @@ -import { View, Text, FlatList, Pressable, Image as RNImage } from "react-native"; -import { Image as ExpoImage } from "expo-image"; -import React, { useState } from "react"; -import Page from "../../layouts/Page"; -import { background, img } from "../../assets"; -import CreateLyricsHeader from "../Writing/components/CreateLyricsHeader"; -import { gutters, Palette } from "../../styles"; -import { FONT_FAMILY } from "../../styles/Fonts"; -import useLayoutType from "../../hooks/useLayoutType"; -import { useUser } from "../../providers/UserDataProvider"; -import { navigate } from "../../navigation/NavigationService"; -import { Routes } from "../../navigation"; - -const AllMyMusic = () => { - const [containerLayout, setContainerLayout] = useState(null); - const { isWeb } = useLayoutType(); - const { userProjects: projects } = useUser(); - - return ( - - setContainerLayout(e.nativeEvent.layout)} - > - - item.id} - // Projects are provided by provider with a live listener - renderItem={({ item }) => ( - - navigate(Routes.MusicDetails, { projectId: item.id }) - } - > - {item?.coverUrl ? ( - - ) : ( - - )} - - {item?.title || "Sans titre"} - - - )} - /> - - - - ); -}; - -export default AllMyMusic; diff --git a/src/screens/Library/components/BackTracks.js b/src/screens/Library/components/BackTracks.js index f78c154..54a9874 100644 --- a/src/screens/Library/components/BackTracks.js +++ b/src/screens/Library/components/BackTracks.js @@ -23,7 +23,16 @@ const BackTracks = () => { ); return ( - + + navigate(Routes.AllMyList, { + title: "Mes playbacks", + scope: "playback", + liked: false, + }) + } + > {items.length > 0 && ( { return ( navigate(Routes.AllMyLikedMusic)} + onPress={() => + navigate(Routes.AllMyList, { + title: "Musiques likées", + scope: "music", + liked: true, + }) + } > setContainerWidth(e.nativeEvent.layout.width)} diff --git a/src/screens/Library/components/LikedPlayback.js b/src/screens/Library/components/LikedPlayback.js index b1b3073..f1ec13e 100644 --- a/src/screens/Library/components/LikedPlayback.js +++ b/src/screens/Library/components/LikedPlayback.js @@ -25,7 +25,16 @@ const LikedPlayback = () => { Math.floor((containerWidth - gap * (numColumns - 1)) / numColumns) ); return ( - + + navigate(Routes.AllMyList, { + title: "Playbacks likés", + scope: "playback", + liked: true, + }) + } + > {items.length > 0 && ( { return ( navigate(Routes.AllMyMusic)} + onPress={() => + navigate(Routes.AllMyList, { + title: "Mes musiques", + scope: "music", + liked: false, + }) + } > {Array.isArray(projects) &&