@robylon/react-native-sdk 2.2.1-staging.1 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +57 -0
- package/lib/commonjs/config.js +1 -1
- package/lib/commonjs/config.js.map +1 -1
- package/lib/commonjs/constants.js +1 -1
- package/lib/commonjs/constants.js.map +1 -1
- package/lib/module/config.js +1 -1
- package/lib/module/config.js.map +1 -1
- package/lib/module/constants.js +1 -1
- package/lib/module/constants.js.map +1 -1
- package/package.json +1 -1
- package/robylon-react-native-sdk-2.2.1-staging.1.tgz +0 -0
- package/android/src/main/AndroidManifest.xml +0 -3
- package/android/src/main/java/com/robylonreactnativesdk/RobylonDownloadModule.java +0 -83
- package/android/src/main/java/com/robylonreactnativesdk/RobylonReactNativeSdkPackage.java +0 -24
- package/robylon-react-native-sdk-2.2.1-staging.0.tgz +0 -0
- package/src/Chatbotsdk.tsx +0 -1191
- package/src/FloatingButton/launchers/ImageLauncher.tsx +0 -75
- package/src/FloatingButton/launchers/TextLauncher.tsx +0 -84
- package/src/FloatingButton/launchers/TextualImageLauncher.tsx +0 -133
- package/src/FloatingButton.tsx +0 -97
- package/src/LoadingIndicator.tsx +0 -11
- package/src/Toast.tsx +0 -65
- package/src/components/DebugButton.tsx +0 -46
- package/src/components/ErrorBoundary.tsx +0 -38
- package/src/config.ts +0 -4
- package/src/constants/errorConstants.ts +0 -21
- package/src/constants/fontStyles.ts +0 -3
- package/src/constants.ts +0 -5
- package/src/global.d.ts +0 -11
- package/src/hooks/useChatbotEvents.ts +0 -117
- package/src/index.tsx +0 -14
- package/src/openChatbot.ts +0 -11
- package/src/openChatbot.tsx +0 -0
- package/src/services/ErrorTrackingService.ts +0 -217
- package/src/types/events.ts +0 -28
- package/src/types/react-native-flipper-performance-plugin.d.ts +0 -3
- package/src/types/react-native-globals.d.ts +0 -10
- package/src/utils/animations.ts +0 -120
- package/src/utils/colorUtils.ts +0 -35
- package/src/utils/cookieUtils.ts +0 -7
- package/src/utils/debugConfig.ts +0 -56
- package/src/utils/debugMenu.ts +0 -14
- package/src/utils/errorHandler.ts +0 -58
- package/src/utils/fileDownload.ts +0 -198
- package/src/utils/logger.ts +0 -14
- package/src/utils/session.ts +0 -26
- package/src/utils/systemInfo.ts +0 -110
- package/src/utils/webViewStorage.ts +0 -62
- package/src/version.ts +0 -2
- package/src/versions/version.dev.ts +0 -2
- package/src/versions/version.production.ts +0 -2
- package/src/versions/version.staging.ts +0 -2
package/README.md
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
- [Required Props](#required-props)
|
|
12
12
|
- [Optional Props](#optional-props)
|
|
13
13
|
- [User Profile Properties](#user-profile-properties)
|
|
14
|
+
- [Loading Screen](#loading-screen)
|
|
14
15
|
- [External Trigger API](#external-trigger-api)
|
|
15
16
|
- [Ref-based Imperative API](#ref-based-imperative-api)
|
|
16
17
|
- [Ref Methods](#ref-methods)
|
|
@@ -54,6 +55,7 @@ import {
|
|
|
54
55
|
Chatbot, // Main chatbot component
|
|
55
56
|
ChatbotRef, // Ref interface for imperative control
|
|
56
57
|
ChatbotProps, // Props interface
|
|
58
|
+
ChatbotLoadingScreen, // Shape of the `loading_screen` prop
|
|
57
59
|
ChatbotEventType, // Event types enum
|
|
58
60
|
ChatbotEventHandler, // Event handler type
|
|
59
61
|
} from "@robylon/react-native-sdk";
|
|
@@ -115,6 +117,7 @@ export default App;
|
|
|
115
117
|
| `session_id` | string | Session to resume. Read when the chat initializes — see [Session Management](#session-management) |
|
|
116
118
|
| `session_context` | Record<string, any> | Opaque value echoed back as the second argument to `onSession`. Never read by the SDK |
|
|
117
119
|
| `discrete` | boolean | Defaults to `false`. When `true`, signals to Robylon that this chatbot should be treated as discrete. Read at initialization |
|
|
120
|
+
| `loading_screen` | ChatbotLoadingScreen | Branding shown while the chat UI boots — see [Loading Screen](#loading-screen) |
|
|
118
121
|
| `onSession` | (session_id: string, session_context?: Record<string, any>) => void | Called whenever the active session id changes |
|
|
119
122
|
| `onEvent` | ChatbotEventHandler | Callback for chatbot events |
|
|
120
123
|
| `onOpen` | () => void | Callback when chatbot opens |
|
|
@@ -130,6 +133,60 @@ The `user_profile` object can include:
|
|
|
130
133
|
- `mobile`: User's mobile number (optional)
|
|
131
134
|
- `is_test_user`: Mark user as test user for development/testing purposes (optional)
|
|
132
135
|
|
|
136
|
+
### Loading Screen
|
|
137
|
+
|
|
138
|
+
> **Requires SDK ≥ 2.2.1**
|
|
139
|
+
|
|
140
|
+
The chat UI fetches its own configuration when it boots. Until that call
|
|
141
|
+
returns it has nothing to render a header with, so it shows a skeleton and then
|
|
142
|
+
snaps to your branding — a visible flash every time the chat opens.
|
|
143
|
+
|
|
144
|
+
The SDK already holds that branding: it fetches your configuration before it
|
|
145
|
+
mounts the chat, to decide whether to render a launcher and what it should look
|
|
146
|
+
like. It now passes a few of those fields to the chat UI so the real header can
|
|
147
|
+
paint immediately.
|
|
148
|
+
|
|
149
|
+
**This happens automatically — no props required.** The values come from your
|
|
150
|
+
Robylon dashboard configuration. Use `loading_screen` only when you want to
|
|
151
|
+
override them for a particular integration:
|
|
152
|
+
|
|
153
|
+
```typescript
|
|
154
|
+
<Chatbot
|
|
155
|
+
api_key="YOUR_API_KEY"
|
|
156
|
+
loading_screen={{
|
|
157
|
+
image: "https://example.com/header-avatar.png",
|
|
158
|
+
bot_name: "Acme Support",
|
|
159
|
+
brand_color: "#5B3DF5",
|
|
160
|
+
powered_by: false,
|
|
161
|
+
sub_text: "Typically replies in a minute",
|
|
162
|
+
}}
|
|
163
|
+
/>
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
| Field | Type | Description |
|
|
167
|
+
| ------------- | ------- | -------------------------------------------------------------------- |
|
|
168
|
+
| `image` | string | Header avatar. Defaults to your header image, then your brand logo |
|
|
169
|
+
| `bot_name` | string | Display name in the header |
|
|
170
|
+
| `brand_color` | string | Colour the header is tinted with |
|
|
171
|
+
| `powered_by` | boolean | Whether the "powered by" footer shows |
|
|
172
|
+
| `sub_text` | string | Sub-text under the header. No dashboard equivalent — prop only |
|
|
173
|
+
|
|
174
|
+
#### Behaviour
|
|
175
|
+
|
|
176
|
+
- **Every field is optional.** Anything you omit falls back to your dashboard
|
|
177
|
+
configuration, field by field. Passing `{ bot_name: "Acme" }` overrides only
|
|
178
|
+
the name; the image, colour and footer still come from your dashboard.
|
|
179
|
+
- **Explicit values always win**, including falsy ones. `powered_by: false`
|
|
180
|
+
overrides a dashboard setting of `true`.
|
|
181
|
+
- **`sub_text` has no dashboard equivalent**, so it appears only when you pass
|
|
182
|
+
it here.
|
|
183
|
+
- **First paint only.** These are sent once, when the chat surface first loads,
|
|
184
|
+
and are not re-sent when the user reopens the chat — by then the chat UI has
|
|
185
|
+
its own configuration. They do not restyle the running chat.
|
|
186
|
+
- **A hint, not a source of truth.** The chat UI reconciles to its own
|
|
187
|
+
configuration once that call lands, so a value that is missing or out of date
|
|
188
|
+
is corrected rather than sticking.
|
|
189
|
+
|
|
133
190
|
## External Trigger API
|
|
134
191
|
|
|
135
192
|
The SDK now supports external triggering of the chatbot through both controlled component patterns and imperative ref methods.
|
package/lib/commonjs/config.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,"__esModule",{value:true});exports.config=void 0;var config=exports.config={API_URL:process&&process.env&&process.env.API_URL||"https://
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:true});exports.config=void 0;var config=exports.config={API_URL:process&&process.env&&process.env.API_URL||"https://api.robylon.ai"||'https://api.robylon.com',DEBUG:(process&&process.env&&process.env.DEBUG||"false")==='true'};
|
|
2
2
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["config","exports","API_URL","process","env","process.env","DEBUG"],"sourceRoot":"../../src","sources":["config.ts"],"mappings":"+EAAO,GAAM,CAAAA,MAAM,CAAAC,OAAA,CAAAD,MAAA,CAAG,CACpBE,OAAO,CAAEC,OAAA,EAAAA,OAAA,CAAAC,GAAA,EAAAC,WAAA,CAAAH,OAAA,
|
|
1
|
+
{"version":3,"names":["config","exports","API_URL","process","env","process.env","DEBUG"],"sourceRoot":"../../src","sources":["config.ts"],"mappings":"+EAAO,GAAM,CAAAA,MAAM,CAAAC,OAAA,CAAAD,MAAA,CAAG,CACpBE,OAAO,CAAEC,OAAA,EAAAA,OAAA,CAAAC,GAAA,EAAAC,WAAA,CAAAH,OAAA,4BAAuB,yBAAyB,CACzDI,KAAK,CAAE,CAAAH,OAAA,EAAAA,OAAA,CAAAC,GAAA,EAAAC,WAAA,CAAAC,KAAA,aAAsB,MAC/B,CAAC","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,"__esModule",{value:true});exports.DEFAULT_LAUNCHER_IMAGE=exports.BASE_CHATBOT_URL=exports.API_URL=void 0;var BASE_CHATBOT_DOMAIN=process&&process.env&&process.env.CHATBOT_DOMAIN||"https://
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:true});exports.DEFAULT_LAUNCHER_IMAGE=exports.BASE_CHATBOT_URL=exports.API_URL=void 0;var BASE_CHATBOT_DOMAIN=process&&process.env&&process.env.CHATBOT_DOMAIN||"https://chatbot.robylon.ai"||"";var CHATBOT_PATH=process&&process.env&&process.env.CHATBOT_PATH||"chatbot-plugin"||"";var BASE_CHATBOT_URL=exports.BASE_CHATBOT_URL=`${BASE_CHATBOT_DOMAIN}/${CHATBOT_PATH}`;var API_URL=exports.API_URL=process&&process.env&&process.env.API_URL||"https://api.robylon.ai";var DEFAULT_LAUNCHER_IMAGE=exports.DEFAULT_LAUNCHER_IMAGE=`${BASE_CHATBOT_DOMAIN}/chatbubble.png`;
|
|
2
2
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BASE_CHATBOT_DOMAIN","process","env","process.env","CHATBOT_DOMAIN","CHATBOT_PATH","BASE_CHATBOT_URL","exports","API_URL","DEFAULT_LAUNCHER_IMAGE"],"sourceRoot":"../../src","sources":["constants.ts"],"mappings":"wIAAA,GAAM,CAAAA,mBAAmB,CAAGC,OAAA,EAAAA,OAAA,CAAAC,GAAA,EAAAC,WAAA,CAAAC,cAAA,
|
|
1
|
+
{"version":3,"names":["BASE_CHATBOT_DOMAIN","process","env","process.env","CHATBOT_DOMAIN","CHATBOT_PATH","BASE_CHATBOT_URL","exports","API_URL","DEFAULT_LAUNCHER_IMAGE"],"sourceRoot":"../../src","sources":["constants.ts"],"mappings":"wIAAA,GAAM,CAAAA,mBAAmB,CAAGC,OAAA,EAAAA,OAAA,CAAAC,GAAA,EAAAC,WAAA,CAAAC,cAAA,gCAA8B,EAAE,CAC5D,GAAM,CAAAC,YAAY,CAAGJ,OAAA,EAAAA,OAAA,CAAAC,GAAA,EAAAC,WAAA,CAAAE,YAAA,oBAA4B,EAAE,CAC5C,GAAM,CAAAC,gBAAgB,CAAAC,OAAA,CAAAD,gBAAA,CAAG,GAAGN,mBAAmB,IAAIK,YAAY,EAAE,CACjE,GAAM,CAAAG,OAAO,CAAAD,OAAA,CAAAC,OAAA,CAAAP,OAAA,EAAAA,OAAA,CAAAC,GAAA,EAAAC,WAAA,CAAAK,OAAA,0BAAsB,CACnC,GAAM,CAAAC,sBAAsB,CAAAF,OAAA,CAAAE,sBAAA,CAAG,GAAGT,mBAAmB,iBAAiB","ignoreList":[]}
|
package/lib/module/config.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,"__esModule",{value:true});exports.config=void 0;var config=exports.config={API_URL:process&&process.env&&process.env.API_URL||"https://
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:true});exports.config=void 0;var config=exports.config={API_URL:process&&process.env&&process.env.API_URL||"https://api.robylon.ai"||'https://api.robylon.com',DEBUG:(process&&process.env&&process.env.DEBUG||"false")==='true'};
|
|
2
2
|
//# sourceMappingURL=config.js.map
|
package/lib/module/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["config","exports","API_URL","process","env","process.env","DEBUG"],"sourceRoot":"../../src","sources":["config.ts"],"mappings":"+EAAO,GAAM,CAAAA,MAAM,CAAAC,OAAA,CAAAD,MAAA,CAAG,CACpBE,OAAO,CAAEC,OAAA,EAAAA,OAAA,CAAAC,GAAA,EAAAC,WAAA,CAAAH,OAAA,
|
|
1
|
+
{"version":3,"names":["config","exports","API_URL","process","env","process.env","DEBUG"],"sourceRoot":"../../src","sources":["config.ts"],"mappings":"+EAAO,GAAM,CAAAA,MAAM,CAAAC,OAAA,CAAAD,MAAA,CAAG,CACpBE,OAAO,CAAEC,OAAA,EAAAA,OAAA,CAAAC,GAAA,EAAAC,WAAA,CAAAH,OAAA,4BAAuB,yBAAyB,CACzDI,KAAK,CAAE,CAAAH,OAAA,EAAAA,OAAA,CAAAC,GAAA,EAAAC,WAAA,CAAAC,KAAA,aAAsB,MAC/B,CAAC","ignoreList":[]}
|
package/lib/module/constants.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,"__esModule",{value:true});exports.DEFAULT_LAUNCHER_IMAGE=exports.BASE_CHATBOT_URL=exports.API_URL=void 0;var BASE_CHATBOT_DOMAIN=process&&process.env&&process.env.CHATBOT_DOMAIN||"https://
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:true});exports.DEFAULT_LAUNCHER_IMAGE=exports.BASE_CHATBOT_URL=exports.API_URL=void 0;var BASE_CHATBOT_DOMAIN=process&&process.env&&process.env.CHATBOT_DOMAIN||"https://chatbot.robylon.ai"||"";var CHATBOT_PATH=process&&process.env&&process.env.CHATBOT_PATH||"chatbot-plugin"||"";var BASE_CHATBOT_URL=exports.BASE_CHATBOT_URL=`${BASE_CHATBOT_DOMAIN}/${CHATBOT_PATH}`;var API_URL=exports.API_URL=process&&process.env&&process.env.API_URL||"https://api.robylon.ai";var DEFAULT_LAUNCHER_IMAGE=exports.DEFAULT_LAUNCHER_IMAGE=`${BASE_CHATBOT_DOMAIN}/chatbubble.png`;
|
|
2
2
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BASE_CHATBOT_DOMAIN","process","env","process.env","CHATBOT_DOMAIN","CHATBOT_PATH","BASE_CHATBOT_URL","exports","API_URL","DEFAULT_LAUNCHER_IMAGE"],"sourceRoot":"../../src","sources":["constants.ts"],"mappings":"wIAAA,GAAM,CAAAA,mBAAmB,CAAGC,OAAA,EAAAA,OAAA,CAAAC,GAAA,EAAAC,WAAA,CAAAC,cAAA,
|
|
1
|
+
{"version":3,"names":["BASE_CHATBOT_DOMAIN","process","env","process.env","CHATBOT_DOMAIN","CHATBOT_PATH","BASE_CHATBOT_URL","exports","API_URL","DEFAULT_LAUNCHER_IMAGE"],"sourceRoot":"../../src","sources":["constants.ts"],"mappings":"wIAAA,GAAM,CAAAA,mBAAmB,CAAGC,OAAA,EAAAA,OAAA,CAAAC,GAAA,EAAAC,WAAA,CAAAC,cAAA,gCAA8B,EAAE,CAC5D,GAAM,CAAAC,YAAY,CAAGJ,OAAA,EAAAA,OAAA,CAAAC,GAAA,EAAAC,WAAA,CAAAE,YAAA,oBAA4B,EAAE,CAC5C,GAAM,CAAAC,gBAAgB,CAAAC,OAAA,CAAAD,gBAAA,CAAG,GAAGN,mBAAmB,IAAIK,YAAY,EAAE,CACjE,GAAM,CAAAG,OAAO,CAAAD,OAAA,CAAAC,OAAA,CAAAP,OAAA,EAAAA,OAAA,CAAAC,GAAA,EAAAC,WAAA,CAAAK,OAAA,0BAAsB,CACnC,GAAM,CAAAC,sBAAsB,CAAAF,OAAA,CAAAE,sBAAA,CAAG,GAAGT,mBAAmB,iBAAiB","ignoreList":[]}
|
package/package.json
CHANGED
|
Binary file
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
package com.robylonreactnativesdk;
|
|
2
|
-
|
|
3
|
-
import android.app.DownloadManager;
|
|
4
|
-
import android.content.Context;
|
|
5
|
-
import android.net.Uri;
|
|
6
|
-
import android.os.Environment;
|
|
7
|
-
import android.webkit.MimeTypeMap;
|
|
8
|
-
|
|
9
|
-
import androidx.annotation.NonNull;
|
|
10
|
-
|
|
11
|
-
import com.facebook.react.bridge.Promise;
|
|
12
|
-
import com.facebook.react.bridge.ReactApplicationContext;
|
|
13
|
-
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
|
14
|
-
import com.facebook.react.bridge.ReactMethod;
|
|
15
|
-
|
|
16
|
-
public class RobylonDownloadModule extends ReactContextBaseJavaModule {
|
|
17
|
-
private final ReactApplicationContext reactContext;
|
|
18
|
-
|
|
19
|
-
public RobylonDownloadModule(ReactApplicationContext reactContext) {
|
|
20
|
-
super(reactContext);
|
|
21
|
-
this.reactContext = reactContext;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
@NonNull
|
|
25
|
-
@Override
|
|
26
|
-
public String getName() {
|
|
27
|
-
return "RobylonDownloadModule";
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
@ReactMethod
|
|
31
|
-
public void downloadFile(String url, String filename, Promise promise) {
|
|
32
|
-
try {
|
|
33
|
-
if (url == null || url.trim().isEmpty()) {
|
|
34
|
-
promise.reject("INVALID_URL", "Download URL is missing");
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
String safeName = getSafeFileName(filename, url);
|
|
39
|
-
DownloadManager manager = (DownloadManager) reactContext.getSystemService(Context.DOWNLOAD_SERVICE);
|
|
40
|
-
if (manager == null) {
|
|
41
|
-
promise.reject("DOWNLOAD_SERVICE_UNAVAILABLE", "Download service unavailable");
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
|
|
46
|
-
request.setTitle(safeName);
|
|
47
|
-
request.setDescription("Downloading transcript");
|
|
48
|
-
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
|
|
49
|
-
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, safeName);
|
|
50
|
-
request.setMimeType(getMimeTypeFromName(safeName));
|
|
51
|
-
request.setAllowedOverMetered(true);
|
|
52
|
-
request.setAllowedOverRoaming(true);
|
|
53
|
-
|
|
54
|
-
long downloadId = manager.enqueue(request);
|
|
55
|
-
promise.resolve(String.valueOf(downloadId));
|
|
56
|
-
} catch (Exception error) {
|
|
57
|
-
promise.reject("DOWNLOAD_FAILED", error);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
private String getSafeFileName(String filename, String url) {
|
|
62
|
-
if (filename != null && !filename.trim().isEmpty()) {
|
|
63
|
-
return filename.trim().replaceAll("[\\\\/:*?\"<>|]", "_");
|
|
64
|
-
}
|
|
65
|
-
String fromUrl = Uri.parse(url).getLastPathSegment();
|
|
66
|
-
if (fromUrl == null || fromUrl.trim().isEmpty()) {
|
|
67
|
-
return "chat-transcript-" + System.currentTimeMillis() + ".txt";
|
|
68
|
-
}
|
|
69
|
-
return fromUrl.trim().replaceAll("[\\\\/:*?\"<>|]", "_");
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
private String getMimeTypeFromName(String filename) {
|
|
73
|
-
String extension = MimeTypeMap.getFileExtensionFromUrl(filename);
|
|
74
|
-
if (extension == null || extension.isEmpty()) {
|
|
75
|
-
return "application/octet-stream";
|
|
76
|
-
}
|
|
77
|
-
String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension.toLowerCase());
|
|
78
|
-
if (mimeType == null || mimeType.isEmpty()) {
|
|
79
|
-
return "application/octet-stream";
|
|
80
|
-
}
|
|
81
|
-
return mimeType;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
package com.robylonreactnativesdk;
|
|
2
|
-
|
|
3
|
-
import com.facebook.react.ReactPackage;
|
|
4
|
-
import com.facebook.react.bridge.NativeModule;
|
|
5
|
-
import com.facebook.react.bridge.ReactApplicationContext;
|
|
6
|
-
import com.facebook.react.uimanager.ViewManager;
|
|
7
|
-
|
|
8
|
-
import java.util.ArrayList;
|
|
9
|
-
import java.util.Collections;
|
|
10
|
-
import java.util.List;
|
|
11
|
-
|
|
12
|
-
public class RobylonReactNativeSdkPackage implements ReactPackage {
|
|
13
|
-
@Override
|
|
14
|
-
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
|
|
15
|
-
List<NativeModule> modules = new ArrayList<>();
|
|
16
|
-
modules.add(new RobylonDownloadModule(reactContext));
|
|
17
|
-
return modules;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
@Override
|
|
21
|
-
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
|
|
22
|
-
return Collections.emptyList();
|
|
23
|
-
}
|
|
24
|
-
}
|
|
Binary file
|