ソースを参照

support dismissModal by id

Ran Greenberg 8 年 前
コミット
dc5ffecad7
共有3 個のファイルを変更した24 個の追加7 個の削除を含む
  1. 9
    7
      ios/RNNBridgeModule.m
  2. 9
    0
      playground/e2e/app.test.js
  3. 6
    0
      playground/src/containers/ModalScreen.js

+ 9
- 7
ios/RNNBridgeModule.m ファイルの表示

61
 
61
 
62
 RCT_EXPORT_METHOD(dismissModal:(NSString*)containerId)
62
 RCT_EXPORT_METHOD(dismissModal:(NSString*)containerId)
63
 {
63
 {
64
-	UIViewController *root = UIApplication.sharedApplication.delegate.window.rootViewController;
65
-	while(root.presentedViewController) {
66
-		root = root.presentedViewController;
67
-	}
68
-
64
+	UIViewController *root = [[RNN instance].store findContainerForId:containerId];
69
 	
65
 	
70
-	[root dismissViewControllerAnimated:YES completion:^{
66
+	//	while(root.presentedViewController) {
67
+	//		root = root.presentedViewController;
68
+	//	}
69
+	if (root) {
71
 		
70
 		
72
-	}];
71
+		[root dismissViewControllerAnimated:YES completion:^{
72
+			
73
+		}];
74
+	}
73
 }
75
 }
74
 
76
 
75
 - (void)assertReady
77
 - (void)assertReady

+ 9
- 0
playground/e2e/app.test.js ファイルの表示

61
     elementByLabel('Dismiss Modal').tap();
61
     elementByLabel('Dismiss Modal').tap();
62
     expect(elementByLabel('React Native Navigation!')).toBeVisible();
62
     expect(elementByLabel('React Native Navigation!')).toBeVisible();
63
   });
63
   });
64
+  
65
+  it('dismiss unknown screen id', () => {
66
+    elementByLabel('Show Modal').tap();
67
+    expect(elementByLabel('Modal Stack Position: 1')).toBeVisible();
68
+    elementByLabel('Dismiss Unknown Modal').tap();
69
+    expect(elementByLabel('Modal Stack Position: 1')).toBeVisible();
70
+    elementByLabel('Dismiss Modal').tap();
71
+    expect(elementByLabel('React Native Navigation!')).toBeVisible();
72
+  });
64
 
73
 
65
   xit('dismiss modal by id', () => {
74
   xit('dismiss modal by id', () => {
66
     elementByLabel('Show Modal').tap();
75
     elementByLabel('Show Modal').tap();

+ 6
- 0
playground/src/containers/ModalScreen.js ファイルの表示

14
     this.onClickShowModal = this.onClickShowModal.bind(this);
14
     this.onClickShowModal = this.onClickShowModal.bind(this);
15
     this.onClickDismissModal = this.onClickDismissModal.bind(this);
15
     this.onClickDismissModal = this.onClickDismissModal.bind(this);
16
     this.onClickDismissPreviousModal = this.onClickDismissPreviousModal.bind(this);
16
     this.onClickDismissPreviousModal = this.onClickDismissPreviousModal.bind(this);
17
+    this.onClickDismissUnknownModal = this.onClickDismissUnknownModal.bind(this);
17
   }
18
   }
18
   render() {
19
   render() {
19
     return (
20
     return (
22
         <Text style={styles.footer}>{`Modal Stack Position: ${this.getModalPosition()}`}</Text>
23
         <Text style={styles.footer}>{`Modal Stack Position: ${this.getModalPosition()}`}</Text>
23
         <Button title="Show Modal" onPress={this.onClickShowModal} />
24
         <Button title="Show Modal" onPress={this.onClickShowModal} />
24
         <Button title="Dismiss Modal" onPress={this.onClickDismissModal} />
25
         <Button title="Dismiss Modal" onPress={this.onClickDismissModal} />
26
+        <Button title="Dismiss Unknown Modal" onPress={this.onClickDismissUnknownModal} />
25
         {this.props.previousModalId ? (<Button title="Dismiss Previous Modal" onPress={this.onClickDismissPreviousModal} />) : undefined}
27
         {this.props.previousModalId ? (<Button title="Dismiss Previous Modal" onPress={this.onClickDismissPreviousModal} />) : undefined}
26
         <Text style={styles.footer}>{`this.props.id = ${this.props.id}`}</Text>
28
         <Text style={styles.footer}>{`this.props.id = ${this.props.id}`}</Text>
29
+        
27
       </View>
30
       </View>
28
     );
31
     );
29
   }
32
   }
45
   onClickDismissPreviousModal() {
48
   onClickDismissPreviousModal() {
46
     Navigation.dismissModal(this.props.previousModalId);
49
     Navigation.dismissModal(this.props.previousModalId);
47
   }
50
   }
51
+  onClickDismissUnknownModal() {
52
+    Navigation.dismissModal('unknown');
53
+  }
48
 
54
 
49
   getModalPosition() {
55
   getModalPosition() {
50
     return (this.props.modalPosition || 1);
56
     return (this.props.modalPosition || 1);