Files
musicland/src/navigation/MainStack.js
T
2025-11-04 10:20:37 +01:00

372 lines
9.3 KiB
JavaScript

import { createStackNavigator } from "@react-navigation/stack";
import React from "react";
import { Platform } from "react-native";
import CreatePassword from "../screens/CreatePassword";
import CreatePseudo from "../screens/CreatePseudo";
import ForgotPassword from "../screens/ForgotPassword";
import LandingPage from "../screens/LandingPage";
import AllMyList from "../screens/Library/AllMyList";
import AllMyPlaylist from "../screens/Library/AllMyPlaylist";
import MusicDetails from "../screens/Library/MusicDetails";
import PlaylistDetails from "../screens/Library/PlaylistDetails";
import Research from "../screens/Library/Research";
import Login from "../screens/Login";
import NewMusicOptions from "../screens/NewMusicOptions";
import Onboarding from "../screens/Onboarding";
import ChooseDecor from "../screens/Playback/ChooseDecor";
import CreatingDecor from "../screens/Playback/CreatingDecor";
import Playback from "../screens/Playback/Playback";
import PlaybackOnboarding from "../screens/Playback/PlaybackOnboarding";
import RecordPlayback from "../screens/Playback/RecordPlayback";
import RecordedPlayback from "../screens/Playback/RecordedPlayback";
import VideoFinalize from "../screens/Playback/VideoFinalize";
import PublishYoutube from "../screens/Publishing/PublishYoutube";
import PrivacyPolicy from "../screens/PrivacyPolicy";
import DownloadPrices from "../screens/Production/DownloadPrices";
import DownloadSongs from "../screens/Production/DownloadSongs";
import PlaybackExample from "../screens/Production/PlaybackExample";
import Production from "../screens/Production/Production";
import ProductionOnboarding from "../screens/Production/ProductionOnboarding";
import SongDownloaded from "../screens/Production/SongDownloaded";
import SongRelease from "../screens/Production/SongRelease";
import StreamSong from "../screens/Production/StreamSong";
import ChangeEmailAddress from "../screens/Profile/ChangeEmailAddress";
import ChangePassword from "../screens/Profile/ChangePassword";
import EditProfile from "../screens/Profile/EditProfile";
import Follows from "../screens/Profile/Follows";
import Language from "../screens/Profile/Language";
import Notifications from "../screens/Profile/Notifications";
import Profile from "../screens/Profile/Profile";
import Reels from "../screens/Profile/Reels";
import Settings from "../screens/Profile/Settings";
import Register from "../screens/Register";
import Splash from "../screens/Splash";
import Compose from "../screens/Studio/Compose";
import ComposeSong from "../screens/Studio/ComposeSong";
import CustomizeVoice from "../screens/Studio/CustomizeVoice";
import GeneratingSong from "../screens/Studio/GeneratingSong";
import Regenerate from "../screens/Studio/Regenerate";
import SongReady from "../screens/Studio/SongReady";
import Studio from "../screens/Studio/Studio";
import TermsOfUse from "../screens/TermsOfUse";
import CreateLyricsWithAi from "../screens/Writing/CreateLyricsWithAi";
import FinishedWriting from "../screens/Writing/FinishedWriting";
import Lyrics from "../screens/Writing/Lyrics";
import Writing from "../screens/Writing/Writing";
import WritingLyrics from "../screens/Writing/WritingLyrics";
import { ChooseCoverType } from "../screens/cover/ChooseCoverType";
import PhotoCover from "../screens/cover/PhotoCover";
import PouchReady from "../screens/cover/PouchReady";
import ValidateCover from "../screens/cover/ValidateCover";
import { Palette } from "../styles";
import { BottomTabScreen } from "./BottomTab";
import { Routes } from "./Routes";
const isWeb = Platform.OS === "web";
const screenOptions = {
headerShown: false,
cardOverlayEnabled: true,
headerStyle: {
backgroundColor: Palette.background,
},
headerTitleStyle: {},
headerTitleAlign: "center",
headerBackTitleVisible: false,
...(isWeb
? {
// Avoid web-specific pointerEvents issues by disabling animations/gestures
animationEnabled: false,
gestureEnabled: false,
}
: {}),
};
const MainStack = createStackNavigator();
const baseScreens = [
{ name: Routes.Splash, component: Splash },
{ name: Routes.Onboarding, component: Onboarding },
{ name: Routes.Login, component: Login, title: "Connexion" },
{ name: Routes.LandingPage, component: LandingPage },
{
name: Routes.ForgotPassword,
component: ForgotPassword,
title: "Mot de passe oublié",
},
{
name: Routes.BottomTab,
component: BottomTabScreen,
options: { animationEnabled: false },
},
{
name: Routes.TermsOfUse,
component: TermsOfUse,
title: "Conditions d'utilisation",
},
{
name: Routes.PrivacyPolicy,
component: PrivacyPolicy,
title: "Politique de confidentialité",
},
{
name: Routes.Writing,
component: Writing,
},
{
name: Routes.WritingLyrics,
component: WritingLyrics,
},
{
name: Routes.CreateLyricsWithAi,
component: CreateLyricsWithAi,
},
{
name: Routes.Lyrics,
component: Lyrics,
},
{
name: Routes.FinishedWriting,
component: FinishedWriting,
},
{
name: Routes.Studio,
component: Studio,
},
{
name: Routes.ComposeSong,
component: ComposeSong,
},
{
name: Routes.Compose,
component: Compose,
},
{
name: Routes.CustomizeVoice,
component: CustomizeVoice,
},
{
name: Routes.SongReady,
component: SongReady,
},
{
name: Routes.Regenerate,
component: Regenerate,
},
{
name: Routes.PouchReady,
component: PouchReady,
},
{
name: Routes.PhotoCover,
component: PhotoCover,
},
{
name: Routes.ValidateCover,
component: ValidateCover,
},
{
name: Routes.ProductionOnboarding,
component: ProductionOnboarding,
},
{
name: Routes.Production,
component: Production,
},
{
name: Routes.DownloadSongs,
component: DownloadSongs,
},
{
name: Routes.DownloadPrices,
component: DownloadPrices,
},
{
name: Routes.SongDownloaded,
component: SongDownloaded,
},
{
name: Routes.StreamSong,
component: StreamSong,
},
{
name: Routes.GeneratingSong,
component: GeneratingSong,
},
{
name: Routes.SongRelease,
component: SongRelease,
},
{
name: Routes.PlaybackExample,
component: PlaybackExample,
},
{
name: Routes.PlaybackOnboarding,
component: PlaybackOnboarding,
},
{
name: Routes.Playback,
component: Playback,
},
{
name: Routes.RecordPlayback,
component: RecordPlayback,
},
{
name: Routes.RecordedPlayback,
component: RecordedPlayback,
},
{
name: Routes.ChooseDecor,
component: ChooseDecor,
},
{
name: Routes.CreatingDecor,
component: CreatingDecor,
},
{
name: Routes.VideoFinalize,
component: VideoFinalize,
},
{
name: Routes.PublishYoutube,
component: PublishYoutube,
},
{
name: Routes.AllMyPlaylist,
component: AllMyPlaylist,
},
{
name: Routes.PlaylistDetails,
component: PlaylistDetails,
},
{
name: Routes.AllMyList,
component: AllMyList,
},
{
name: Routes.Research,
component: Research,
},
{
name: Routes.MusicDetails,
component: MusicDetails,
},
{
name: Routes.SingerProfile,
component: Profile,
},
{
name: Routes.EditProfile,
component: EditProfile,
},
{
name: Routes.Settings,
component: Settings,
},
{
name: Routes.Follows,
component: Follows,
},
{
name: Routes.FlowSelection,
component: NewMusicOptions,
},
{
name: Routes.ChangeEmailAddress,
component: ChangeEmailAddress,
},
{
name: Routes.ChangePassword,
component: ChangePassword,
},
{
name: Routes.Notifications,
component: Notifications,
},
{
name: Routes.Language,
component: Language,
},
{
name: Routes.Reels,
component: Reels,
},
{
name: Routes.Register,
component: Register,
},
{
name: Routes.CreatePassword,
component: CreatePassword,
},
{
name: Routes.CreatePseudo,
component: CreatePseudo,
},
{
name: Routes.ChooseCoverType,
component: ChooseCoverType,
},
];
const transparentSettingsRoutes = new Set([
Routes.ChangeEmailAddress,
Routes.ChangePassword,
Routes.Notifications,
Routes.Language,
]);
const screens = baseScreens.map((screen) => {
if (!transparentSettingsRoutes.has(screen.name)) {
return screen;
}
const existingOptions = screen.options || {};
return {
...screen,
options: {
...existingOptions,
animationEnabled: false,
presentation: "transparentModal",
cardOverlayEnabled: true,
contentStyle: {
...(existingOptions.contentStyle || {}),
backgroundColor: "transparent",
},
cardStyle: {
...(existingOptions.cardStyle || {}),
backgroundColor: "transparent",
},
},
};
});
export default function Main() {
return (
<MainStack.Navigator
initialRouteName={Routes.Splash}
screenOptions={{
...screenOptions,
contentStyle: {
backgroundColor: Palette.black,
},
cardStyle: {
backgroundColor: Palette.black,
},
}}
>
{screens.map((screen) => (
<MainStack.Screen
key={screen.name}
name={screen.name}
component={screen.component}
title={screen.title}
options={{ headerShown: false, ...screen.options }}
/>
))}
</MainStack.Navigator>
);
}