Explorar el Código

Clear one time options in clearOptions

This resolves an issue where currentTabIndex, for example, was not cleared properly
if it was set in initialOptions as it was cloned each time clearOptions was invoked.
Guy Carmeli hace 7 años
padre
commit
4c48ad7c37

+ 2
- 1
lib/android/app/src/main/java/com/reactnativenavigation/parse/Options.java Ver fichero

139
         return this;
139
         return this;
140
     }
140
     }
141
 
141
 
142
-    public void clearOneTimeOptions() {
142
+    public Options clearOneTimeOptions() {
143
         bottomTabsOptions.currentTabId = new NullText();
143
         bottomTabsOptions.currentTabId = new NullText();
144
         bottomTabsOptions.currentTabIndex = new NullNumber();
144
         bottomTabsOptions.currentTabIndex = new NullNumber();
145
+        return this;
145
     }
146
     }
146
 }
147
 }

+ 1
- 1
lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/ParentController.java Ver fichero

118
 	@CallSuper
118
 	@CallSuper
119
     protected void clearOptions() {
119
     protected void clearOptions() {
120
 	    applyOnParentController(parent -> ((ParentController) parent).clearOptions());
120
 	    applyOnParentController(parent -> ((ParentController) parent).clearOptions());
121
-        options = initialOptions.copy();
121
+        options = initialOptions.copy().clearOneTimeOptions();
122
     }
122
     }
123
 
123
 
124
     public void setupTopTabsWithViewPager(ViewPager viewPager) {
124
     public void setupTopTabsWithViewPager(ViewPager viewPager) {

+ 16
- 1
lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/BottomTabsControllerTest.java Ver fichero

47
 
47
 
48
     private Activity activity;
48
     private Activity activity;
49
     private BottomTabsController uut;
49
     private BottomTabsController uut;
50
+    private Options initialOptions = new Options();
50
     private ViewController child1;
51
     private ViewController child1;
51
     private ViewController child2;
52
     private ViewController child2;
52
     private ViewController child3;
53
     private ViewController child3;
258
                 .isEqualTo(((ViewGroup.MarginLayoutParams) child6.getView().getLayoutParams()).topMargin);
259
                 .isEqualTo(((ViewGroup.MarginLayoutParams) child6.getView().getLayoutParams()).topMargin);
259
     }
260
     }
260
 
261
 
262
+    @Test
263
+    public void oneTimeOptionsAreAppliedOnce() {
264
+        initialOptions.bottomTabsOptions.currentTabIndex = new Number(1);
265
+        BottomTabsController spy = spy(createBottomTabs());
266
+        spy.onViewAppeared();
267
+
268
+        assertThat(spy.getSelectedIndex()).isOne();
269
+        spy.selectTab(0);
270
+        tabs.get(0).onViewAppeared();
271
+        verify(spy).clearOptions();
272
+        assertThat(spy.getSelectedIndex()).isZero();
273
+        assertThat(spy.options.bottomTabsOptions.currentTabIndex.hasValue()).isFalse();
274
+    }
275
+
261
     @NonNull
276
     @NonNull
262
     private List<ViewController> createTabs() {
277
     private List<ViewController> createTabs() {
263
         return Arrays.asList(child1, child2, child3, child4, child5);
278
         return Arrays.asList(child1, child2, child3, child4, child5);
282
                 eventEmitter,
297
                 eventEmitter,
283
                 imageLoaderMock,
298
                 imageLoaderMock,
284
                 "uut",
299
                 "uut",
285
-                new Options(),
300
+                initialOptions,
286
                 new OptionsPresenter(activity, new Options()),
301
                 new OptionsPresenter(activity, new Options()),
287
                 presenter,
302
                 presenter,
288
                 new BottomTabOptionsPresenter(activity, tabs, new Options())) {
303
                 new BottomTabOptionsPresenter(activity, tabs, new Options())) {