Преглед на файлове

Pass react instance manager to External Component

Guy Carmeli преди 6 години
родител
ревизия
36df96990d

+ 1
- 0
lib/android/app/src/main/java/com/reactnativenavigation/parse/LayoutFactory.java Целия файл

117
                 node.id,
117
                 node.id,
118
                 externalComponent,
118
                 externalComponent,
119
                 externalComponentCreators.get(externalComponent.name.get()),
119
                 externalComponentCreators.get(externalComponent.name.get()),
120
+                reactInstanceManager,
120
                 getOptions(node)
121
                 getOptions(node)
121
         );
122
         );
122
     }
123
     }

+ 3
- 1
lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/externalcomponent/ExternalComponentCreator.java Целия файл

2
 
2
 
3
 import android.support.v4.app.FragmentActivity;
3
 import android.support.v4.app.FragmentActivity;
4
 
4
 
5
+import com.facebook.react.ReactInstanceManager;
6
+
5
 import org.json.JSONObject;
7
 import org.json.JSONObject;
6
 
8
 
7
 public interface ExternalComponentCreator {
9
 public interface ExternalComponentCreator {
8
-    ExternalComponent create(FragmentActivity activity, JSONObject props);
10
+    ExternalComponent create(FragmentActivity activity, ReactInstanceManager reactInstanceManager, JSONObject props);
9
 }
11
 }

+ 5
- 2
lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/externalcomponent/ExternalComponentViewController.java Целия файл

3
 import android.app.Activity;
3
 import android.app.Activity;
4
 import android.support.v4.app.FragmentActivity;
4
 import android.support.v4.app.FragmentActivity;
5
 
5
 
6
+import com.facebook.react.ReactInstanceManager;
6
 import com.reactnativenavigation.parse.ExternalComponent;
7
 import com.reactnativenavigation.parse.ExternalComponent;
7
 import com.reactnativenavigation.parse.Options;
8
 import com.reactnativenavigation.parse.Options;
8
 import com.reactnativenavigation.viewcontrollers.ViewController;
9
 import com.reactnativenavigation.viewcontrollers.ViewController;
11
 public class ExternalComponentViewController extends ViewController<ExternalComponentLayout> {
12
 public class ExternalComponentViewController extends ViewController<ExternalComponentLayout> {
12
     private final ExternalComponent externalComponent;
13
     private final ExternalComponent externalComponent;
13
     private final ExternalComponentCreator componentCreator;
14
     private final ExternalComponentCreator componentCreator;
15
+    private ReactInstanceManager reactInstanceManager;
14
 
16
 
15
-    public ExternalComponentViewController(Activity activity, String id, ExternalComponent externalComponent, ExternalComponentCreator componentCreator, Options initialOptions) {
17
+    public ExternalComponentViewController(Activity activity, String id, ExternalComponent externalComponent, ExternalComponentCreator componentCreator, ReactInstanceManager reactInstanceManager, Options initialOptions) {
16
         super(activity, id, initialOptions);
18
         super(activity, id, initialOptions);
17
         this.externalComponent = externalComponent;
19
         this.externalComponent = externalComponent;
18
         this.componentCreator = componentCreator;
20
         this.componentCreator = componentCreator;
21
+        this.reactInstanceManager = reactInstanceManager;
19
     }
22
     }
20
 
23
 
21
     @Override
24
     @Override
26
     @Override
29
     @Override
27
     protected ExternalComponentLayout createView() {
30
     protected ExternalComponentLayout createView() {
28
         ExternalComponentLayout content = new ExternalComponentLayout(getActivity());
31
         ExternalComponentLayout content = new ExternalComponentLayout(getActivity());
29
-        content.addView(componentCreator.create(getActivity(), externalComponent.passProps).asView());
32
+        content.addView(componentCreator.create(getActivity(), reactInstanceManager, externalComponent.passProps).asView());
30
         return content;
33
         return content;
31
     }
34
     }
32
 
35
 

+ 6
- 1
lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/ExternalComponentViewControllerTest.java Целия файл

4
 import android.support.v4.app.FragmentActivity;
4
 import android.support.v4.app.FragmentActivity;
5
 import android.widget.FrameLayout;
5
 import android.widget.FrameLayout;
6
 
6
 
7
+import com.facebook.react.ReactInstanceManager;
7
 import com.reactnativenavigation.BaseTest;
8
 import com.reactnativenavigation.BaseTest;
8
 import com.reactnativenavigation.parse.ExternalComponent;
9
 import com.reactnativenavigation.parse.ExternalComponent;
9
 import com.reactnativenavigation.parse.Options;
10
 import com.reactnativenavigation.parse.Options;
14
 
15
 
15
 import org.json.JSONObject;
16
 import org.json.JSONObject;
16
 import org.junit.Test;
17
 import org.junit.Test;
18
+import org.mockito.Mockito;
17
 
19
 
18
 import static org.assertj.core.api.Java6Assertions.assertThat;
20
 import static org.assertj.core.api.Java6Assertions.assertThat;
19
 import static org.mockito.Mockito.spy;
21
 import static org.mockito.Mockito.spy;
25
     private FragmentCreatorMock componentCreator;
27
     private FragmentCreatorMock componentCreator;
26
     private Activity activity;
28
     private Activity activity;
27
     private ExternalComponent ec;
29
     private ExternalComponent ec;
30
+    private ReactInstanceManager reactInstanceManager;
28
 
31
 
29
     @Override
32
     @Override
30
     public void beforeEach() {
33
     public void beforeEach() {
31
         componentCreator = spy(new FragmentCreatorMock());
34
         componentCreator = spy(new FragmentCreatorMock());
32
         activity = newActivity();
35
         activity = newActivity();
33
         ec = createExternalComponent();
36
         ec = createExternalComponent();
37
+        reactInstanceManager = Mockito.mock(ReactInstanceManager.class);
34
         uut = spy(new ExternalComponentViewController(activity,
38
         uut = spy(new ExternalComponentViewController(activity,
35
                 "fragmentId",
39
                 "fragmentId",
36
                 ec,
40
                 ec,
37
                 componentCreator,
41
                 componentCreator,
42
+                reactInstanceManager,
38
                 new Options())
43
                 new Options())
39
         );
44
         );
40
     }
45
     }
55
     @Test
60
     @Test
56
     public void createView_createsExternalComponent() throws Exception {
61
     public void createView_createsExternalComponent() throws Exception {
57
         ExternalComponentLayout view = uut.getView();
62
         ExternalComponentLayout view = uut.getView();
58
-        verify(componentCreator, times(1)).create((FragmentActivity) activity, ec.passProps);
63
+        verify(componentCreator, times(1)).create((FragmentActivity) activity, reactInstanceManager, ec.passProps);
59
         assertThat(view.getChildCount()).isGreaterThan(0);
64
         assertThat(view.getChildCount()).isGreaterThan(0);
60
     }
65
     }
61
 }
66
 }

