import React, { useMemo, useState } from "react"; import { Pressable, ScrollView, Text, View } from "react-native"; import { responsiveHeight } from "react-native-responsive-dimensions"; import { background } from "../../assets"; import alert from "../../components/Alert"; import GradientButton from "../../components/GradientButton"; import Page from "../../layouts/Page"; import { Routes } from "../../navigation"; import { navigate } from "../../navigation/NavigationService"; import { useUser } from "../../providers/UserDataProvider"; import { gutters } from "../../styles"; const Studio = () => { const [selectedProjectId, setSelectedProjectId] = useState(null); const { userProjects: projects, selectProject } = useUser(); const selectedProject = useMemo(() => { if (!Array.isArray(projects) || !projects.length) return null; return projects.find((p) => p?.id === selectedProjectId) ?? null; }, [projects, selectedProjectId]); return ( {projects?.length > 0 && ( Derniers projets générés {projects.map((p) => { const couplet = p?.lyrics?.couplet || ""; const preview = couplet.split("\n").slice(0, 2).join(" "); const isSelected = selectedProjectId === p?.id; const createdAt = p?.createdAt?.toDate ? p.createdAt.toDate() : p?.createdAt ? new Date(p.createdAt) : null; const createdLabel = createdAt && !Number.isNaN(createdAt.getTime()) ? `${createdAt.toLocaleDateString("fr-FR")} • ${createdAt.toLocaleTimeString("fr-FR", { hour: "2-digit", minute: "2-digit" })}` : ""; return ( setSelectedProjectId(p?.id ?? null)} style={{ backgroundColor: isSelected ? "rgba(15, 12, 25, 0.75)" : "rgba(15, 12, 25, 0.2)", borderRadius: 12, padding: 12, borderWidth: isSelected ? 2 : 0, borderColor: isSelected ? "#F94697" : "transparent", shadowColor: "rgba(0, 0, 0, 0.55)", shadowOpacity: isSelected ? 0.6 : 0.35, shadowRadius: isSelected ? 8 : 4, shadowOffset: { width: 0, height: 4 }, elevation: isSelected ? 6 : 1, }} > {p?.title || "Sans titre"} {!!createdLabel && ( {createdLabel} )} {!!preview && ( {preview} )} {p?.config?.style && ( Style: {String(p.config.style)} )} ); })} )} { if (selectedProject?.musicStatus === "GENERATING") { alert( "Attention", "La chanson est en cours de génération. Veuillez patienter." ); } else { if (!selectedProject?.id) return; selectProject(selectedProject.id); navigate(Routes.Compose); } }} /> {selectedProject?.musicUrls?.length > 0 && ( <> { if (!selectedProject?.id) return; selectProject(selectedProject.id); navigate(Routes.SongReady); }} /> {!selectedProject?.coverUrl && ( { if (!selectedProject?.id) return; selectProject(selectedProject.id); navigate(Routes.PouchReady); }} /> )} )} ); }; export default Studio;