1import { BottomTabNavigationProp } from '@react-navigation/bottom-tabs'; 2import { createStackNavigator } from '@react-navigation/stack'; 3import * as React from 'react'; 4 5import TabIcon from '../components/TabIcon'; 6import ExpoApis from '../screens/ExpoApisScreen'; 7import getStackConfig from './StackConfig'; 8import { optionalRequire } from './routeBuilder'; 9 10const Stack = createStackNavigator(); 11 12export const Screens = [ 13 { 14 getComponent() { 15 return optionalRequire(() => require('../screens/ExpoModulesScreen')); 16 }, 17 name: 'ExpoModules', 18 }, 19 { 20 getComponent() { 21 return optionalRequire(() => require('../screens/StatusBarScreen')); 22 }, 23 name: 'StatusBar', 24 }, 25 { 26 getComponent() { 27 return optionalRequire(() => require('../screens/AlertScreen')); 28 }, 29 name: 'Alert', 30 }, 31 { 32 getComponent() { 33 return optionalRequire(() => require('../screens/Amplitude/AmplitudeScreen')); 34 }, 35 name: 'Amplitude', 36 }, 37 { 38 getComponent() { 39 return optionalRequire(() => require('../screens/Clipboard/ClipboardScreen')); 40 }, 41 name: 'Clipboard', 42 }, 43 { 44 getComponent() { 45 return optionalRequire(() => require('../screens/CellularScreen')); 46 }, 47 name: 'Cellular', 48 }, 49 { 50 getComponent() { 51 return optionalRequire(() => require('../screens/AccelerometerScreen')); 52 }, 53 name: 'Accelerometer', 54 }, 55 { 56 getComponent() { 57 return optionalRequire(() => require('../screens/ActionSheetScreen')); 58 }, 59 name: 'ActionSheet', 60 options: { title: 'Action Sheet' }, 61 }, 62 { 63 getComponent() { 64 return optionalRequire(() => require('../screens/AppearanceScreen')); 65 }, 66 name: 'Appearance', 67 }, 68 { 69 getComponent() { 70 return optionalRequire(() => require('../screens/AppleAuthenticationScreen')); 71 }, 72 name: 'AppleAuthentication', 73 options: { title: 'Apple Authentication' }, 74 }, 75 { 76 getComponent() { 77 return optionalRequire(() => require('../screens/AsyncStorageScreen')); 78 }, 79 name: 'AsyncStorage', 80 }, 81 { 82 getComponent() { 83 return optionalRequire(() => require('../screens/AV/AudioScreen')); 84 }, 85 name: 'Audio', 86 }, 87 { 88 getComponent() { 89 return optionalRequire(() => require('../screens/AuthSession/AuthSessionScreen')); 90 }, 91 name: 'AuthSession', 92 }, 93 { 94 getComponent() { 95 return optionalRequire(() => require('../screens/Location/BackgroundLocationMapScreen')); 96 }, 97 name: 'BackgroundLocation', 98 options: { title: 'Background location' }, 99 }, 100 { 101 getComponent() { 102 return optionalRequire(() => require('../screens/BackgroundFetchScreen')); 103 }, 104 name: 'BackgroundFetch', 105 options: { title: 'Background Fetch' }, 106 }, 107 { 108 getComponent() { 109 return optionalRequire(() => require('../screens/BatteryScreen')); 110 }, 111 name: 'Battery', 112 }, 113 { 114 getComponent() { 115 return optionalRequire(() => require('../screens/BranchScreen')); 116 }, 117 name: 'Branch', 118 }, 119 { 120 getComponent() { 121 return optionalRequire(() => require('../screens/BrightnessScreen')); 122 }, 123 name: 'Brightness', 124 }, 125 { 126 getComponent() { 127 return optionalRequire(() => require('../screens/DeviceScreen')); 128 }, 129 name: 'Device', 130 }, 131 { 132 getComponent() { 133 return optionalRequire(() => require('../screens/DocumentPickerScreen')); 134 }, 135 name: 'DocumentPicker', 136 }, 137 { 138 getComponent() { 139 return optionalRequire(() => require('../screens/LocalizationScreen')); 140 }, 141 name: 'Localization', 142 }, 143 { 144 getComponent() { 145 return optionalRequire(() => require('../screens/FacebookAppEventsScreen')); 146 }, 147 name: 'FacebookAppEvents', 148 }, 149 { 150 getComponent() { 151 return optionalRequire(() => require('../screens/FacebookLoginScreen')); 152 }, 153 name: 'FacebookLogin', 154 }, 155 { 156 getComponent() { 157 return optionalRequire(() => require('../screens/FaceDetectorScreen')); 158 }, 159 name: 'FaceDetector', 160 }, 161 { 162 getComponent() { 163 return optionalRequire(() => require('../screens/FileSystemScreen')); 164 }, 165 name: 'FileSystem', 166 }, 167 { 168 getComponent() { 169 return optionalRequire(() => require('../screens/FirebaseRecaptchaScreen')); 170 }, 171 name: 'FirebaseRecaptcha', 172 }, 173 { 174 getComponent() { 175 return optionalRequire(() => require('../screens/FontScreen')); 176 }, 177 name: 'Font', 178 }, 179 { 180 getComponent() { 181 return optionalRequire(() => require('../screens/GoogleSignInScreen')); 182 }, 183 name: 'GoogleSignIn', 184 options: { title: 'Native Google Sign-In' }, 185 }, 186 { 187 getComponent() { 188 return optionalRequire(() => require('../screens/HapticsScreen')); 189 }, 190 name: 'Haptics', 191 options: { title: 'Haptics Feedback' }, 192 }, 193 { 194 getComponent() { 195 return optionalRequire(() => require('../screens/CalendarsScreen')); 196 }, 197 name: 'Calendars', 198 }, 199 { 200 getComponent() { 201 return optionalRequire(() => require('../screens/ConstantsScreen')); 202 }, 203 name: 'Constants', 204 }, 205 { 206 getComponent() { 207 return optionalRequire(() => require('../screens/Contacts/ContactsScreen')); 208 }, 209 name: 'Contacts', 210 }, 211 { 212 getComponent() { 213 return optionalRequire(() => require('../screens/Contacts/ContactDetailScreen')); 214 }, 215 name: 'ContactDetail', 216 }, 217 { 218 getComponent() { 219 return optionalRequire(() => require('../screens/ErrorScreen')); 220 }, 221 name: 'Errors', 222 }, 223 { 224 getComponent() { 225 return optionalRequire(() => require('../screens/EventsScreen')); 226 }, 227 name: 'Events', 228 }, 229 { 230 getComponent() { 231 return optionalRequire(() => require('../screens/ImageManipulatorScreen')); 232 }, 233 name: 'ImageManipulator', 234 }, 235 { 236 getComponent() { 237 return optionalRequire(() => require('../screens/ImagePicker/ImagePickerScreen')); 238 }, 239 name: 'ImagePicker', 240 }, 241 { 242 getComponent() { 243 return optionalRequire(() => require('../screens/InAppPurchases/InAppPurchases')); 244 }, 245 name: 'InAppPurchases', 246 options: { title: 'In-App Purchases' }, 247 }, 248 { 249 getComponent() { 250 return optionalRequire(() => require('../screens/IntentLauncherScreen')); 251 }, 252 name: 'IntentLauncher', 253 }, 254 { 255 getComponent() { 256 return optionalRequire(() => require('../screens/KeepAwakeScreen')); 257 }, 258 name: 'KeepAwake', 259 }, 260 { 261 getComponent() { 262 return optionalRequire(() => require('../screens/LinkingScreen')); 263 }, 264 name: 'Linking', 265 }, 266 { 267 getComponent() { 268 return optionalRequire(() => require('../screens/MailComposerScreen')); 269 }, 270 name: 'MailComposer', 271 }, 272 { 273 getComponent() { 274 return optionalRequire(() => require('../screens/MediaLibrary/MediaLibraryScreen')); 275 }, 276 name: 'MediaLibrary', 277 }, 278 { 279 getComponent() { 280 return optionalRequire(() => require('../screens/MediaLibrary/MediaAlbumsScreen')); 281 }, 282 name: 'MediaAlbums', 283 options: { title: 'MediaLibrary Albums' }, 284 }, 285 { 286 getComponent() { 287 return optionalRequire(() => require('../screens/MediaLibrary/MediaDetailsScreen')); 288 }, 289 name: 'MediaDetails', 290 options: { title: 'MediaLibrary Asset' }, 291 }, 292 { 293 getComponent() { 294 return optionalRequire(() => require('../screens/NetInfoScreen')); 295 }, 296 name: 'NetInfo', 297 }, 298 { 299 getComponent() { 300 return optionalRequire(() => require('../screens/NetworkScreen')); 301 }, 302 name: 'Network', 303 }, 304 { 305 getComponent() { 306 return optionalRequire(() => require('../screens/NotificationScreen')); 307 }, 308 name: 'Notification', 309 }, 310 { 311 getComponent() { 312 return optionalRequire(() => require('../screens/LocalAuthenticationScreen')); 313 }, 314 name: 'LocalAuthentication', 315 }, 316 { 317 getComponent() { 318 return optionalRequire(() => require('../screens/Location/LocationScreen')); 319 }, 320 name: 'Location', 321 }, 322 { 323 getComponent() { 324 return optionalRequire(() => require('../screens/Location/GeocodingScreen')); 325 }, 326 name: 'Geocoding', 327 }, 328 { 329 getComponent() { 330 return optionalRequire(() => require('../screens/Location/GeofencingScreen')); 331 }, 332 name: 'Geofencing', 333 options: { title: 'Geofencing Map' }, 334 }, 335 { 336 getComponent() { 337 return optionalRequire(() => require('../screens/PedometerScreen')); 338 }, 339 name: 'Pedometer', 340 }, 341 { 342 getComponent() { 343 return optionalRequire(() => require('../screens/PermissionsScreen')); 344 }, 345 name: 'Permissions', 346 }, 347 { 348 getComponent() { 349 return optionalRequire(() => require('../screens/PrintScreen')); 350 }, 351 name: 'Print', 352 }, 353 { 354 getComponent() { 355 return optionalRequire(() => require('../screens/AV/RecordingScreen')); 356 }, 357 name: 'Recording', 358 options: { title: 'Audio Recording' }, 359 }, 360 { 361 getComponent() { 362 return optionalRequire(() => require('../screens/RandomScreen')); 363 }, 364 name: 'Random', 365 }, 366 { 367 getComponent() { 368 return optionalRequire(() => require('../screens/RemindersScreen')); 369 }, 370 name: 'Reminders', 371 }, 372 { 373 getComponent() { 374 return optionalRequire(() => require('../screens/SafeAreaContextScreen')); 375 }, 376 name: 'SafeAreaContext', 377 }, 378 { 379 getComponent() { 380 return optionalRequire(() => require('../screens/ScreenOrientationScreen')); 381 }, 382 name: 'ScreenOrientation', 383 }, 384 { 385 getComponent() { 386 return optionalRequire(() => require('../screens/SecureStoreScreen')); 387 }, 388 name: 'SecureStore', 389 }, 390 { 391 getComponent() { 392 return optionalRequire(() => require('../screens/ScreenCaptureScreen')); 393 }, 394 name: 'ScreenCapture', 395 }, 396 { 397 getComponent() { 398 return optionalRequire(() => require('../screens/SensorScreen')); 399 }, 400 name: 'Sensor', 401 }, 402 { 403 getComponent() { 404 return optionalRequire(() => require('../screens/SharingScreen')); 405 }, 406 name: 'Sharing', 407 }, 408 { 409 getComponent() { 410 return optionalRequire(() => require('../screens/NavigationBarScreen')); 411 }, 412 name: 'NavigationBar', 413 }, 414 { 415 getComponent() { 416 return optionalRequire(() => require('../screens/SystemUIScreen')); 417 }, 418 name: 'SystemUI', 419 }, 420 { 421 getComponent() { 422 return optionalRequire(() => require('../screens/SMSScreen')); 423 }, 424 name: 'SMS', 425 }, 426 { 427 getComponent() { 428 return optionalRequire(() => require('../screens/StoreReview')); 429 }, 430 name: 'StoreReview', 431 options: { title: 'Store Review' }, 432 }, 433 { 434 getComponent() { 435 return optionalRequire(() => require('../screens/TaskManagerScreen')); 436 }, 437 name: 'TaskManager', 438 }, 439 { 440 getComponent() { 441 return optionalRequire(() => require('../screens/TextToSpeechScreen')); 442 }, 443 name: 'TextToSpeech', 444 options: { title: 'Speech' }, 445 }, 446 { 447 getComponent() { 448 return optionalRequire(() => require('../screens/TrackingTransparencyScreen')); 449 }, 450 name: 'TrackingTransparency', 451 options: { title: 'TrackingTransparency' }, 452 }, 453 { 454 getComponent() { 455 return optionalRequire(() => require('../screens/WebBrowser/WebBrowserScreen')); 456 }, 457 name: 'WebBrowser', 458 }, 459 { 460 getComponent() { 461 return optionalRequire(() => require('../screens/ViewShotScreen')); 462 }, 463 name: 'ViewShot', 464 }, 465]; 466 467function ExpoApisStackNavigator(props: { navigation: BottomTabNavigationProp<any> }) { 468 return ( 469 <Stack.Navigator {...props} {...getStackConfig(props)}> 470 <Stack.Screen name="ExpoApis" options={{ title: 'APIs in Expo SDK' }} component={ExpoApis} /> 471 472 {Screens.map(({ name, options, getComponent }) => ( 473 <Stack.Screen name={name} key={name} getComponent={getComponent} options={options || {}} /> 474 ))} 475 </Stack.Navigator> 476 ); 477} 478const icon = ({ focused }: { focused: boolean }) => { 479 return <TabIcon name="code-tags" focused={focused} />; 480}; 481ExpoApisStackNavigator.navigationOptions = { 482 title: 'APIs', 483 tabBarLabel: 'APIs', 484 tabBarIcon: icon, 485 drawerIcon: icon, 486}; 487 488export default ExpoApisStackNavigator; 489