Browse Source

pop specific

Daniel Zlotin 7 years ago
parent
commit
78ad32424c

+ 1
- 1
lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java View File

@@ -59,7 +59,7 @@ public class NavigationModule extends ReactContextBaseJavaModule {
59 59
 		handle(new Runnable() {
60 60
 			@Override
61 61
 			public void run() {
62
-				navigator().pop(onContainerId);
62
+				navigator().popSpecific(onContainerId);
63 63
 			}
64 64
 		});
65 65
 	}

+ 11
- 1
lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/Navigator.java View File

@@ -80,7 +80,17 @@ public class Navigator extends ParentController {
80 80
 		if (from != null) {
81 81
 			StackController parentStackController = from.getParentStackController();
82 82
 			if (parentStackController != null) {
83
-				parentStackController.pop(from);
83
+				parentStackController.pop();
84
+			}
85
+		}
86
+	}
87
+
88
+	public void popSpecific(final String id) {
89
+		ViewController from = findControllerById(id);
90
+		if (from != null) {
91
+			StackController parentStackController = from.getParentStackController();
92
+			if (parentStackController != null) {
93
+				parentStackController.popSpecific(from);
84 94
 			}
85 95
 		}
86 96
 	}

+ 1
- 1
lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/StackController.java View File

@@ -42,7 +42,7 @@ public class StackController extends ParentController {
42 42
 		getView().addView(previousTop.getView());
43 43
 	}
44 44
 
45
-	public void pop(final ViewController childController) {
45
+	public void popSpecific(final ViewController childController) {
46 46
 		if (stack.isTop(childController.getId())) {
47 47
 			pop();
48 48
 		} else {

+ 18
- 0
lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/NavigatorTest.java View File

@@ -132,6 +132,24 @@ public class NavigatorTest extends BaseTest {
132 132
 		assertThat(stack2.getChildControllers()).containsOnly(child2, child3);
133 133
 	}
134 134
 
135
+	@Test
136
+	public void popSpecific() throws Exception {
137
+		BottomTabsController bottomTabsController = new BottomTabsController(activity, "tabsController");
138
+		StackController stack1 = new StackController(activity, "stack1");
139
+		StackController stack2 = new StackController(activity, "stack2");
140
+		stack1.push(child1);
141
+		stack2.push(child2);
142
+		stack2.push(child3);
143
+		SimpleViewController child4 = new SimpleViewController(activity, "child4");
144
+		stack2.push(child4);
145
+		bottomTabsController.setTabs(Arrays.<ViewController>asList(stack1, stack2));
146
+		uut.setRoot(bottomTabsController);
147
+
148
+		uut.popSpecific(child2.getId());
149
+
150
+		assertThat(stack2.getChildControllers()).containsOnly(child4, child3);
151
+	}
152
+
135 153
 	@Test
136 154
 	public void popTo_FromCorrectStackUpToChild() throws Exception {
137 155
 		BottomTabsController bottomTabsController = new BottomTabsController(activity, "tabsController");

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

@@ -158,7 +158,7 @@ public class StackControllerTest extends BaseTest {
158 158
 	public void popSpecificWhenTopIsRegularPop() throws Exception {
159 159
 		uut.push(child1);
160 160
 		uut.push(child2);
161
-		uut.pop(child2);
161
+		uut.popSpecific(child2);
162 162
 		assertContainsOnlyId(child1.getId());
163 163
 		assertHasSingleChildViewOfController(child1);
164 164
 	}
@@ -169,7 +169,7 @@ public class StackControllerTest extends BaseTest {
169 169
 		uut.push(child2);
170 170
 		assertHasSingleChildViewOfController(child2);
171 171
 
172
-		uut.pop(child1);
172
+		uut.popSpecific(child1);
173 173
 		assertContainsOnlyId(child2.getId());
174 174
 		assertHasSingleChildViewOfController(child2);
175 175
 	}