Browse Source

Clear sideMenu's visible options after applying (#4937)

* Clear sideMenu's visible options after applying

* If mergeOptions is called before a controller is attached to a parent - don’t clear one time options as they haven’t been applied yet.
Alberto Blanco 5 years ago
parent
commit
283f226f55

+ 3
- 0
lib/android/app/src/main/java/com/reactnativenavigation/parse/Options.java View File

3
 import android.support.annotation.CheckResult;
3
 import android.support.annotation.CheckResult;
4
 import android.support.annotation.NonNull;
4
 import android.support.annotation.NonNull;
5
 
5
 
6
+import com.reactnativenavigation.parse.params.NullBool;
6
 import com.reactnativenavigation.parse.params.NullNumber;
7
 import com.reactnativenavigation.parse.params.NullNumber;
7
 import com.reactnativenavigation.parse.params.NullText;
8
 import com.reactnativenavigation.parse.params.NullText;
8
 import com.reactnativenavigation.utils.TypefaceLoader;
9
 import com.reactnativenavigation.utils.TypefaceLoader;
146
     }
147
     }
147
 
148
 
148
     public Options clearOneTimeOptions() {
149
     public Options clearOneTimeOptions() {
150
+        sideMenuRootOptions.left.visible = new NullBool();
151
+        sideMenuRootOptions.right.visible = new NullBool();
149
         bottomTabsOptions.currentTabId = new NullText();
152
         bottomTabsOptions.currentTabId = new NullText();
150
         bottomTabsOptions.currentTabIndex = new NullNumber();
153
         bottomTabsOptions.currentTabIndex = new NullNumber();
151
         return this;
154
         return this;

+ 4
- 2
lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/ViewController.java View File

117
     public void mergeOptions(Options options) {
117
     public void mergeOptions(Options options) {
118
         this.initialOptions = this.initialOptions.mergeWith(options);
118
         this.initialOptions = this.initialOptions.mergeWith(options);
119
         this.options = this.options.mergeWith(options);
119
         this.options = this.options.mergeWith(options);
120
-        this.options.clearOneTimeOptions();
121
-        initialOptions.clearOneTimeOptions();
120
+        if (getParentController() != null) {
121
+            this.options.clearOneTimeOptions();
122
+            initialOptions.clearOneTimeOptions();
123
+        }
122
     }
124
     }
123
 
125
 
124
     @CallSuper
126
     @CallSuper

+ 2
- 0
lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsControllerTest.java View File

25
 import com.reactnativenavigation.utils.OptionHelper;
25
 import com.reactnativenavigation.utils.OptionHelper;
26
 import com.reactnativenavigation.utils.ViewUtils;
26
 import com.reactnativenavigation.utils.ViewUtils;
27
 import com.reactnativenavigation.viewcontrollers.ChildControllersRegistry;
27
 import com.reactnativenavigation.viewcontrollers.ChildControllersRegistry;
28
+import com.reactnativenavigation.viewcontrollers.ParentController;
28
 import com.reactnativenavigation.viewcontrollers.ViewController;
29
 import com.reactnativenavigation.viewcontrollers.ViewController;
29
 import com.reactnativenavigation.viewcontrollers.stack.StackController;
30
 import com.reactnativenavigation.viewcontrollers.stack.StackController;
30
 import com.reactnativenavigation.views.BottomTabs;
31
 import com.reactnativenavigation.views.BottomTabs;
92
         presenter = spy(new BottomTabsPresenter(tabs, new Options()));
93
         presenter = spy(new BottomTabsPresenter(tabs, new Options()));
93
         tabsAttacher = spy(new BottomTabsAttacher(tabs, presenter));
94
         tabsAttacher = spy(new BottomTabsAttacher(tabs, presenter));
94
         uut = createBottomTabs();
95
         uut = createBottomTabs();
96
+        uut.setParentController(Mockito.mock(ParentController.class));
95
         activity.setContentView(uut.getView());
97
         activity.setContentView(uut.getView());
96
     }
98
     }
97
 
99
 

+ 9
- 5
lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuControllerTest.java View File

263
     }
263
     }
264
 
264
 
265
     private void openDrawerAndAssertVisibility(ViewController side, Functions.FuncR1<ViewController, SideMenuOptions> opt) {
265
     private void openDrawerAndAssertVisibility(ViewController side, Functions.FuncR1<ViewController, SideMenuOptions> opt) {
266
-        assertThat(opt.run(side).visible.isTrue()).isFalse();
267
-        uut.onDrawerOpened(side.getView());
268
-        assertThat(opt.run(side).visible.isTrue()).isTrue();
266
+        Options options = new Options();
267
+        (side == left ? options.sideMenuRootOptions.left : options.sideMenuRootOptions.right).visible = new Bool(true);
268
+        uut.mergeOptions(options);
269
+        assertThat(uut.getView().isDrawerVisible(side.getView())).isTrue();
270
+        assertThat(opt.run(side).visible.isFalseOrUndefined()).isTrue();
269
     }
271
     }
270
 
272
 
271
     private void closeDrawerAndAssertVisibility(ViewController side, Functions.FuncR1<ViewController, SideMenuOptions> opt) {
273
     private void closeDrawerAndAssertVisibility(ViewController side, Functions.FuncR1<ViewController, SideMenuOptions> opt) {
272
-        assertThat(opt.run(side).visible.isTrue()).isTrue();
273
-        uut.onDrawerClosed(side.getView());
274
+        Options options = new Options();
275
+        (side == left ? options.sideMenuRootOptions.left : options.sideMenuRootOptions.right).visible = new Bool(false);
276
+        uut.mergeOptions(options);
277
+        assertThat(uut.getView().isDrawerVisible(side.getView())).isFalse();
274
         assertThat(opt.run(side).visible.isTrue()).isFalse();
278
         assertThat(opt.run(side).visible.isTrue()).isFalse();
275
     }
279
     }
276
 
280