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