Skip to content

Instantly share code, notes, and snippets.

@artyorsh
artyorsh / home.navigator.tsx
Created October 23, 2019 12:26
Home Navigator with Tabs at the bottom (Binding React Navigation 5 to Eva Design System)
import React from 'react';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import { BottomHomeScreen } from '@app-scenes/home';
import { TodoNavigator } from './todo.navigator';
import { ProfileNavigator } from './profile.navigator';
import { AppRoute } from './app-routes';
const BottomTab = createBottomTabNavigator();
export const HomeNavigator = (): React.ReactElement => (
@artyorsh
artyorsh / app.navigator.tsx
Created October 23, 2019 14:43
App Navigator with Auth and Home screens (Binding React Navigation 5 to Eva Design System)
import React from 'react';
import { NavigationNativeContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import { AuthNavigator } from './auth.navigator';
import { HomeNavigator } from './home.navigator';
import { AppRoute } from './app-routes';
const Stack = createStackNavigator();
export const AppNavigator = (config): React.ReactElement => (
@artyorsh
artyorsh / home.navigator.tsx
Created October 23, 2019 15:30
Home Navigator with Drawer and Tabs (Binding React Navigation 5 to Eva Design System)
import React from 'react';
import { createDrawerNavigator } from '@react-navigation/drawer';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import { BottomHomeScreen, DrawerHomeScreen, AboutScreen } from '@app-scenes/home';
import { TodoNavigator } from './todo.navigator';
import { ProfileNavigator } from './profile.navigator';
import { AppRoute } from './app-routes';
const Drawer = createDrawerNavigator();
const BottomTab = createBottomTabNavigator();
@artyorsh
artyorsh / todo.component.tsx
Last active October 25, 2019 13:22
UI Kitten TabBar with burger menu (Binding React Navigation 5 to Eva Design System)
import React from 'react';
import { TabBar, Tab, Divider } from 'react-native-ui-kitten';
import { SafeAreaLayout, SaveAreaInset, SafeAreaLayoutElement } from '@app-components/safe-area-layout.component';
import { Toolbar } from '@app-components/toolbar.component';
import { DoneAllIcon, GridIcon, MenuIcon } from '@app-assets/icons';
export const TodoScreen = (props): SafeAreaLayoutElement => {
const onTabSelect = (index: number): void => {
const { [index]: selectedTabRoute } = props.state.routeNames;
@artyorsh
artyorsh / drawer-home.component.tsx
Last active October 23, 2019 16:29
Drawer component for Home Navigator (Binding React Navigation 5 to Eva Design System)
import React from 'react';
import { Drawer, DrawerElement, MenuItemType } from 'react-native-ui-kitten';
import { InfoIcon, LogoutIcon } from '@app-assets/icons';
import { AppRoute } from '@app-navigation/app-routes';
import { SafeAreaLayout, SaveAreaInset} from '@app-components/safe-area-layout.component';
const drawerData: MenuItemType[] = [
{ icon: InfoIcon, title: 'About' },
{ icon: LogoutIcon, title: 'Log Out' },
];
@artyorsh
artyorsh / auth.navigator.tsx
Last active October 24, 2019 15:03
Type definitions for Auth screens (Binding React Navigation 5 to Eva Design System)
import { ParamListBase, RouteProp } from '@react-navigation/core';
import { StackNavigationProp } from '@react-navigation/stack';
import { AppRoute } from './app-routes';
interface AuthNavigatorParams extends ParamListBase {
[AppRoute.SIGN_IN]: undefined;
[AppRoute.SIGN_UP]: undefined;
[AppRoute.RESET_PASSWORD]: undefined;
}
// AdditionalNavigationProp is, for example, DrawerNavigationProp
export type BottomTabBarProps<AdditionalNavigationProp = {}> = BottomTabBarOptions & {
state: TabNavigationState;
descriptors: BottomTabDescriptorMap;
navigation: NavigationHelpers<ParamListBase> & AdditionalNavigationProp;
// ....
};
@artyorsh
artyorsh / sign-in.component.tsx
Created October 25, 2019 14:27
Form submit handler (Binding React Navigation 5 to Eva Design System)
const onFormSubmit = (values: SignInData): void => {
props.onAuthorized();
};
@artyorsh
artyorsh / sign-in.component.tsx
Created October 25, 2019 14:31
Additional Sign In screen props (Binding React Navigation 5 to Eva Design System)
interface SignInProps extends SignInScreenProps {
onAuthorized: () => void;
}
@artyorsh
artyorsh / auth.navigator.tsx
Created October 25, 2019 14:35
Passing additional props to screens (Binding React Navigation 5 to Eva Design System)
export const AuthNavigator = (props: AuthNavigatorProps): React.ReactElement => {
const SignInNavigationScreen = (screenProps: SignInScreenProps): React.ReactElement => (
<SignInScreen {...screenProps} onAuthorized={props.onAuthorized}/>
);
const SignUpNavigationScreen = (screenProps: SignUpScreenProps): React.ReactElement => (
<SignUpScreen {...screenProps} onAuthorized={props.onAuthorized}/>
);