1import { BottomTabNavigationProp } from '@react-navigation/bottom-tabs'; 2import { createStackNavigator } from '@react-navigation/stack'; 3import * as React from 'react'; 4 5import getStackConfig from './StackConfig'; 6import { optionalRequire } from './routeBuilder'; 7import TabIcon from '../components/TabIcon'; 8import ExpoApis from '../screens/ExpoApisScreen'; 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/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/BrightnessScreen')); 110 }, 111 name: 'Brightness', 112 }, 113 { 114 getComponent() { 115 return optionalRequire(() => require('../screens/DeviceScreen')); 116 }, 117 name: 'Device', 118 }, 119 { 120 getComponent() { 121 return optionalRequire(() => require('../screens/DocumentPickerScreen')); 122 }, 123 name: 'DocumentPicker', 124 }, 125 { 126 getComponent() { 127 return optionalRequire(() => require('../screens/LocalizationScreen')); 128 }, 129 name: 'Localization', 130 }, 131 { 132 getComponent() { 133 return optionalRequire(() => require('../screens/FaceDetectorScreen')); 134 }, 135 name: 'FaceDetector', 136 }, 137 { 138 getComponent() { 139 return optionalRequire(() => require('../screens/FileSystemScreen')); 140 }, 141 name: 'FileSystem', 142 }, 143 { 144 getComponent() { 145 return optionalRequire(() => require('../screens/FontScreen')); 146 }, 147 name: 'Font', 148 }, 149 { 150 getComponent() { 151 return optionalRequire(() => require('../screens/HapticsScreen')); 152 }, 153 name: 'Haptics', 154 options: { title: 'Haptics Feedback' }, 155 }, 156 { 157 getComponent() { 158 return optionalRequire(() => require('../screens/CalendarsScreen')); 159 }, 160 name: 'Calendars', 161 }, 162 { 163 getComponent() { 164 return optionalRequire(() => require('../screens/ConstantsScreen')); 165 }, 166 name: 'Constants', 167 }, 168 { 169 getComponent() { 170 return optionalRequire(() => require('../screens/Contacts/ContactsScreen')); 171 }, 172 name: 'Contacts', 173 }, 174 { 175 getComponent() { 176 return optionalRequire(() => require('../screens/Contacts/ContactDetailScreen')); 177 }, 178 name: 'ContactDetail', 179 }, 180 { 181 getComponent() { 182 return optionalRequire(() => require('../screens/ErrorScreen')); 183 }, 184 name: 'Errors', 185 }, 186 { 187 getComponent() { 188 return optionalRequire(() => require('../screens/EventsScreen')); 189 }, 190 name: 'Events', 191 }, 192 { 193 getComponent() { 194 return optionalRequire(() => require('../screens/ImageManipulatorScreen')); 195 }, 196 name: 'ImageManipulator', 197 }, 198 { 199 getComponent() { 200 return optionalRequire(() => require('../screens/ImagePicker/ImagePickerScreen')); 201 }, 202 name: 'ImagePicker', 203 }, 204 { 205 getComponent() { 206 return optionalRequire(() => require('../screens/InAppPurchases/InAppPurchases')); 207 }, 208 name: 'InAppPurchases', 209 options: { title: 'In-App Purchases' }, 210 }, 211 { 212 getComponent() { 213 return optionalRequire(() => require('../screens/IntentLauncherScreen')); 214 }, 215 name: 'IntentLauncher', 216 }, 217 { 218 getComponent() { 219 return optionalRequire(() => require('../screens/KeepAwakeScreen')); 220 }, 221 name: 'KeepAwake', 222 }, 223 { 224 getComponent() { 225 return optionalRequire(() => require('../screens/LinkingScreen')); 226 }, 227 name: 'Linking', 228 }, 229 { 230 getComponent() { 231 return optionalRequire(() => require('../screens/MailComposerScreen')); 232 }, 233 name: 'MailComposer', 234 }, 235 { 236 getComponent() { 237 return optionalRequire(() => require('../screens/MediaLibrary/MediaLibraryScreen')); 238 }, 239 name: 'MediaLibrary', 240 }, 241 { 242 getComponent() { 243 return optionalRequire(() => require('../screens/MediaLibrary/MediaAlbumsScreen')); 244 }, 245 name: 'MediaAlbums', 246 options: { title: 'MediaLibrary Albums' }, 247 }, 248 { 249 getComponent() { 250 return optionalRequire(() => require('../screens/MediaLibrary/MediaDetailsScreen')); 251 }, 252 name: 'MediaDetails', 253 options: { title: 'MediaLibrary Asset' }, 254 }, 255 { 256 getComponent() { 257 return optionalRequire(() => require('../screens/NetInfoScreen')); 258 }, 259 name: 'NetInfo', 260 }, 261 { 262 getComponent() { 263 return optionalRequire(() => require('../screens/NetworkScreen')); 264 }, 265 name: 'Network', 266 }, 267 { 268 getComponent() { 269 return optionalRequire(() => require('../screens/CryptoScreen')); 270 }, 271 name: 'Crypto', 272 }, 273 { 274 getComponent() { 275 return optionalRequire(() => require('../screens/NotificationScreen')); 276 }, 277 name: 'Notification', 278 }, 279 { 280 getComponent() { 281 return optionalRequire(() => require('../screens/LocalAuthenticationScreen')); 282 }, 283 name: 'LocalAuthentication', 284 }, 285 { 286 getComponent() { 287 return optionalRequire(() => require('../screens/Location/LocationScreen')); 288 }, 289 name: 'Location', 290 }, 291 { 292 getComponent() { 293 return optionalRequire(() => require('../screens/Location/GeocodingScreen')); 294 }, 295 name: 'Geocoding', 296 }, 297 { 298 getComponent() { 299 return optionalRequire(() => require('../screens/Location/GeofencingScreen')); 300 }, 301 name: 'Geofencing', 302 options: { title: 'Geofencing Map' }, 303 }, 304 { 305 getComponent() { 306 return optionalRequire(() => require('../screens/PedometerScreen')); 307 }, 308 name: 'Pedometer', 309 }, 310 { 311 getComponent() { 312 return optionalRequire(() => require('../screens/PrintScreen')); 313 }, 314 name: 'Print', 315 }, 316 { 317 getComponent() { 318 return optionalRequire(() => require('../screens/AV/RecordingScreen')); 319 }, 320 name: 'Recording', 321 options: { title: 'Audio Recording' }, 322 }, 323 { 324 getComponent() { 325 return optionalRequire(() => require('../screens/RandomScreen')); 326 }, 327 name: 'Random', 328 }, 329 { 330 getComponent() { 331 return optionalRequire(() => require('../screens/RemindersScreen')); 332 }, 333 name: 'Reminders', 334 }, 335 { 336 getComponent() { 337 return optionalRequire(() => require('../screens/SafeAreaContextScreen')); 338 }, 339 name: 'SafeAreaContext', 340 }, 341 { 342 getComponent() { 343 return optionalRequire(() => require('../screens/ScreenOrientationScreen')); 344 }, 345 name: 'ScreenOrientation', 346 }, 347 { 348 getComponent() { 349 return optionalRequire(() => require('../screens/SecureStoreScreen')); 350 }, 351 name: 'SecureStore', 352 }, 353 { 354 getComponent() { 355 return optionalRequire(() => require('../screens/ScreenCaptureScreen')); 356 }, 357 name: 'ScreenCapture', 358 }, 359 { 360 getComponent() { 361 return optionalRequire(() => require('../screens/SensorScreen')); 362 }, 363 name: 'Sensor', 364 }, 365 { 366 getComponent() { 367 return optionalRequire(() => require('../screens/SharingScreen')); 368 }, 369 name: 'Sharing', 370 }, 371 { 372 getComponent() { 373 return optionalRequire(() => require('../screens/NavigationBarScreen')); 374 }, 375 name: 'NavigationBar', 376 }, 377 { 378 getComponent() { 379 return optionalRequire(() => require('../screens/SystemUIScreen')); 380 }, 381 name: 'SystemUI', 382 }, 383 { 384 getComponent() { 385 return optionalRequire(() => require('../screens/SMSScreen')); 386 }, 387 name: 'SMS', 388 }, 389 { 390 getComponent() { 391 return optionalRequire(() => require('../screens/StoreReview')); 392 }, 393 name: 'StoreReview', 394 options: { title: 'Store Review' }, 395 }, 396 { 397 getComponent() { 398 return optionalRequire(() => require('../screens/TaskManagerScreen')); 399 }, 400 name: 'TaskManager', 401 }, 402 { 403 getComponent() { 404 return optionalRequire(() => require('../screens/TextToSpeechScreen')); 405 }, 406 name: 'TextToSpeech', 407 options: { title: 'Speech' }, 408 }, 409 { 410 getComponent() { 411 return optionalRequire(() => require('../screens/TrackingTransparencyScreen')); 412 }, 413 name: 'TrackingTransparency', 414 options: { title: 'TrackingTransparency' }, 415 }, 416 { 417 getComponent() { 418 return optionalRequire(() => require('../screens/WebBrowser/WebBrowserScreen')); 419 }, 420 name: 'WebBrowser', 421 }, 422 { 423 getComponent() { 424 return optionalRequire(() => require('../screens/ViewShotScreen')); 425 }, 426 name: 'ViewShot', 427 }, 428]; 429 430function ExpoApisStackNavigator(props: { navigation: BottomTabNavigationProp<any> }) { 431 return ( 432 <Stack.Navigator {...props} {...getStackConfig(props)}> 433 <Stack.Screen name="ExpoApis" options={{ title: 'APIs in Expo SDK' }} component={ExpoApis} /> 434 435 {Screens.map(({ name, options, getComponent }) => ( 436 <Stack.Screen name={name} key={name} getComponent={getComponent} options={options || {}} /> 437 ))} 438 </Stack.Navigator> 439 ); 440} 441const icon = ({ focused }: { focused: boolean }) => { 442 return <TabIcon name="code-tags" focused={focused} />; 443}; 444ExpoApisStackNavigator.navigationOptions = { 445 title: 'APIs', 446 tabBarLabel: 'APIs', 447 tabBarIcon: icon, 448 drawerIcon: icon, 449}; 450 451export default ExpoApisStackNavigator; 452