import FontAwesome from "@expo/vector-icons/FontAwesome"; import { BlurView } from "expo-blur"; import React, { useMemo } from "react"; import { Image, Platform, Pressable, Text, View } from "react-native"; import { ai, background } from "../assets"; import Page from "../layouts/Page"; import { Routes } from "../navigation"; import { navigate } from "../navigation/NavigationService"; import { useUserData } from "../providers/UserDataProvider"; import { Palette } from "../styles"; import { FONT_FAMILY } from "../styles/Fonts"; import palette from "../styles/Palette"; const CREATE_DATA = [ { img: ai.nathalie, bg: background.writingBG, label: "Nathalie", desc: "Let’s write lyrics together !", type: "Songwriter", }, { img: ai.theo, bg: background.studioBG, label: "Theo", desc: "Come back, when\nyou’ll have lyrics!", type: "Beatmaker", }, { img: ai.bena, bg: background.productionBG, label: "Bena", desc: "Come back when you want\nto generate cover!", type: "Designer", }, { img: ai.john, bg: background.playbackBG, label: "John", desc: "Come back when your\naudio is ready!", type: "Director", }, ]; const NewMusicOptions = ({ route }) => { const { userProjects } = useUserData(); const { projectId = null } = route?.params || {}; const currentProjet = useMemo(() => { if (!projectId) { return null; } return userProjects?.find((p) => p.id === projectId) || null; }, [projectId, userProjects]); const hasProject = !!currentProjet; const hasLyrics = Array.isArray(currentProjet?.lyrics) ? currentProjet.lyrics.length > 0 : !!currentProjet?.lyrics; const hasCover = !!currentProjet?.coverUrl; console.log("current projet cover", currentProjet?.coverUrl); const isLocked = (index) => { // 0: Songwriter, 1: Beatmaker, 2: Producer, 3: Director // Rules: // - If no project: only Songwriter (0) is available. // - If project exists: Songwriter (0) is always available. // - If lyrics exist: Beatmaker (1) becomes available. // - If cover exists: Producer (2) and Director (3) become available. if (!hasProject) return index !== 0; const allowed = new Set([0]); // songwriter always allowed when project exists if (hasLyrics) { allowed.add(1); } if (hasCover) { allowed.add(2); allowed.add(3); } return !allowed.has(index); }; const onPressOption = (index, item) => { if (isLocked(index)) return; switch (index) { case 0: navigate(Routes.WritingLyrics, { projectId: currentProjet?.id || null, }); break; case 1: if (currentProjet?.musicStatus === "GENERATING") { navigate(Routes.GeneratingSong, { projectId: currentProjet.id }); } else if (currentProjet?.musicStatus === "GENERATED") { navigate(Routes.SongReady, { projectId: currentProjet.id }); } else { navigate(Routes.Compose, { projectId: currentProjet.id }); } break; case 2: navigate(Routes.PouchReady, { projectId: currentProjet.id }); break; case 3: console.log("test"); navigate(Routes.Playback, { project: currentProjet, }); default: break; } }; return ( {CREATE_DATA.map((item, index) => { const locked = isLocked(index); return ( onPressOption(index, item)}> {item.label}, {item.type} {item.desc} {locked && ( )} ); })} ); }; export default NewMusicOptions;