Sfoglia il codice sorgente

Merge branch 'switchToTab' of github.com:wix/react-native-navigation into switchToTab

Guy Carmeli 8 anni fa
parent
commit
972185fbf2

+ 2
- 1
android/app/src/main/java/com/reactnativenavigation/bridge/NavigationReactModule.java Vedi File

76
     }
76
     }
77
 
77
 
78
     @ReactMethod
78
     @ReactMethod
79
-    public void selectBottomTab(final ReadableMap params) {
79
+    public void selectBottomTab(String navigatorId, Integer index) {
80
+        NavigationCommandsHandler.selectBottomTab(navigatorId, index);
80
     }
81
     }
81
 
82
 
82
     @ReactMethod
83
     @ReactMethod

+ 6
- 0
android/app/src/main/java/com/reactnativenavigation/controllers/NavigationActivity.java Vedi File

212
     public void setSideMenuVisible(boolean animated, boolean visible) {
212
     public void setSideMenuVisible(boolean animated, boolean visible) {
213
         layout.setSideMenuVisible(animated, visible);
213
         layout.setSideMenuVisible(animated, visible);
214
     }
214
     }
215
+
216
+    public void selectBottomTab(String navigatorId, Integer index) {
217
+        if (layout instanceof BottomTabsLayout) {
218
+            ((BottomTabsLayout) layout).selectBottomTab(navigatorId, index);
219
+        }
220
+    }
215
 }
221
 }

+ 14
- 0
android/app/src/main/java/com/reactnativenavigation/controllers/NavigationCommandsHandler.java Vedi File

238
             }
238
             }
239
         });
239
         });
240
     }
240
     }
241
+
242
+    public static void selectBottomTab(final String navigatorId, final Integer index) {
243
+        final NavigationActivity currentActivity = NavigationActivity.currentActivity;
244
+        if (currentActivity == null) {
245
+            return;
246
+        }
247
+
248
+        NavigationApplication.instance.runOnMainThread(new Runnable() {
249
+            @Override
250
+            public void run() {
251
+                currentActivity.selectBottomTab(navigatorId, index);
252
+            }
253
+        });
254
+    }
241
 }
255
 }

+ 25
- 12
android/app/src/main/java/com/reactnativenavigation/layouts/BottomTabsLayout.java Vedi File

164
         }
164
         }
165
     }
165
     }
166
 
166
 
167
+    public void selectBottomTab(String navigatorId, Integer index) {
168
+        if (index != null) {
169
+            bottomTabs.setCurrentItem(index);
170
+        } else {
171
+            bottomTabs.setCurrentItem(getScreenStackIndex(navigatorId));
172
+        }
173
+    }
174
+
167
     @Override
175
     @Override
168
     public void push(ScreenParams screenParams) {
176
     public void push(ScreenParams screenParams) {
169
         ScreenStack screenStack = getScreenStack(screenParams.getNavigatorId());
177
         ScreenStack screenStack = getScreenStack(screenParams.getNavigatorId());
170
-        if (screenStack == null) {
171
-            return;
172
-        }
173
-
178
+        screenStack.push(screenParams, createScreenLayoutParams(screenParams));
174
         if (isCurrentStack(screenStack)) {
179
         if (isCurrentStack(screenStack)) {
175
-            screenStack.push(screenParams, createScreenLayoutParams(screenParams));
176
             bottomTabs.setStyleFromScreen(screenParams.styleParams);
180
             bottomTabs.setStyleFromScreen(screenParams.styleParams);
177
-        } else {
178
-            screenStack.push(screenParams, createScreenLayoutParams(screenParams));
179
         }
181
         }
180
     }
182
     }
181
 
183
 
245
         return screenStacks[currentStackIndex];
247
         return screenStacks[currentStackIndex];
246
     }
248
     }
247
 
249
 
248
-    private @Nullable ScreenStack getScreenStack(String navigatorId) {
249
-        for (ScreenStack screenStack : screenStacks) {
250
-            if (screenStack.getNavigatorId().equals(navigatorId)) {
251
-                return screenStack;
250
+    private @NonNull ScreenStack getScreenStack(String navigatorId) {
251
+        int index = getScreenStackIndex(navigatorId);
252
+        return screenStacks[index];
253
+    }
254
+
255
+    private int getScreenStackIndex(String navigatorId) throws ScreenStackNotFoundException {
256
+        for (int i = 0; i < screenStacks.length; i++) {
257
+            if (screenStacks[i].getNavigatorId().equals(navigatorId)) {
258
+                return i;
252
             }
259
             }
253
         }
260
         }
254
-        return null;
261
+        throw new ScreenStackNotFoundException("Stack " + navigatorId + " not found");
262
+    }
263
+
264
+    private class ScreenStackNotFoundException extends RuntimeException {
265
+        public ScreenStackNotFoundException(String navigatorId) {
266
+            super(navigatorId);
267
+        }
255
     }
268
     }
256
 
269
 
257
     private boolean isCurrentStack(ScreenStack screenStack) {
270
     private boolean isCurrentStack(ScreenStack screenStack) {

+ 3
- 1
example-redux/src/screens/SecondTabScreen.js Vedi File

65
   }
65
   }
66
 
66
 
67
   onSelectFirstTabPress() {
67
   onSelectFirstTabPress() {
68
-    this.props.navigator.switchToTab()
68
+    this.props.navigator.switchToTab({
69
+      tabIndex: 0
70
+    })
69
   }
71
   }
70
 
72
 
71
   onSetButton() {
73
   onSetButton() {

+ 1
- 4
src/deprecated/platformSpecificDeprecated.android.js Vedi File

243
 }
243
 }
244
 
244
 
245
 function navigatorSwitchToTab(navigator, params) {
245
 function navigatorSwitchToTab(navigator, params) {
246
-  //RctActivity.switchToTab({
247
-  //  navigatorID: navigator.navigatorID,
248
-  //  tabIndex: params.tabIndex
249
-  //});
246
+  newPlatformSpecific.selectBottomTab(navigator.navigatorID, params.tabIndex);
250
 }
247
 }
251
 
248
 
252
 function navigatorToggleDrawer(navigator, params) {
249
 function navigatorToggleDrawer(navigator, params) {

+ 6
- 1
src/platformSpecific.android.js Vedi File

92
   NativeReactModule.setSideMenuVisible(animated, visible);
92
   NativeReactModule.setSideMenuVisible(animated, visible);
93
 }
93
 }
94
 
94
 
95
+function selectBottomTab(navigatorId, index) {
96
+  NativeReactModule.selectBottomTab(navigatorId, index);
97
+}
98
+
95
 module.exports = {
99
 module.exports = {
96
   startApp,
100
   startApp,
97
   push,
101
   push,
106
   dismissTopModal,
110
   dismissTopModal,
107
   dismissAllModals,
111
   dismissAllModals,
108
   toggleSideMenuVisible,
112
   toggleSideMenuVisible,
109
-  setSideMenuVisible
113
+  setSideMenuVisible,
114
+  selectBottomTab
110
 };
115
 };