Skip to content

Commit

Permalink
Clear sideMenu's visible options after applying (#4937)
Browse files Browse the repository at this point in the history
* 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.
  • Loading branch information
ItsNoHax authored and guyca committed Apr 3, 2019
1 parent 9126ced commit 283f226
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import android.support.annotation.CheckResult;
import android.support.annotation.NonNull;

import com.reactnativenavigation.parse.params.NullBool;
import com.reactnativenavigation.parse.params.NullNumber;
import com.reactnativenavigation.parse.params.NullText;
import com.reactnativenavigation.utils.TypefaceLoader;
Expand Down Expand Up @@ -146,6 +147,8 @@ public Options clearFabOptions() {
}

public Options clearOneTimeOptions() {
sideMenuRootOptions.left.visible = new NullBool();
sideMenuRootOptions.right.visible = new NullBool();
bottomTabsOptions.currentTabId = new NullText();
bottomTabsOptions.currentTabIndex = new NullNumber();
return this;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,10 @@ public Options resolveCurrentOptions(Options defaultOptions) {
public void mergeOptions(Options options) {
this.initialOptions = this.initialOptions.mergeWith(options);
this.options = this.options.mergeWith(options);
this.options.clearOneTimeOptions();
initialOptions.clearOneTimeOptions();
if (getParentController() != null) {
this.options.clearOneTimeOptions();
initialOptions.clearOneTimeOptions();
}
}

@CallSuper
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import com.reactnativenavigation.utils.OptionHelper;
import com.reactnativenavigation.utils.ViewUtils;
import com.reactnativenavigation.viewcontrollers.ChildControllersRegistry;
import com.reactnativenavigation.viewcontrollers.ParentController;
import com.reactnativenavigation.viewcontrollers.ViewController;
import com.reactnativenavigation.viewcontrollers.stack.StackController;
import com.reactnativenavigation.views.BottomTabs;
Expand Down Expand Up @@ -92,6 +93,7 @@ public void superCreateItems() {
presenter = spy(new BottomTabsPresenter(tabs, new Options()));
tabsAttacher = spy(new BottomTabsAttacher(tabs, presenter));
uut = createBottomTabs();
uut.setParentController(Mockito.mock(ParentController.class));
activity.setContentView(uut.getView());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -263,14 +263,18 @@ public void onDrawerOpened_drawerOpenedWIthSwipe_visibilityIsUpdated() {
}

private void openDrawerAndAssertVisibility(ViewController side, Functions.FuncR1<ViewController, SideMenuOptions> opt) {
assertThat(opt.run(side).visible.isTrue()).isFalse();
uut.onDrawerOpened(side.getView());
assertThat(opt.run(side).visible.isTrue()).isTrue();
Options options = new Options();
(side == left ? options.sideMenuRootOptions.left : options.sideMenuRootOptions.right).visible = new Bool(true);
uut.mergeOptions(options);
assertThat(uut.getView().isDrawerVisible(side.getView())).isTrue();
assertThat(opt.run(side).visible.isFalseOrUndefined()).isTrue();
}

private void closeDrawerAndAssertVisibility(ViewController side, Functions.FuncR1<ViewController, SideMenuOptions> opt) {
assertThat(opt.run(side).visible.isTrue()).isTrue();
uut.onDrawerClosed(side.getView());
Options options = new Options();
(side == left ? options.sideMenuRootOptions.left : options.sideMenuRootOptions.right).visible = new Bool(false);
uut.mergeOptions(options);
assertThat(uut.getView().isDrawerVisible(side.getView())).isFalse();
assertThat(opt.run(side).visible.isTrue()).isFalse();
}

Expand Down

0 comments on commit 283f226

Please sign in to comment.