cover flow

This commit is contained in:
2025-10-20 11:47:58 +02:00
parent 3a57e4c437
commit f49a0346a0
+53 -14
View File
@@ -12,7 +12,8 @@ const getStageMetadata = (project) => {
const lyricsCount = getLyricsCount(project); const lyricsCount = getLyricsCount(project);
const hasLyrics = !!(project?.hasLyrics || lyricsCount > 0); const hasLyrics = !!(project?.hasLyrics || lyricsCount > 0);
const hasSongUrl = !!project?.songUrl; const hasSongUrl = !!project?.songUrl;
const hasCover = !!project?.coverUrl; const cover = project?.cover || {};
const hasCoverUrl = !!project?.coverUrl;
const hasPlaybackAsset = !!project?.playbackUrl; const hasPlaybackAsset = !!project?.playbackUrl;
const hasPlayback = hasPlaybackAsset || hasSongUrl; const hasPlayback = hasPlaybackAsset || hasSongUrl;
const musicUrls = Array.isArray(project?.musicUrls) const musicUrls = Array.isArray(project?.musicUrls)
@@ -30,7 +31,7 @@ const getStageMetadata = (project) => {
lyricsCount, lyricsCount,
hasLyrics, hasLyrics,
hasSongUrl, hasSongUrl,
hasCover, hasCover: hasCoverUrl,
hasPlayback, hasPlayback,
hasPlaybackAsset, hasPlaybackAsset,
hasMusicDraft: musicUrls.length > 0, hasMusicDraft: musicUrls.length > 0,
@@ -44,15 +45,13 @@ const getStageMetadata = (project) => {
}; };
const getStageLockState = (key, metadata) => { const getStageLockState = (key, metadata) => {
const { hasSongUrl, hasCover, hasPlayback, lyricsCount } = metadata;
switch (key) { switch (key) {
case "songwriter": case "songwriter":
return hasSongUrl; return metadata.hasSongUrl;
case "beatmaker": case "beatmaker":
return !(lyricsCount > 0 && !hasSongUrl); return metadata.lyricsCount <= 0;
case "director": case "director":
return !hasCover; return !metadata.hasCover;
default: default:
return true; return true;
} }
@@ -85,7 +84,13 @@ const getStageDescription = (key, metadata) => {
if (isMusicGenerating) { if (isMusicGenerating) {
return "Votre morceau est en cours de création"; 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 "Modifier la production musicale";
} }
return "Commencer la création de votre morceau"; return "Commencer la création de votre morceau";
@@ -112,9 +117,9 @@ const getStageLockedDescription = (key, metadata) => {
? "Impossible de modifier les paroles" ? "Impossible de modifier les paroles"
: undefined; : undefined;
case "beatmaker": case "beatmaker":
return metadata.hasSongUrl return metadata.lyricsCount > 0
? "Impossible de modifier la production musicale" ? undefined
: undefined; : "Créez vos paroles pour débloquer le studio";
case "director": case "director":
return metadata.hasPlaybackAsset return metadata.hasPlaybackAsset
? "Impossible de modifier le playback" ? "Impossible de modifier le playback"
@@ -163,14 +168,48 @@ export const getStageAction = (key, project) => {
route: route:
getLyricsCount(project) > 0 ? Routes.Lyrics : Routes.WritingLyrics, getLyricsCount(project) > 0 ? Routes.Lyrics : Routes.WritingLyrics,
}; };
case "beatmaker": case "beatmaker": {
if (project?.musicStatus === "GENERATING") { 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 }; return { route: Routes.GeneratingSong };
} }
if (project?.musicStatus === "GENERATED") {
if (!songUrl) {
if (musicStatus === "GENERATED") {
return { route: Routes.SongReady }; 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": case "director":
return { return {
route: Routes.Playback, route: Routes.Playback,