Skip to content

Commit

Permalink
Consume currentTabId and currentTabIndex after they are applied (#6169)
Browse files Browse the repository at this point in the history
If currentTabId or currentTabIndex were declared in default options - the specified tab was reselected each time options were applied.

Co-authored-by: Yogev Ben David <[email protected]>
  • Loading branch information
guyca and yogevbd authored Apr 28, 2020
1 parent 3828b51 commit 3e5be29
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -124,12 +124,18 @@ private void applyBottomTabsOptions(Options options) {
bottomTabs.setBackgroundColor(bottomTabsOptions.backgroundColor.get(Color.WHITE));
if (bottomTabsOptions.currentTabIndex.hasValue()) {
int tabIndex = bottomTabsOptions.currentTabIndex.get();
if (tabIndex >= 0) tabSelector.selectTab(tabIndex);
if (tabIndex >= 0) {
bottomTabsOptions.currentTabIndex.consume();
tabSelector.selectTab(tabIndex);
}
}
if (bottomTabsOptions.testId.hasValue()) bottomTabs.setTag(bottomTabsOptions.testId.get());
if (bottomTabsOptions.currentTabId.hasValue()) {
int tabIndex = bottomTabFinder.findByControllerId(bottomTabsOptions.currentTabId.get());
if (tabIndex >= 0) tabSelector.selectTab(tabIndex);
if (tabIndex >= 0) {
bottomTabsOptions.currentTabId.consume();
tabSelector.selectTab(tabIndex);
}
}
if (bottomTabsOptions.visible.isTrueOrUndefined()) {
if (bottomTabsOptions.animate.isTrueOrUndefined()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import com.reactnativenavigation.parse.Options;
import com.reactnativenavigation.parse.params.Bool;
import com.reactnativenavigation.parse.params.Colour;
import com.reactnativenavigation.parse.params.Number;
import com.reactnativenavigation.parse.params.Text;
import com.reactnativenavigation.presentation.BottomTabsPresenter;
import com.reactnativenavigation.viewcontrollers.bottomtabs.TabSelector;
import com.reactnativenavigation.views.BottomTabs;
Expand All @@ -20,6 +22,7 @@

import static org.assertj.core.api.Java6Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
Expand All @@ -30,6 +33,7 @@ public class BottomTabsPresenterTest extends BaseTest {
private BottomTabsPresenter uut;
private BottomTabs bottomTabs;
private BottomTabsAnimator animator;
private TabSelector tabSelector;

@Override
public void beforeEach() {
Expand All @@ -41,7 +45,8 @@ public void beforeEach() {
uut = new BottomTabsPresenter(tabs, new Options());
bottomTabs = Mockito.mock(BottomTabs.class);
animator = spy(new BottomTabsAnimator(bottomTabs));
uut.bindView(bottomTabs, Mockito.mock(TabSelector.class), animator);
tabSelector = mock(TabSelector.class);
uut.bindView(bottomTabs, tabSelector, animator);
}

@Test
Expand Down Expand Up @@ -71,4 +76,30 @@ public void mergeChildOptions_visibilityIsAppliedOnlyIsChildIsShown() {
uut.mergeChildOptions(options, tabs.get(0));
verify(animator).hide(any());
}

@Test
public void applyChildOptions_currentTabIndexIsConsumedAfterApply() {
Options defaultOptions = new Options();
defaultOptions.bottomTabsOptions.currentTabIndex = new Number(1);
uut.setDefaultOptions(defaultOptions);

uut.applyChildOptions(Options.EMPTY, tabs.get(0));
verify(tabSelector).selectTab(1);

uut.applyChildOptions(Options.EMPTY, tabs.get(0));
verifyNoMoreInteractions(tabSelector);
}

@Test
public void applyChildOptions_currentTabIdIsConsumedAfterApply() {
Options defaultOptions = new Options();
defaultOptions.bottomTabsOptions.currentTabId = new Text(tabs.get(1).getId());
uut.setDefaultOptions(defaultOptions);

uut.applyChildOptions(Options.EMPTY, tabs.get(0));
verify(tabSelector).selectTab(1);

uut.applyChildOptions(Options.EMPTY, tabs.get(0));
verifyNoMoreInteractions(tabSelector);
}
}

0 comments on commit 3e5be29

Please sign in to comment.