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: 'Theo', desc: "Theo t'accompagne pour créer ton playback.", 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