Files
jellyfin-audio-player/src/screens/index.tsx

107 lines
4.5 KiB
TypeScript
Raw Normal View History

2020-06-16 17:51:51 +02:00
import React from 'react';
2022-02-11 17:44:04 +02:00
import { createBottomTabNavigator, BottomTabNavigationProp } from '@react-navigation/bottom-tabs';
2022-05-04 19:12:01 +02:00
import { StackNavigationProp } from '@react-navigation/stack';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
2020-07-07 13:21:03 +02:00
import { CompositeNavigationProp } from '@react-navigation/native';
2022-01-02 02:28:52 +01:00
import { THEME_COLOR } from 'CONSTANTS';
import SearchStack from './Search';
2020-06-21 13:02:23 +02:00
import Music from './Music';
2020-06-16 23:11:05 +02:00
import Settings from './Settings';
2022-01-02 02:28:52 +01:00
import Downloads from './Downloads';
import Onboarding from './Onboarding';
import TrackPopupMenu from './modals/TrackPopupMenu';
import SetJellyfinServer from './modals/SetJellyfinServer';
2022-02-11 17:44:04 +02:00
import SearchIcon from 'assets/icons/magnifying-glass.svg';
import NotesIcon from 'assets/icons/notes.svg';
import GearIcon from 'assets/icons/gear.svg';
import DownloadsIcon from 'assets/icons/arrow-down-to-line.svg';
2020-08-09 17:49:36 +02:00
import { useTypedSelector } from 'store';
2020-11-02 22:50:00 +01:00
import { t } from '@localisation';
import ErrorReportingAlert from 'utility/ErrorReportingAlert';
import ErrorReportingPopup from './modals/ErrorReportingPopup';
2022-05-04 19:12:01 +02:00
import Player from './modals/Player';
2023-04-22 21:58:27 +02:00
import { StyleSheet } from 'react-native';
import { ColoredBlurView } from 'components/Colors';
import { StackParams } from './types';
2020-06-16 17:51:51 +02:00
const Stack = createNativeStackNavigator<StackParams>();
2020-06-16 17:51:51 +02:00
const Tab = createBottomTabNavigator();
2020-06-17 14:58:04 +02:00
type Screens = {
2020-06-21 13:02:23 +02:00
Music: undefined;
2020-06-17 14:58:04 +02:00
Settings: undefined;
}
function Screens() {
2020-08-09 17:49:36 +02:00
const isOnboardingComplete = useTypedSelector(state => state.settings.isOnboardingComplete);
// GUARD: If onboarding has not been completed, we instead render the
// onboarding component, so that the user can get setup in the app.
if (!isOnboardingComplete) {
return <Onboarding />;
}
2020-06-16 17:51:51 +02:00
return (
<>
<ErrorReportingAlert />
<Tab.Navigator
screenOptions={({ route }) => ({
tabBarIcon: function TabBarIcon({ color, size }) {
switch (route.name) {
case 'SearchTab':
return <SearchIcon fill={color} height={size - 4} width={size - 4} />;
case 'MusicTab':
return <NotesIcon fill={color} height={size} width={size} />;
case 'Settings':
return <GearIcon fill={color} height={size - 1} width={size - 1} />;
case 'Downloads':
return <DownloadsIcon fill={color} height={size - 6} width={size - 6} />;
default:
return null;
}
},
tabBarActiveTintColor: THEME_COLOR,
tabBarInactiveTintColor: 'gray',
headerShown: false,
2023-04-22 21:58:27 +02:00
tabBarShowLabel: false,
tabBarStyle: { position: 'absolute' },
tabBarBackground: () => (
<ColoredBlurView style={StyleSheet.absoluteFill} />
)
})}
>
<Tab.Screen name="MusicTab" component={Music} options={{ tabBarLabel: t('music'), tabBarTestID: 'music-tab' }} />
<Tab.Screen name="SearchTab" component={SearchStack} options={{ tabBarLabel: t('search'), tabBarTestID: 'search-tab' }} />
2022-06-15 11:45:38 +02:00
<Tab.Screen name="Downloads" component={Downloads} options={{ tabBarLabel: t('downloads'), tabBarTestID: 'downloads-tab'}} />
<Tab.Screen name="Settings" component={Settings} options={{ tabBarLabel: t('settings'), tabBarTestID: 'settings-tab' }} />
</Tab.Navigator>
</>
2020-06-16 17:51:51 +02:00
);
2020-06-17 14:58:04 +02:00
}
type Routes = {
Screens: undefined;
SetJellyfinServer: undefined;
}
export default function Routes() {
return (
<Stack.Navigator screenOptions={{
presentation: 'modal',
headerShown: false,
2022-05-04 19:12:01 +02:00
}} id="MAIN">
2020-06-17 14:58:04 +02:00
<Stack.Screen name="Screens" component={Screens} />
<Stack.Screen name="SetJellyfinServer" component={SetJellyfinServer} />
2022-05-04 19:12:01 +02:00
<Stack.Screen name="TrackPopupMenu" component={TrackPopupMenu} options={{ presentation: 'formSheet' }} />
<Stack.Screen name="ErrorReporting" component={ErrorReportingPopup} />
2022-05-04 19:12:01 +02:00
<Stack.Screen name="Player" component={Player} />
2020-06-17 14:58:04 +02:00
</Stack.Navigator>
);
}
export type NavigationProp = CompositeNavigationProp<
StackNavigationProp<Routes>,
BottomTabNavigationProp<Screens>
2020-06-17 14:58:04 +02:00
>;