diff --git a/src/screens/Studio/ComposeSong.js b/src/screens/Studio/ComposeSong.js index 380a08a..34d0350 100644 --- a/src/screens/Studio/ComposeSong.js +++ b/src/screens/Studio/ComposeSong.js @@ -16,7 +16,7 @@ import { useUser } from '../../providers/UserDataProvider' import { gutters, Palette } from '../../styles' import { FONT_FAMILY } from '../../styles/Fonts' import { normalizeStructureType } from '../../utils/songStructure' -import { openCoinPackModal } from '../../utils/coinPackModal' +import { showInsufficientCreditsAlert } from '../../utils/insufficientCredits' import ChooseGenre from './ChooseGenre' import ChooseInstruments from './ChooseInstruments' import ChooseRhythm from './ChooseRhythm' @@ -179,9 +179,11 @@ const ComposeSong = () => { typeof error?.message === 'string' ? error.message.replace(/^functions\.https\.HttpsError:\s*/iu, '') : null - throw new Error( + const orderError = new Error( message || 'Une erreur est survenue lors de la création de la commande de crédits.' ) + orderError.code = error?.code + throw orderError } } @@ -192,11 +194,7 @@ const ComposeSong = () => { const availableCoins = Number.isFinite(coinBalance) ? coinBalance : 0 if (availableCoins < MUSIC_GENERATION_COIN_COST) { setIsConfirmVisible(false) - AppAlert( - 'Crédits insuffisants', - "Tu n'as pas assez de pièces pour générer une musique. Recharge ton compte pour continuer." - ) - openCoinPackModal() + showInsufficientCreditsAlert(MUSIC_GENERATION_COIN_COST) return } @@ -206,6 +204,10 @@ const ComposeSong = () => { navigate(Routes.GeneratingSong, { config: musicConfig }) } catch (error) { setIsConfirmVisible(false) + if (error?.code === 'functions/failed-precondition') { + showInsufficientCreditsAlert(MUSIC_GENERATION_COIN_COST) + return + } const message = error?.message || 'Une erreur est survenue lors du lancement de la génération.' AppAlert('Impossible de lancer la génération', message) diff --git a/src/screens/Studio/ComposeSong.web.js b/src/screens/Studio/ComposeSong.web.js index 13bfe98..535023d 100644 --- a/src/screens/Studio/ComposeSong.web.js +++ b/src/screens/Studio/ComposeSong.web.js @@ -16,7 +16,7 @@ import { useUser } from '../../providers/UserDataProvider' import { gutters, Palette } from '../../styles' import { FONT_FAMILY } from '../../styles/Fonts' import { normalizeStructureType } from '../../utils/songStructure' -import { openCoinPackModal } from '../../utils/coinPackModal' +import { showInsufficientCreditsAlert } from '../../utils/insufficientCredits' import ChooseGenre from './ChooseGenre' import ChooseInstruments from './ChooseInstruments' import ChooseRhythm from './ChooseRhythm' @@ -238,9 +238,11 @@ const ComposeSong = () => { typeof error?.message === 'string' ? error.message.replace(/^functions\.https\.HttpsError:\s*/iu, '') : null - throw new Error( + const orderError = new Error( message || 'Une erreur est survenue lors de la création de la commande de crédits.' ) + orderError.code = error?.code + throw orderError } }, [currentUID, selectedProjectId]) @@ -251,11 +253,7 @@ const ComposeSong = () => { const availableCoins = Number.isFinite(coinBalance) ? coinBalance : 0 if (availableCoins < MUSIC_GENERATION_COIN_COST) { setIsConfirmVisible(false) - AppAlert( - 'Crédits insuffisants', - "Tu n'as pas assez de pièces pour générer une musique. Recharge ton compte pour continuer." - ) - openCoinPackModal() + showInsufficientCreditsAlert(MUSIC_GENERATION_COIN_COST) return } @@ -265,6 +263,10 @@ const ComposeSong = () => { navigate(Routes.GeneratingSong, { config: musicConfig }) } catch (error) { setIsConfirmVisible(false) + if (error?.code === 'functions/failed-precondition') { + showInsufficientCreditsAlert(MUSIC_GENERATION_COIN_COST) + return + } const message = error?.message || 'Une erreur est survenue lors du lancement de la génération.' AppAlert('Impossible de lancer la génération', message) diff --git a/src/utils/insufficientCredits.js b/src/utils/insufficientCredits.js new file mode 100644 index 0000000..148d59f --- /dev/null +++ b/src/utils/insufficientCredits.js @@ -0,0 +1,13 @@ +import AppAlert from '../components/Alert' +import { openCoinPackModal } from './coinPackModal' + +export const showInsufficientCreditsAlert = (requiredCredits) => { + AppAlert( + 'Crédits insuffisants', + `Cette création nécessite ${requiredCredits} crédits. Achète des crédits pour continuer.`, + [ + { text: 'Plus tard', style: 'cancel' }, + { text: 'Acheter des crédits', onPress: openCoinPackModal }, + ] + ) +}