Skip to content
This repository has been archived by the owner on Feb 8, 2020. It is now read-only.

Commit

Permalink
feat: export underlying views used to build navigators (#191)
Browse files Browse the repository at this point in the history
Exporting the underlying views makes it easy to build custom navigators on top of our views. Libraries such as react-native-router-flux rely on such exports to build custom routing solutions while being able to take advantage of our work.

This can also be the solution to adding custom behaviour without us needing to add separate config to override the router.
  • Loading branch information
satya164 authored and osdnk committed Dec 3, 2019
1 parent c7a5cfd commit d618ab3
Show file tree
Hide file tree
Showing 13 changed files with 60 additions and 52 deletions.
1 change: 1 addition & 0 deletions packages/bottom-tabs/src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ export { default as createBottomTabNavigator } from './navigators/createBottomTa
/**
* Views
*/
export { default as BottomTabView } from './views/BottomTabView';
export { default as BottomTabBar } from './views/BottomTabBar';

/**
Expand Down
2 changes: 1 addition & 1 deletion packages/drawer/src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ export { default as createDrawerNavigator } from './navigators/createDrawerNavig
/**
* Views
*/
export { default as DrawerView } from './views/DrawerView';
export { default as DrawerItem } from './views/DrawerItem';
export { default as DrawerItemList } from './views/DrawerItemList';
export { default as DrawerContent } from './views/DrawerContent';
export { default as DrawerView } from './views/DrawerView';

/**
* Utilities
Expand Down
2 changes: 1 addition & 1 deletion packages/drawer/src/navigators/createDrawerNavigator.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,10 @@ function DrawerNavigator({

return (
<DrawerView
{...rest}
state={state}
descriptors={descriptors}
navigation={navigation}
{...rest}
/>
);
}
Expand Down
5 changes: 5 additions & 0 deletions packages/material-bottom-tabs/src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@
*/
export { default as createMaterialBottomTabNavigator } from './navigators/createMaterialBottomTabNavigator';

/**
* Views
*/
export { default as MaterialBottomTabView } from './views/MaterialBottomTabView';

/**
* Types
*/
Expand Down
1 change: 1 addition & 0 deletions packages/material-top-tabs/src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ export { default as createMaterialTopTabNavigator } from './navigators/createMat
/**
* Views
*/
export { default as MaterialTopTabView } from './views/MaterialTopTabView';
export { default as MaterialTopTabBar } from './views/MaterialTopTabBar';

/**
Expand Down
5 changes: 5 additions & 0 deletions packages/native-stack/src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@
*/
export { default as createNativeStackNavigator } from './navigators/createNativeStackNavigator';

/**
* Views
*/
export { default as NativeStackView } from './views/NativeStackView';

/**
* Types
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import {
screensEnabled,
// eslint-disable-next-line import/no-unresolved
} from 'react-native-screens';
import StackView from '../views/StackView';
import NativeStackView from '../views/NativeStackView';
import {
NativeStackNavigatorProps,
NativeStackNavigationOptions,
Expand Down Expand Up @@ -64,11 +64,11 @@ function NativeStackNavigator(props: NativeStackNavigatorProps) {
);

return (
<StackView
<NativeStackView
{...rest}
state={state}
navigation={navigation}
descriptors={descriptors}
{...rest}
/>
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,11 @@ type Props = {
descriptors: NativeStackDescriptorMap;
};

export default function StackView({ state, navigation, descriptors }: Props) {
export default function NativeStackView({
state,
navigation,
descriptors,
}: Props) {
return (
<ScreenStack style={styles.scenes}>
{state.routes.map(route => {
Expand Down
1 change: 1 addition & 0 deletions packages/stack/src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ export const Assets = [
/**
* Views
*/
export { default as StackView } from './views/Stack/StackView';
export { default as Header } from './views/Header/Header';
export { default as HeaderTitle } from './views/Header/HeaderTitle';
export { default as HeaderBackButton } from './views/Header/HeaderBackButton';
Expand Down
19 changes: 6 additions & 13 deletions packages/stack/src/navigators/createStackNavigator.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import {
StackNavigationState,
StackActions,
} from '@react-navigation/routers';
import KeyboardManager from '../views/KeyboardManager';
import StackView from '../views/Stack/StackView';
import {
StackNavigationConfig,
Expand All @@ -24,7 +23,6 @@ type Props = DefaultNavigatorOptions<StackNavigationOptions> &
StackNavigationConfig;

function StackNavigator({
keyboardHandlingEnabled,
initialRouteName,
children,
screenOptions,
Expand Down Expand Up @@ -64,17 +62,12 @@ function StackNavigator({
);

return (
<KeyboardManager enabled={keyboardHandlingEnabled !== false}>
{props => (
<StackView
state={state}
descriptors={descriptors}
navigation={navigation}
{...rest}
{...props}
/>
)}
</KeyboardManager>
<StackView
{...rest}
state={state}
descriptors={descriptors}
navigation={navigation}
/>
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ type Props = TransitionPreset & {
floatingHeaderHeight: number;
};

export default class StackItem extends React.PureComponent<Props> {
export default class CardContainer extends React.PureComponent<Props> {
private handleOpen = () => {
const { scene, onTransitionEnd, onOpenRoute } = this.props;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import { StackNavigationState } from '@react-navigation/routers';

import { getDefaultHeaderHeight } from '../Header/HeaderSegment';
import { Props as HeaderContainerProps } from '../Header/HeaderContainer';
import StackItem from './StackItem';
import CardContainer from './CardContainer';
import {
DefaultTransition,
ModalTransition,
Expand Down Expand Up @@ -139,7 +139,7 @@ const getFloatingHeaderHeights = (
}, {});
};

export default class Stack extends React.Component<Props, State> {
export default class CardStack extends React.Component<Props, State> {
static getDerivedStateFromProps(props: Props, state: State) {
if (
props.routes === state.routes &&
Expand Down Expand Up @@ -431,7 +431,7 @@ export default class Stack extends React.Component<Props, State> {
active={isScreenActive}
pointerEvents="box-none"
>
<StackItem
<CardContainer
index={index}
active={index === self.length - 1}
focused={focused}
Expand Down
56 changes: 27 additions & 29 deletions packages/stack/src/views/Stack/StackView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ import { SafeAreaConsumer, EdgeInsets } from 'react-native-safe-area-context';
import { Route } from '@react-navigation/core';
import { StackActions, StackNavigationState } from '@react-navigation/routers';

import Stack from './Stack';
import CardStack from './CardStack';
import KeyboardManager from '../KeyboardManager';
import HeaderContainer, {
Props as HeaderContainerProps,
} from '../Header/HeaderContainer';
Expand All @@ -19,9 +20,6 @@ type Props = StackNavigationConfig & {
state: StackNavigationState;
navigation: StackNavigationHelpers;
descriptors: StackDescriptorMap;
onPageChangeStart?: () => void;
onPageChangeConfirm?: () => void;
onPageChangeCancel?: () => void;
};

type State = {
Expand Down Expand Up @@ -307,9 +305,7 @@ class StackView extends React.Component<Props, State> {
const {
state,
navigation,
onPageChangeStart,
onPageChangeConfirm,
onPageChangeCancel,
keyboardHandlingEnabled,
mode = 'card',
...rest
} = this.props;
Expand All @@ -328,28 +324,30 @@ class StackView extends React.Component<Props, State> {
<SafeAreaProviderCompat>
<SafeAreaConsumer>
{insets => (
<Stack
mode={mode}
insets={insets as EdgeInsets}
getPreviousRoute={this.getPreviousRoute}
getGesturesEnabled={this.getGesturesEnabled}
routes={routes}
openingRouteKeys={openingRouteKeys}
closingRouteKeys={closingRouteKeys}
onGoBack={this.handleGoBack}
onOpenRoute={this.handleOpenRoute}
onCloseRoute={this.handleCloseRoute}
onPageChangeStart={onPageChangeStart}
onPageChangeConfirm={onPageChangeConfirm}
onPageChangeCancel={onPageChangeCancel}
renderHeader={this.renderHeader}
renderScene={this.renderScene}
headerMode={headerMode}
state={state}
navigation={navigation}
descriptors={descriptors}
{...rest}
/>
<KeyboardManager enabled={keyboardHandlingEnabled !== false}>
{props => (
<CardStack
mode={mode}
insets={insets as EdgeInsets}
getPreviousRoute={this.getPreviousRoute}
getGesturesEnabled={this.getGesturesEnabled}
routes={routes}
openingRouteKeys={openingRouteKeys}
closingRouteKeys={closingRouteKeys}
onGoBack={this.handleGoBack}
onOpenRoute={this.handleOpenRoute}
onCloseRoute={this.handleCloseRoute}
renderHeader={this.renderHeader}
renderScene={this.renderScene}
headerMode={headerMode}
state={state}
navigation={navigation}
descriptors={descriptors}
{...rest}
{...props}
/>
)}
</KeyboardManager>
)}
</SafeAreaConsumer>
</SafeAreaProviderCompat>
Expand Down

0 comments on commit d618ab3

Please sign in to comment.