playlists

This commit is contained in:
2025-08-29 11:38:17 +02:00
parent d857be1424
commit e0146321b8
9 changed files with 248 additions and 108 deletions
+27 -14
View File
@@ -1,31 +1,44 @@
import { View, Text, Image, Pressable, Platform } from "react-native";
import React from "react";
import Page from "../../layouts/Page";
import { background, icons } from "../../assets";
import { gutters, Palette, Style } from "../../styles";
import { BlurView } from "expo-blur";
import React from "react";
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 { gutters, Palette, Style } from "../../styles";
import { FONT_FAMILY } from "../../styles/Fonts";
import { size } from "../../styles/Style";
import { useUser } from "../../providers/UserDataProvider";
const AllMyPlaylist = () => {
const { userPlaylists = [] } = useUser();
return (
<Page
headerType="NAVIGATION"
backgroundImg={background.libraryBG}
title="Mes Playlists"
rightComponent={() => (
<Pressable
onPress={() =>
SheetManager.show("Playlist", { payload: { startAtCreate: true } })
}
>
<Image
source={icons.add}
style={size({ size: 18 })}
resizeMode="contain"
/>
</Pressable>
)}
contentContainerStyle={{
paddingBottom: gutters * 2,
}}
>
<View style={{ flex: 1 }}>
<View style={{ gap: 8 }}>
{[
"Musiques de lover",
"Musiques triste",
"Happy new year",
"Happy songs",
].map((item, index) => (
<View style={{ borderRadius: 12, overflow: "hidden" }} key={index}>
{(Array.isArray(userPlaylists) ? userPlaylists : []).map((item) => (
<View
style={{ borderRadius: 12, overflow: "hidden" }}
key={item?.id}
>
<BlurView
intensity={20}
style={{
@@ -44,7 +57,7 @@ const AllMyPlaylist = () => {
fontFamily: FONT_FAMILY.InterRegular,
}}
>
{item}
{item?.name || "Sans nom"}
</Text>
<Pressable>
<Image
+23
View File
@@ -0,0 +1,23 @@
import { playlistsRef } from "../../../config/firebase";
export const createPlaylist = async (payload = {}) => {
try {
const createdBy = payload?.createdBy;
const name = payload?.name?.trim?.();
const musics = Array.isArray(payload?.musics) ? payload.musics : [];
const doc = {
createdBy,
name,
musics,
createdAt: new Date(),
updatedAt: new Date(),
};
const docRef = await playlistsRef.add(doc);
return docRef.id;
} catch (error) {
console.error("Error creating playlist:", error);
throw error;
}
};
+19 -11
View File
@@ -1,21 +1,29 @@
import { BlurView } from "expo-blur";
import React, { useEffect, useState } from "react";
import {
View,
Text,
Image,
Platform,
Pressable,
StyleSheet,
Platform,
Text,
View,
} from "react-native";
import React, { useEffect, useState } from "react";
import { Palette, Style } from "../../../styles";
import { icons, img } from "../../../assets";
import { size } from "../../../styles/Style";
import { BlurView } from "expo-blur";
import { FONT_FAMILY } from "../../../styles/Fonts";
import { useGlobal } from "reactn";
import { projectsRef, arrayUnion, arrayRemove } from "../../../config/firebase";
import { icons, img } from "../../../assets";
import { arrayRemove, arrayUnion, projectsRef } from "../../../config/firebase";
import { Palette, Style } from "../../../styles";
import { FONT_FAMILY } from "../../../styles/Fonts";
import { size } from "../../../styles/Style";
const MusicCard = ({ onPress, onPressMore, title = "Sans titre", subtitle = "MusicLand", imageUri = null, projectId = null, likedBy = [] }) => {
const MusicCard = ({
onPress,
onPressMore,
title = "Sans titre",
subtitle = "MusicLand",
imageUri = null,
projectId = null,
likedBy = [],
}) => {
const [currentUID] = useGlobal("currentUID");
const [selected, setSelected] = useState(false);
const [open, setOpen] = useState(false);
+6 -8
View File
@@ -1,17 +1,14 @@
import { View } from "react-native";
import React from "react";
import { View } from "react-native";
import { Routes } from "../../../navigation";
import { navigate } from "../../../navigation/NavigationService";
import { useUser } from "../../../providers/UserDataProvider";
import CardContainer from "./CardContainer";
import MusicCard from "./MusicCard";
import { navigate } from "../../../navigation/NavigationService";
import { Routes } from "../../../navigation";
import { useUser } from "../../../providers/UserDataProvider";
const MyMusic = () => {
const { userProjects = [] } = useUser();
const projects = Array.isArray(userProjects)
? userProjects.slice(0, 3)
: [];
const projects = Array.isArray(userProjects) ? userProjects.slice(0, 3) : [];
return (
<CardContainer
label="Mes musiques"
@@ -28,6 +25,7 @@ const MyMusic = () => {
projectId={p?.id}
likedBy={p?.likedBy || []}
onPress={() => navigate(Routes.MusicDetails, { projectId: p.id })}
onPressMore={() => console.log("More options for", p.id)}
/>
))}
</View>
+8 -3
View File
@@ -8,16 +8,21 @@ import { Palette } from "../../../styles";
import { FONT_FAMILY } from "../../../styles/Fonts";
import { navigate } from "../../../navigation/NavigationService";
import { Routes } from "../../../navigation";
import { useUser } from "../../../providers/UserDataProvider";
const MyPlaylist = () => {
const { userPlaylists = [] } = useUser();
const playlists = Array.isArray(userPlaylists)
? userPlaylists.slice(0, 2)
: [];
return (
<CardContainer
label="Mes Playlists"
onPress={() => navigate(Routes.AllMyPlaylist)}
>
<View style={{ gap: 8 }}>
{["Musiques de lover", "Musiques triste"].map((item, index) => (
<View style={{ borderRadius: 12, overflow: "hidden" }} key={index}>
{playlists.map((item) => (
<View style={{ borderRadius: 12, overflow: "hidden" }} key={item.id}>
<BlurView
intensity={20}
style={{
@@ -36,7 +41,7 @@ const MyPlaylist = () => {
fontFamily: FONT_FAMILY.InterRegular,
}}
>
{item}
{item?.name || "Sans nom"}
</Text>
<Pressable>
<Image