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

84 lines
2.5 KiB
TypeScript
Raw Normal View History

2020-06-16 17:51:51 +02:00
import React from 'react';
2020-06-17 14:58:04 +02:00
import { createBottomTabNavigator, BottomTabNavigationProp } from '@react-navigation/bottom-tabs';
2020-07-07 13:21:03 +02:00
import { createStackNavigator, StackNavigationProp } from '@react-navigation/stack';
import { CompositeNavigationProp } from '@react-navigation/native';
import SetJellyfinServer from './modals/SetJellyfinServer';
2020-06-16 17:51:51 +02:00
import Player from './Player';
2020-06-21 13:02:23 +02:00
import Music from './Music';
2020-06-16 23:11:05 +02:00
import Settings from './Settings';
2020-07-07 13:21:03 +02:00
import PlayPauseIcon from 'assets/play-pause-fill.svg';
import NotesIcon from 'assets/notes.svg';
import GearIcon from 'assets/gear.svg';
2020-07-10 15:25:32 +02:00
import { THEME_COLOR } from 'CONSTANTS';
2020-06-16 17:51:51 +02:00
2020-06-17 14:58:04 +02:00
const Stack = createStackNavigator();
2020-06-16 17:51:51 +02:00
const Tab = createBottomTabNavigator();
2020-06-17 14:58:04 +02:00
type Screens = {
NowPlaying: undefined;
2020-06-21 13:02:23 +02:00
Music: undefined;
2020-06-17 14:58:04 +02:00
Settings: undefined;
}
2020-07-07 13:21:03 +02:00
function getIcon(route: string): React.FC<any> | null {
switch(route) {
case 'NowPlaying':
return PlayPauseIcon;
case 'Music':
return NotesIcon;
case 'Settings':
return GearIcon;
default:
return null;
}
}
2020-06-17 14:58:04 +02:00
function Screens() {
2020-06-16 17:51:51 +02:00
return (
2020-07-07 13:21:03 +02:00
<Tab.Navigator
screenOptions={({ route }) => ({
tabBarIcon: function TabBarIcon({ color, size }) {
2020-07-07 13:21:03 +02:00
const Icon = getIcon(route.name);
if (!Icon) {
return null;
}
return <Icon fill={color} width={size} height={size} />;
}
})}
tabBarOptions={{
2020-07-10 15:25:32 +02:00
activeTintColor: THEME_COLOR,
2020-07-07 13:21:03 +02:00
inactiveTintColor: 'gray',
}}
>
2020-06-21 13:02:23 +02:00
<Tab.Screen name="NowPlaying" component={Player} options={{ tabBarLabel: 'Now Playing' }} />
<Tab.Screen name="Music" component={Music} />
2020-06-16 23:11:05 +02:00
<Tab.Screen name="Settings" component={Settings} />
2020-06-16 17:51:51 +02:00
</Tab.Navigator>
);
2020-06-17 14:58:04 +02:00
}
type Routes = {
Screens: undefined;
SetJellyfinServer: undefined;
}
export default function Routes() {
return (
<Stack.Navigator mode="modal" headerMode="none" screenOptions={{
cardStyle: {
backgroundColor: 'transparent'
}
}}>
<Stack.Screen name="Screens" component={Screens} />
<Stack.Screen name="SetJellyfinServer" component={SetJellyfinServer} />
</Stack.Navigator>
);
}
export type NavigationProp = CompositeNavigationProp<
StackNavigationProp<Routes>,
BottomTabNavigationProp<Screens>
>;