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