Ver código fonte

Parse externalComponent options

Guy Carmeli 7 anos atrás
pai
commit
5d9571459b

+ 38
- 0
lib/android/app/src/main/java/com/reactnativenavigation/parse/ExternalComponent.java Ver arquivo

1
+package com.reactnativenavigation.parse;
2
+
3
+import com.reactnativenavigation.parse.params.NullText;
4
+import com.reactnativenavigation.parse.params.Text;
5
+import com.reactnativenavigation.parse.parsers.TextParser;
6
+
7
+import org.json.JSONObject;
8
+
9
+public class ExternalComponent {
10
+
11
+    public Text classCreator = new NullText();
12
+
13
+    public static ExternalComponent parse(JSONObject json) {
14
+        ExternalComponent options = new ExternalComponent();
15
+        if (json == null) {
16
+            return options;
17
+        }
18
+
19
+        options.classCreator = TextParser.parse(json, "classCreator");
20
+        if (!options.classCreator.hasValue()) {
21
+            throw new RuntimeException("ExternalClass must declare classCreator - a fully qualified method name");
22
+        }
23
+
24
+        return options;
25
+    }
26
+
27
+    public void mergeWith(ExternalComponent other) {
28
+        if (other.classCreator.hasValue()) {
29
+            classCreator = other.classCreator;
30
+        }
31
+    }
32
+
33
+    public void mergeWithDefault(ExternalComponent defaultOptions) {
34
+        if (!classCreator.hasValue()) {
35
+            classCreator = defaultOptions.classCreator;
36
+        }
37
+    }
38
+}

+ 5
- 0
lib/android/app/src/main/java/com/reactnativenavigation/parse/Options.java Ver arquivo

29
         result.fabOptions = FabOptions.parse(json.optJSONObject("fab"));
29
         result.fabOptions = FabOptions.parse(json.optJSONObject("fab"));
30
         result.animationsOptions = AnimationsOptions.parse(json.optJSONObject("animations"));
30
         result.animationsOptions = AnimationsOptions.parse(json.optJSONObject("animations"));
31
         result.sideMenuRootOptions = SideMenuRootOptions.parse(json.optJSONObject("sideMenu"));
31
         result.sideMenuRootOptions = SideMenuRootOptions.parse(json.optJSONObject("sideMenu"));
32
+        result.externalComponent = ExternalComponent.parse(json.optJSONObject("externalComponent"));
32
 
33
 
33
         return result.withDefaultOptions(defaultOptions);
34
         return result.withDefaultOptions(defaultOptions);
34
     }
35
     }
43
     @NonNull public FabOptions fabOptions = new FabOptions();
44
     @NonNull public FabOptions fabOptions = new FabOptions();
44
     @NonNull public AnimationsOptions animationsOptions = new AnimationsOptions();
45
     @NonNull public AnimationsOptions animationsOptions = new AnimationsOptions();
45
     @NonNull public SideMenuRootOptions sideMenuRootOptions = new SideMenuRootOptions();
46
     @NonNull public SideMenuRootOptions sideMenuRootOptions = new SideMenuRootOptions();
47
+    @NonNull public ExternalComponent externalComponent = new ExternalComponent();
46
 
48
 
47
     void setTopTabIndex(int i) {
49
     void setTopTabIndex(int i) {
48
         topTabOptions.tabIndex = i;
50
         topTabOptions.tabIndex = i;
61
         result.fabOptions.mergeWith(fabOptions);
63
         result.fabOptions.mergeWith(fabOptions);
62
         result.animationsOptions.mergeWith(animationsOptions);
64
         result.animationsOptions.mergeWith(animationsOptions);
63
         result.sideMenuRootOptions.mergeWith(sideMenuRootOptions);
65
         result.sideMenuRootOptions.mergeWith(sideMenuRootOptions);
66
+        result.externalComponent.mergeWith(externalComponent);
64
         return result;
67
         return result;
65
     }
68
     }
66
 
69
 
76
         result.fabOptions.mergeWith(other.fabOptions);
79
         result.fabOptions.mergeWith(other.fabOptions);
77
         result.animationsOptions.mergeWith(other.animationsOptions);
80
         result.animationsOptions.mergeWith(other.animationsOptions);
78
         result.sideMenuRootOptions.mergeWith(other.sideMenuRootOptions);
81
         result.sideMenuRootOptions.mergeWith(other.sideMenuRootOptions);
82
+        result.externalComponent.mergeWith(other.externalComponent);
79
         return result;
83
         return result;
80
     }
84
     }
81
 
85
 
89
         fabOptions.mergeWithDefault(other.fabOptions);
93
         fabOptions.mergeWithDefault(other.fabOptions);
90
         animationsOptions.mergeWithDefault(other.animationsOptions);
94
         animationsOptions.mergeWithDefault(other.animationsOptions);
91
         sideMenuRootOptions.mergeWithDefault(other.sideMenuRootOptions);
95
         sideMenuRootOptions.mergeWithDefault(other.sideMenuRootOptions);
96
+        externalComponent.mergeWithDefault(other.externalComponent);
92
         return this;
97
         return this;
93
     }
98
     }
94
 
99
 

+ 19
- 5
lib/android/app/src/test/java/com/reactnativenavigation/parse/OptionsTest.java Ver arquivo

