diff --git a/src/utils/projectStages.js b/src/utils/projectStages.js index b03276f..e0a79c8 100644 --- a/src/utils/projectStages.js +++ b/src/utils/projectStages.js @@ -12,7 +12,8 @@ const getStageMetadata = (project) => { const lyricsCount = getLyricsCount(project); const hasLyrics = !!(project?.hasLyrics || lyricsCount > 0); const hasSongUrl = !!project?.songUrl; - const hasCover = !!project?.coverUrl; + const cover = project?.cover || {}; + const hasCoverUrl = !!project?.coverUrl; const hasPlaybackAsset = !!project?.playbackUrl; const hasPlayback = hasPlaybackAsset || hasSongUrl; const musicUrls = Array.isArray(project?.musicUrls) @@ -30,7 +31,7 @@ const getStageMetadata = (project) => { lyricsCount, hasLyrics, hasSongUrl, - hasCover, + hasCover: hasCoverUrl, hasPlayback, hasPlaybackAsset, hasMusicDraft: musicUrls.length > 0, @@ -44,15 +45,13 @@ const getStageMetadata = (project) => { }; const getStageLockState = (key, metadata) => { - const { hasSongUrl, hasCover, hasPlayback, lyricsCount } = metadata; - switch (key) { case "songwriter": - return hasSongUrl; + return metadata.hasSongUrl; case "beatmaker": - return !(lyricsCount > 0 && !hasSongUrl); + return metadata.lyricsCount <= 0; case "director": - return !hasCover; + return !metadata.hasCover; default: return true; } @@ -85,7 +84,13 @@ const getStageDescription = (key, metadata) => { if (isMusicGenerating) { return "Votre morceau est en cours de création"; } - if (hasSongUrl || hasMusicDraft) { + if (hasSongUrl) { + if (!hasCover) { + return "Créer ou modifier la cover de votre morceau"; + } + return "Modifier la cover ou la production musicale"; + } + if (hasMusicDraft) { return "Modifier la production musicale"; } return "Commencer la création de votre morceau"; @@ -112,9 +117,9 @@ const getStageLockedDescription = (key, metadata) => { ? "Impossible de modifier les paroles" : undefined; case "beatmaker": - return metadata.hasSongUrl - ? "Impossible de modifier la production musicale" - : undefined; + return metadata.lyricsCount > 0 + ? undefined + : "Créez vos paroles pour débloquer le studio"; case "director": return metadata.hasPlaybackAsset ? "Impossible de modifier le playback" @@ -163,14 +168,48 @@ export const getStageAction = (key, project) => { route: getLyricsCount(project) > 0 ? Routes.Lyrics : Routes.WritingLyrics, }; - case "beatmaker": - if (project?.musicStatus === "GENERATING") { + case "beatmaker": { + if (!project) { + return { route: Routes.Compose }; + } + + const musicStatus = project?.musicStatus || null; + const songUrl = project?.songUrl || null; + const coverStatus = project?.coverStatus || null; + const cover = project?.cover || {}; + const hasCoverBackground = !!cover?.generatedBackground; + const hasCoverResult = !!cover?.result; + const hasFinalCover = !!project?.coverUrl; + + if (musicStatus === "GENERATING") { return { route: Routes.GeneratingSong }; } - if (project?.musicStatus === "GENERATED") { - return { route: Routes.SongReady }; + + if (!songUrl) { + if (musicStatus === "GENERATED") { + return { route: Routes.SongReady }; + } + return { route: Routes.Compose }; } - return { route: Routes.Compose }; + + if (coverStatus === "GENERATING") { + return { route: Routes.PouchReady }; + } + + if (!hasCoverBackground) { + return { route: Routes.ChooseCoverType }; + } + + if (!hasCoverResult) { + return { route: Routes.PouchReady }; + } + + if (!hasFinalCover) { + return { route: Routes.PhotoCover }; + } + + return { route: Routes.ChooseCoverType }; + } case "director": return { route: Routes.Playback,