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