123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 |
- import React, {Component} from 'react';
- import {AppRegistry, NativeModules} from 'react-native';
- import _ from 'lodash';
- import utils from './utils';
-
- import Navigation from './../Navigation';
-
- const resolveAssetSource = require('react-native/Libraries/Image/resolveAssetSource');
-
- import * as newPlatformSpecific from './../platformSpecific';
-
- function startSingleScreenApp(params) {
- const screen = params.screen;
- if (!screen.screen) {
- console.error('startSingleScreenApp(params): screen must include a screen property');
- return;
- }
- addNavigatorParams(screen);
- addNavigatorButtons(screen);
- addNavigationStyleParams(screen);
- screen.passProps = params.passProps;
- //const drawer = setupDrawer(params.drawer);
-
- screen.screenId = screen.screen;
-
- /*
- * adapt to new API
- */
- params.screen = adaptNavigationStyleToScreenStyle(screen);
- params.screen = adaptNavigationParams(screen);
-
- newPlatformSpecific.startApp(params);
- }
-
- function navigatorPush(navigator, params) {
- addNavigatorParams(params, navigator);
- addNavigatorButtons(params);
- addNavigationStyleParams(params);
-
- params.screenId = params.screen;
- let adapted = adaptNavigationStyleToScreenStyle(params);
- adapted = adaptNavigationParams(adapted);
-
- newPlatformSpecific.push(adapted);
- }
-
- function navigatorPop(navigator, params) {
- addNavigatorParams(params, navigator);
-
- params.screenId = params.screen;
- let adapted = adaptNavigationStyleToScreenStyle(params);
- adapted = adaptNavigationParams(adapted);
-
- newPlatformSpecific.pop(adapted);
- }
-
- function navigatorPopToRoot(navigator, params) {
- addNavigatorParams(params, navigator);
-
- params.screenId = params.screen;
- let adapted = adaptNavigationStyleToScreenStyle(params);
- adapted = adaptNavigationParams(adapted);
-
- newPlatformSpecific.popToRoot(adapted);
- }
-
- function adaptNavigationStyleToScreenStyle(screen) {
- const navigatorStyle = screen.navigatorStyle;
- if (!navigatorStyle) {
- return screen;
- }
-
- screen.styleParams = {
- statusBarColor: navigatorStyle.statusBarColor,
- topBarColor: navigatorStyle.toolBarColor,
- navigationBarColor: navigatorStyle.navigationBarColor,
- titleBarHidden: navigatorStyle.navBarHidden,
- backButtonHidden: navigatorStyle.backButtonHidden,
- topTabsHidden: navigatorStyle.topTabsHidden,
- bottomTabsHidden: navigatorStyle.tabBarHidden,
- bottomTabsHiddenOnScroll: navigatorStyle.bottomTabsHiddenOnScroll
- };
-
- return _.omit(screen, ['navigatorStyle']);
- }
-
- function adaptNavigationParams(screen) {
- screen.navigationParams = {
- screenInstanceID: screen.screenInstanceID,
- navigatorID: screen.navigatorID,
- navigatorEventID: screen.navigatorEventID
- };
- return _.omit(screen, ['screenInstanceID', 'navigatorID', 'navigatorEventID']);
- }
-
- function startTabBasedApp(params) {
- //if (!params.tabs) {
- // console.error('startTabBasedApp(params): params.tabs is required');
- // return;
- //}
- //
- //params.tabs.forEach(function(tab, idx) {
- // addNavigatorParams(tab, null, idx);
- // addNavigatorButtons(tab);
- // addNavigationStyleParams(tab);
- // addTabIcon(tab);
- // tab.passProps = params.passProps;
- //});
- //
- //const drawer = setupDrawer(params.drawer);
- //RctActivity.startTabBasedApp(params.tabs, params.tabsStyle, drawer);
- }
-
- function addTabIcon(tab) {
- if (tab.icon) {
- const icon = resolveAssetSource(tab.icon);
- if (icon) {
- tab.icon = icon.uri;
- }
- }
-
- if (!tab.icon) {
- throw new Error("No icon defined for tab " + tab.screen);
- }
- }
-
- function navigatorSetButtons(navigator, navigatorEventID, params) {
- //if (params.rightButtons) {
- // params.rightButtons.forEach(function(button) {
- // if (button.icon) {
- // const icon = resolveAssetSource(button.icon);
- // if (icon) {
- // button.icon = icon.uri;
- // }
- // }
- // });
- //}
- //RctActivity.setNavigatorButtons(params);
- }
-
- function navigatorResetTo(navigator, params) {
- //addNavigatorParams(params, navigator);
- //addNavigatorButtons(params);
- //addNavigationStyleParams(params);
- //RctActivity.navigatorResetTo(params);
- }
-
- function navigatorSetTabBadge(navigator, params) {
- //RctActivity.setTabBadge({
- // tabIndex: params.tabIndex,
- // badge: params.badge
- //});
- }
-
- function navigatorSetTitle(navigator, params) {
- //RctActivity.setNavigatorTitle(params);
- }
-
- function navigatorSwitchToTab(navigator, params) {
- //RctActivity.switchToTab({
- // navigatorID: navigator.navigatorID,
- // tabIndex: params.tabIndex
- //});
- }
-
- function navigatorToggleDrawer(navigator, params) {
- //RctActivity.toggleDrawer({
- // side: params.side,
- // animated: !(params.animated === false),
- // to: params.to || ''
- //});
- }
-
- function navigatorToggleNavBar(navigator, params) {
- //RctActivity.toggleNavigationBar({
- // hidden: params.to === 'hidden',
- // animated: !(params.animated === false)
- //});
- }
-
- function navigatorToggleTabs(navigator, params) {
- //RctActivity.toggleNavigatorTabs({
- // hidden: params.to === 'hidden',
- // animated: !(params.animated === false)
- //});
- }
-
- function showModal(params) {
- //addNavigatorParams(params);
- //addNavigatorButtons(params);
- //addNavigationStyleParams(params);
- //RctActivity.showModal(params);
- }
-
- function dismissModal() {
- //RctActivity.dismissModal();
- }
-
- function dismissAllModals(params) {
- //RctActivity.dismissAllModals(params.animationType);
- }
-
- function addNavigatorParams(screen, navigator = null, idx = '') {
- screen.navigatorID = navigator ? navigator.navigatorID : utils.getRandomId() + '_nav' + idx;
- screen.screenInstanceID = utils.getRandomId();
- screen.navigatorEventID = screen.screenInstanceID + '_events';
- }
-
- function addNavigatorButtons(screen) {
- const Screen = Navigation.getRegisteredScreen(screen.screen);
- Object.assign(screen, Screen.navigatorButtons);
-
- // Get image uri from image id
- const rightButtons = screen.navigatorButtons ? screen.navigatorButtons.rightButtons : null;
-
- if (rightButtons) {
- rightButtons.forEach(function(button) {
- if (button.icon) {
- const icon = resolveAssetSource(button.icon);
- if (icon) {
- button.icon = icon.uri;
- }
- }
- });
- }
-
- screen.titleBarButtons = rightButtons;
- }
-
- function addNavigationStyleParams(screen) {
- const Screen = Navigation.getRegisteredScreen(screen.screen);
- screen.navigatorStyle = Object.assign({}, screen.navigatorStyle, Screen.navigatorStyle);
- }
-
- function setupDrawer(drawerParams) {
- const drawer = Object.assign({}, drawerParams);
- [drawer.left, drawer.right].forEach(side => {
- if (!side) {
- return;
- }
- const icon = resolveAssetSource(side.icon);
- if (icon) {
- side.icon = icon.uri;
- }
- });
- if (drawer.disableOpenGesture === undefined) {
- drawer.disableOpenGesture = false;
- }
-
- return drawer;
- }
-
- function showFAB(params) {
- //params.icon = resolveAssetSource(params.icon).uri;
- //RctActivity.showFAB(params);
- }
-
- export default {
- startTabBasedApp,
- startSingleScreenApp,
- navigatorPush,
- navigatorPop,
- navigatorPopToRoot,
- navigatorResetTo,
- showModal,
- dismissModal,
- dismissAllModals,
- showFAB,
- navigatorSetButtons,
- navigatorSetTabBadge,
- navigatorSetTitle,
- navigatorSwitchToTab,
- navigatorToggleDrawer,
- navigatorToggleTabs,
- navigatorToggleNavBar
- };
|