39
     private static final String BOTTOM_TABS_BADGE = "3";
39
     private static final String BOTTOM_TABS_BADGE = "3";
40
     private static final String BOTTOM_TABS_CURRENT_TAB_ID = "ComponentId";
40
     private static final String BOTTOM_TABS_CURRENT_TAB_ID = "ComponentId";
41
     private static final Number BOTTOM_TABS_CURRENT_TAB_INDEX = new Number(1);
41
     private static final Number BOTTOM_TABS_CURRENT_TAB_INDEX = new Number(1);
42
+    private static final String EXTERNAL_CLASS_CREATOR = "com.rnn.creators.Creator.createFragment";
42
     private TypefaceLoader mockLoader;
43
     private TypefaceLoader mockLoader;
43
 
44
 
44
     @Override
45
     @Override
57
         JSONObject json = new JSONObject()
58
         JSONObject json = new JSONObject()
58
                 .put("topBar", createTopBar(TOP_BAR_VISIBLE.get()))
59
                 .put("topBar", createTopBar(TOP_BAR_VISIBLE.get()))
59
                 .put("fab", createFab())
60
                 .put("fab", createFab())
61
+                .put("externalComponent", createExternalComponent())
60
                 .put("bottomTabs", createBottomTabs());
62
                 .put("bottomTabs", createBottomTabs());
61
         Options result = Options.parse(mockLoader, json);
63
         Options result = Options.parse(mockLoader, json);
62
         assertResult(result);
64
         assertResult(result);
83
         assertThat(result.fabOptions.hideOnScroll.get()).isEqualTo(FAB_HIDE_ON_SCROLL);
85
         assertThat(result.fabOptions.hideOnScroll.get()).isEqualTo(FAB_HIDE_ON_SCROLL);
84
         assertThat(result.fabOptions.alignVertically.get()).isEqualTo(FAB_ALIGN_VERTICALLY);
86
         assertThat(result.fabOptions.alignVertically.get()).isEqualTo(FAB_ALIGN_VERTICALLY);
85
         assertThat(result.fabOptions.alignHorizontally.get()).isEqualTo(FAB_ALIGN_HORIZONTALLY);
87
         assertThat(result.fabOptions.alignHorizontally.get()).isEqualTo(FAB_ALIGN_HORIZONTALLY);
88
+        assertThat(result.externalComponent.classCreator.get()).isEqualTo(EXTERNAL_CLASS_CREATOR);
86
     }
89
     }
87
 
90
 
88
     @NonNull
91
     @NonNull
120
                 .put("visible", FAB_VISIBLE);
123
                 .put("visible", FAB_VISIBLE);
121
     }
124
     }
122
 
125
 
126
+    private JSONObject createExternalComponent() throws JSONException {
127
+        return new JSONObject()
128
+                .put("classCreator", EXTERNAL_CLASS_CREATOR);
129
+    }
130
+
123
     @NonNull
131
     @NonNull
124
     private JSONObject createOtherFab() throws JSONException {
132
     private JSONObject createOtherFab() throws JSONException {
125
         return new JSONObject()
133
         return new JSONObject()
154
                 .put("tabBadge", BOTTOM_TABS_BADGE);
162
                 .put("tabBadge", BOTTOM_TABS_BADGE);
155
     }
163
     }
156
 
164
 
165
+    private JSONObject createOtherExternalClass() {
166
+        return new JSONObject();
167
+    }
168
+
157
     @Test
169
     @Test
158
     public void mergeDoesNotMutate() throws Exception {
170
     public void mergeDoesNotMutate() throws Exception {
159
         JSONObject json1 = new JSONObject();
171
         JSONObject json1 = new JSONObject();
174
 
186
 
175
     @Test
187
     @Test
176
     public void mergeDefaultOptions() throws Exception {
188
     public void mergeDefaultOptions() throws Exception {
177
-        JSONObject json = new JSONObject();
178
-        json.put("topBar", createTopBar(TOP_BAR_VISIBLE.get()));
179
-        json.put("fab", createFab());
180
-        json.put("bottomTabs", createBottomTabs());
189
+        JSONObject json = new JSONObject()
190
+                .put("topBar", createTopBar(TOP_BAR_VISIBLE.get()))
191
+                .put("fab", createFab())
192
+                .put("bottomTabs", createBottomTabs())
193
+                .put("externalComponent", createExternalComponent());
181
         Options defaultOptions = Options.parse(mockLoader, json);
194
         Options defaultOptions = Options.parse(mockLoader, json);
182
         Options options = new Options();
195
         Options options = new Options();
183
 
196
 
189
         JSONObject defaultJson = new JSONObject()
202
         JSONObject defaultJson = new JSONObject()
190
                 .put("topBar", createOtherTopBar())
203
                 .put("topBar", createOtherTopBar())
191
                 .put("fab", createOtherFab())
204
                 .put("fab", createOtherFab())
192
-                .put("bottomTabs", createOtherBottomTabs());
205
+                .put("bottomTabs", createOtherBottomTabs())
206
+                .put("externalComponent", createExternalComponent());
193
         Options defaultOptions = Options.parse(mockLoader, defaultJson);
207
         Options defaultOptions = Options.parse(mockLoader, defaultJson);
194
 
208
 
195
         JSONObject json = new JSONObject()
209
         JSONObject json = new JSONObject()