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/HapticsScreen')); 182 }, 183 name: 'Haptics', 184 options: { title: 'Haptics Feedback' }, 185 }, 186 { 187 getComponent() { 188 return optionalRequire(() => require('../screens/CalendarsScreen')); 189 }, 190 name: 'Calendars', 191 }, 192 { 193 getComponent() { 194 return optionalRequire(() => require('../screens/ConstantsScreen')); 195 }, 196 name: 'Constants', 197 }, 198 { 199 getComponent() { 200 return optionalRequire(() => require('../screens/Contacts/ContactsScreen')); 201 }, 202 name: 'Contacts', 203 }, 204 { 205 getComponent() { 206 return optionalRequire(() => require('../screens/Contacts/ContactDetailScreen')); 207 }, 208 name: 'ContactDetail', 209 }, 210 { 211 getComponent() { 212 return optionalRequire(() => require('../screens/ErrorScreen')); 213 }, 214 name: 'Errors', 215 }, 216 { 217 getComponent() { 218 return optionalRequire(() => require('../screens/EventsScreen')); 219 }, 220 name: 'Events', 221 }, 222 { 223 getComponent() { 224 return optionalRequire(() => require('../screens/ImageManipulatorScreen')); 225 }, 226 name: 'ImageManipulator', 227 }, 228 { 229 getComponent() { 230 return optionalRequire(() => require('../screens/ImagePicker/ImagePickerScreen')); 231 }, 232 name: 'ImagePicker', 233 }, 234 { 235 getComponent() { 236 return optionalRequire(() => require('../screens/InAppPurchases/InAppPurchases')); 237 }, 238 name: 'InAppPurchases', 239 options: { title: 'In-App Purchases' }, 240 }, 241 { 242 getComponent() { 243 return optionalRequire(() => require('../screens/IntentLauncherScreen')); 244 }, 245 name: 'IntentLauncher', 246 }, 247 { 248 getComponent() { 249 return optionalRequire(() => require('../screens/KeepAwakeScreen')); 250 }, 251 name: 'KeepAwake', 252 }, 253 { 254 getComponent() { 255 return optionalRequire(() => require('../screens/LinkingScreen')); 256 }, 257 name: 'Linking', 258 }, 259 { 260 getComponent() { 261 return optionalRequire(() => require('../screens/MailComposerScreen')); 262 }, 263 name: 'MailComposer', 264 }, 265 { 266 getComponent() { 267 return optionalRequire(() => require('../screens/MediaLibrary/MediaLibraryScreen')); 268 }, 269 name: 'MediaLibrary', 270 }, 271 { 272 getComponent() { 273 return optionalRequire(() => require('../screens/MediaLibrary/MediaAlbumsScreen')); 274 }, 275 name: 'MediaAlbums', 276 options: { title: 'MediaLibrary Albums' }, 277 }, 278 { 279 getComponent() { 280 return optionalRequire(() => require('../screens/MediaLibrary/MediaDetailsScreen')); 281 }, 282 name: 'MediaDetails', 283 options: { title: 'MediaLibrary Asset' }, 284 }, 285 { 286 getComponent() { 287 return optionalRequire(() => require('../screens/NetInfoScreen')); 288 }, 289 name: 'NetInfo', 290 }, 291 { 292 getComponent() { 293 return optionalRequire(() => require('../screens/NetworkScreen')); 294 }, 295 name: 'Network', 296 }, 297 { 298 getComponent() { 299 return optionalRequire(() => require('../screens/NotificationScreen')); 300 }, 301 name: 'Notification', 302 }, 303 { 304 getComponent() { 305 return optionalRequire(() => require('../screens/LocalAuthenticationScreen')); 306 }, 307 name: 'LocalAuthentication', 308 }, 309 { 310 getComponent() { 311 return optionalRequire(() => require('../screens/Location/LocationScreen')); 312 }, 313 name: 'Location', 314 }, 315 { 316 getComponent() { 317 return optionalRequire(() => require('../screens/Location/GeocodingScreen')); 318 }, 319 name: 'Geocoding', 320 }, 321 { 322 getComponent() { 323 return optionalRequire(() => require('../screens/Location/GeofencingScreen')); 324 }, 325 name: 'Geofencing', 326 options: { title: 'Geofencing Map' }, 327 }, 328 { 329 getComponent() { 330 return optionalRequire(() => require('../screens/PedometerScreen')); 331 }, 332 name: 'Pedometer', 333 }, 334 { 335 getComponent() { 336 return optionalRequire(() => require('../screens/PermissionsScreen')); 337 }, 338 name: 'Permissions', 339 }, 340 { 341 getComponent() { 342 return optionalRequire(() => require('../screens/PrintScreen')); 343 }, 344 name: 'Print', 345 }, 346 { 347 getComponent() { 348 return optionalRequire(() => require('../screens/AV/RecordingScreen')); 349 }, 350 name: 'Recording', 351 options: { title: 'Audio Recording' }, 352 }, 353 { 354 getComponent() { 355 return optionalRequire(() => require('../screens/RandomScreen')); 356 }, 357 name: 'Random', 358 }, 359 { 360 getComponent() { 361 return optionalRequire(() => require('../screens/RemindersScreen')); 362 }, 363 name: 'Reminders', 364 }, 365 { 366 getComponent() { 367 return optionalRequire(() => require('../screens/SafeAreaContextScreen')); 368 }, 369 name: 'SafeAreaContext', 370 }, 371 { 372 getComponent() { 373 return optionalRequire(() => require('../screens/ScreenOrientationScreen')); 374 }, 375 name: 'ScreenOrientation', 376 }, 377 { 378 getComponent() { 379 return optionalRequire(() => require('../screens/SecureStoreScreen')); 380 }, 381 name: 'SecureStore', 382 }, 383 { 384 getComponent() { 385 return optionalRequire(() => require('../screens/ScreenCaptureScreen')); 386 }, 387 name: 'ScreenCapture', 388 }, 389 { 390 getComponent() { 391 return optionalRequire(() => require('../screens/SensorScreen')); 392 }, 393 name: 'Sensor', 394 }, 395 { 396 getComponent() { 397 return optionalRequire(() => require('../screens/SharingScreen')); 398 }, 399 name: 'Sharing', 400 }, 401 { 402 getComponent() { 403 return optionalRequire(() => require('../screens/NavigationBarScreen')); 404 }, 405 name: 'NavigationBar', 406 }, 407 { 408 getComponent() { 409 return optionalRequire(() => require('../screens/SystemUIScreen')); 410 }, 411 name: 'SystemUI', 412 }, 413 { 414 getComponent() { 415 return optionalRequire(() => require('../screens/SMSScreen')); 416 }, 417 name: 'SMS', 418 }, 419 { 420 getComponent() { 421 return optionalRequire(() => require('../screens/StoreReview')); 422 }, 423 name: 'StoreReview', 424 options: { title: 'Store Review' }, 425 }, 426 { 427 getComponent() { 428 return optionalRequire(() => require('../screens/TaskManagerScreen')); 429 }, 430 name: 'TaskManager', 431 }, 432 { 433 getComponent() { 434 return optionalRequire(() => require('../screens/TextToSpeechScreen')); 435 }, 436 name: 'TextToSpeech', 437 options: { title: 'Speech' }, 438 }, 439 { 440 getComponent() { 441 return optionalRequire(() => require('../screens/TrackingTransparencyScreen')); 442 }, 443 name: 'TrackingTransparency', 444 options: { title: 'TrackingTransparency' }, 445 }, 446 { 447 getComponent() { 448 return optionalRequire(() => require('../screens/WebBrowser/WebBrowserScreen')); 449 }, 450 name: 'WebBrowser', 451 }, 452 { 453 getComponent() { 454 return optionalRequire(() => require('../screens/ViewShotScreen')); 455 }, 456 name: 'ViewShot', 457 }, 458]; 459 460function ExpoApisStackNavigator(props: { navigation: BottomTabNavigationProp<any> }) { 461 return ( 462 <Stack.Navigator {...props} {...getStackConfig(props)}> 463 <Stack.Screen name="ExpoApis" options={{ title: 'APIs in Expo SDK' }} component={ExpoApis} /> 464 465 {Screens.map(({ name, options, getComponent }) => ( 466 <Stack.Screen name={name} key={name} getComponent={getComponent} options={options || {}} /> 467 ))} 468 </Stack.Navigator> 469 ); 470} 471const icon = ({ focused }: { focused: boolean }) => { 472 return <TabIcon name="code-tags" focused={focused} />; 473}; 474ExpoApisStackNavigator.navigationOptions = { 475 title: 'APIs', 476 tabBarLabel: 'APIs', 477 tabBarIcon: icon, 478 drawerIcon: icon, 479}; 480 481export default ExpoApisStackNavigator; 482