+ 2
- 1
lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/externalcomponent/FragmentCreatorMock.java Целия файл

6
 import android.support.v4.app.FragmentActivity;
6
 import android.support.v4.app.FragmentActivity;
7
 import android.widget.FrameLayout;
7
 import android.widget.FrameLayout;
8
 
8
 
9
+import com.facebook.react.ReactInstanceManager;
9
 import com.reactnativenavigation.R;
10
 import com.reactnativenavigation.R;
10
 
11
 
11
 import org.json.JSONObject;
12
 import org.json.JSONObject;
12
 
13
 
13
 public class FragmentCreatorMock implements ExternalComponentCreator {
14
 public class FragmentCreatorMock implements ExternalComponentCreator {
14
     @Override
15
     @Override
15
-    public ExternalComponent create(FragmentActivity activity, JSONObject props) {
16
+    public ExternalComponent create(FragmentActivity activity, ReactInstanceManager reactInstanceManager, JSONObject props) {
16
         return createContent(activity);
17
         return createContent(activity);
17
     }
18
     }
18
 
19
 

+ 2
- 1
playground/android/app/src/main/java/com/reactnativenavigation/playground/FragmentCreator.java Целия файл

2
 
2
 
3
 import android.support.v4.app.FragmentActivity;
3
 import android.support.v4.app.FragmentActivity;
4
 
4
 
5
+import com.facebook.react.ReactInstanceManager;
5
 import com.reactnativenavigation.viewcontrollers.externalcomponent.ExternalComponent;
6
 import com.reactnativenavigation.viewcontrollers.externalcomponent.ExternalComponent;
6
 import com.reactnativenavigation.viewcontrollers.externalcomponent.ExternalComponentCreator;
7
 import com.reactnativenavigation.viewcontrollers.externalcomponent.ExternalComponentCreator;
7
 
8
 
9
 
10
 
10
 public class FragmentCreator implements ExternalComponentCreator {
11
 public class FragmentCreator implements ExternalComponentCreator {
11
     @Override
12
     @Override
12
-    public ExternalComponent create(FragmentActivity activity, JSONObject props) {
13
+    public ExternalComponent create(FragmentActivity activity, ReactInstanceManager reactInstanceManager, JSONObject props) {
13
         return new FragmentComponent(activity, props);
14
         return new FragmentComponent(activity, props);
14
     }
15
     }
15
 }
16
 }