ModalStack.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. /**
  2. * @flow
  3. */
  4. import React from 'react';
  5. import { ScrollView, StatusBar, Text } from 'react-native';
  6. import { SafeAreaView, createStackNavigator } from 'react-navigation';
  7. import SampleText from './SampleText';
  8. import { Button } from './commonComponents/ButtonWithMargin';
  9. const MyNavScreen = ({ navigation, banner }) => (
  10. <ScrollView>
  11. <SafeAreaView
  12. forceInset={{
  13. top: navigation.state.routeName === 'HeaderTest' ? 'always' : 'never',
  14. }}
  15. >
  16. <SampleText>{banner}</SampleText>
  17. <Button
  18. onPress={() => navigation.navigate('Profile', { name: 'Jane' })}
  19. title="Go to a profile screen"
  20. />
  21. <Button
  22. onPress={() => navigation.navigate('HeaderTest')}
  23. title="Go to a header toggle screen"
  24. />
  25. {navigation.state.routeName === 'HeaderTest' && (
  26. <Button
  27. title="Toggle Header"
  28. onPress={() =>
  29. navigation.setParams({
  30. headerVisible:
  31. !navigation.state.params ||
  32. !navigation.state.params.headerVisible,
  33. })
  34. }
  35. />
  36. )}
  37. <Button onPress={() => navigation.goBack(null)} title="Go back" />
  38. </SafeAreaView>
  39. <StatusBar barStyle="default" />
  40. </ScrollView>
  41. );
  42. const MyHomeScreen = ({ navigation }) => (
  43. <MyNavScreen banner="Home Screen" navigation={navigation} />
  44. );
  45. MyHomeScreen.navigationOptions = {
  46. title: 'Welcome',
  47. };
  48. const MyProfileScreen = ({ navigation }) => (
  49. <MyNavScreen
  50. banner={`${navigation.state.params.name}'s Profile`}
  51. navigation={navigation}
  52. />
  53. );
  54. MyProfileScreen.navigationOptions = ({ navigation }) => ({
  55. title: `${navigation.state.params.name}'s Profile!`,
  56. });
  57. const ProfileNavigator = createStackNavigator(
  58. {
  59. Home: {
  60. screen: MyHomeScreen,
  61. },
  62. Profile: {
  63. path: 'people/:name',
  64. screen: MyProfileScreen,
  65. },
  66. },
  67. {
  68. navigationOptions: {
  69. headerLeft: null,
  70. },
  71. mode: 'modal',
  72. }
  73. );
  74. const MyHeaderTestScreen = ({ navigation }) => (
  75. <MyNavScreen banner={`Full screen view`} navigation={navigation} />
  76. );
  77. MyHeaderTestScreen.navigationOptions = ({ navigation }) => {
  78. const headerVisible =
  79. navigation.state.params && navigation.state.params.headerVisible;
  80. return {
  81. header: headerVisible ? undefined : null,
  82. title: 'Now you see me',
  83. };
  84. };
  85. const ModalStack = createStackNavigator(
  86. {
  87. ProfileNavigator: {
  88. screen: ProfileNavigator,
  89. },
  90. HeaderTest: { screen: MyHeaderTestScreen },
  91. },
  92. {
  93. navigationOptions: {
  94. header: null,
  95. },
  96. mode: 'modal',
  97. }
  98. );
  99. export default ModalStack;