import { BlurView } from "expo-blur"; import { Image as ExpoImage } from "expo-image"; import React, { useState } from "react"; import { FlatList, Image, Platform, Pressable, ScrollView, StyleSheet, Text, View, } from "react-native"; import { SheetManager } from "react-native-actions-sheet"; import { responsiveHeight } from "react-native-responsive-dimensions"; import { useGlobal } from "reactn"; import { background, icons, img } from "../../assets"; import BorderGradient from "../../components/BorderGradient/BorderGradient"; import MoreMenu from "../../components/MoreMenu"; import { projectsRef } from "../../config/firebase"; import Page from "../../layouts/Page"; import { Routes } from "../../navigation"; import { navigate, push } from "../../navigation/NavigationService"; import { useUser } from "../../providers/UserDataProvider"; import { Palette } from "../../styles"; import { FONT_FAMILY } from "../../styles/Fonts"; import Style, { gutters, size } from "../../styles/Style"; import MusicCard from "../Library/components/MusicCard"; const Profile = () => { const [selected, setSelected] = useState("Chansons"); const { userProjects, userPlaybacks, followingCount, currentUserData } = useUser(); const [, setTooltip] = useGlobal("_tooltip"); const [menuTop, setMenuTop] = useState(0); const [showMenu, setShowMenu] = useState(false); const [selectedProjectId, setSelectedProjectId] = useState(null); const onPressMenu = (item) => { setSelected(item); }; // Composant factorisé pour afficher la liste de musiques const MusicListSection = ({ data, emptyText }) => ( {Array.isArray(data) && data.length > 0 ? ( item.id} renderItem={({ item }) => ( navigate(Routes.MusicDetails, { projectId: item.id }) } onPressMore={(posTop) => { setSelectedProjectId(item.id); setMenuTop(posTop); setShowMenu((prev) => !prev || posTop !== menuTop); }} /> )} /> ) : ( )} setShowMenu(false)} inPlaylist={false} projectId={selectedProjectId} extraItems={[ { label: "Supprimer", onPress: () => SheetManager.show("Delete", { payload: { title: "Supprimer le projet", message: "Cette action supprimera définitivement ce projet.", onConfirm: async () => { try { if (!selectedProjectId) return; await projectsRef.doc(selectedProjectId).delete(); setTooltip({ type: "success", text: "Projet supprimé", }); } catch (e) { setTooltip({ type: "error", text: e?.message || "Suppression impossible", }); } }, }, }), }, ]} /> ); const EmptyText = ({ text }) => ( {text} ); return ( ( SheetManager.show("ProfileSettings")}> )} > {currentUserData?.userName} {userProjects?.length || 0} projets push(Routes.Follows, { selected: "Abonnés" })} > {currentUserData?.followedBy?.length || 0} abonnés push(Routes.Follows, { selected: "Abonnements" }) } > {followingCount} abonnements {["Chansons", "Playbacks", "Clips"].map((item, index) => ( onPressMenu(item)} style={{ flex: 1 }} > {item} ))} {selected === "Playbacks" && ( )} {selected === "Chansons" && ( )} {selected === "Clips" && ( )} ); }; export default Profile; const styles = StyleSheet.create({ value: { fontSize: 16, color: Palette.white, fontFamily: FONT_FAMILY.InterRegular, }, label: { fontSize: 12, color: Palette.white, fontFamily: FONT_FAMILY.InterRegular, }, menu: { fontSize: 12, color: Palette.white, fontFamily: FONT_FAMILY.InterRegular, }, borderGradient: { borderWidth: 1, borderRadius: 10, height: 33, position: "absolute", zIndex: 1, width: "100%", }, blurContainer: { height: 33, zIndex: -1, borderRadius: 10, overflow: "hidden", backgroundColor: Palette.glass, }, blurView: { width: "100%", height: "100%", paddingHorizontal: 10, ...Style.containerCenter, }, });