import FontAwesome from "@expo/vector-icons/FontAwesome"; import { BlurView } from "expo-blur"; import React, { useCallback, useMemo } from "react"; import { Image, Platform, Pressable, Text, View } from "react-native"; import { ai, background } from "../assets"; import Page from "../layouts/Page"; import { navigate } from "../navigation/NavigationService"; import { useUserData } from "../providers/UserDataProvider"; import { getCreationStageStates, getStageAction } from "../utils/projectStages"; import { Palette } from "../styles"; import { FONT_FAMILY } from "../styles/Fonts"; import palette from "../styles/Palette"; const CREATE_DATA = [ { stageKey: "songwriter", img: ai.nathalie, bg: background.writingBG, label: "Nathalie", desc: "Let’s write lyrics together !", type: "Songwriter", }, { stageKey: "beatmaker", img: ai.theo, bg: background.studioBG, label: "Theo", desc: "Come back, when\nyou’ll have lyrics!", type: "Beatmaker", }, { stageKey: "director", img: ai.john, bg: background.playbackBG, label: "John", desc: "Come back when your\naudio is ready!", type: "Director", }, ]; const NewMusicOptions = () => { const { selectedProject } = useUserData(); const stageStates = useMemo( () => getCreationStageStates(selectedProject), [selectedProject], ); const stageStateByKey = useMemo(() => { return stageStates.reduce((acc, stage) => { acc[stage.key] = stage; return acc; }, {}); }, [stageStates]); const onPressOption = useCallback( (stageKey) => { const stageState = stageStateByKey[stageKey]; if (!stageState || stageState.isLocked) { return; } const action = getStageAction(stageKey, selectedProject); if (!action?.route) { return; } navigate(action.route, action.params); }, [stageStateByKey, selectedProject], ); return ( {CREATE_DATA.map((item) => { const locked = stageStateByKey[item.stageKey]?.isLocked ?? true; return ( onPressOption(item.stageKey)} > {item.label}, {item.type} {item.desc} {locked && ( )} ); })} ); }; export default NewMusicOptions;