feat: propose coins

This commit is contained in:
leon
2026-09-08 15:36:03 +02:00
parent 6594d2adf7
commit 071f7e9279
3 changed files with 31 additions and 14 deletions
+9 -7
View File
@@ -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)
+9 -7
View File
@@ -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)
+13
View File
@@ -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 },
]
)
}