@robylon/react-native-sdk 2.0.19-staging.1 → 2.0.19-staging.4
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/lib/commonjs/ChatbotWebview.js +1 -1
- package/lib/commonjs/ChatbotWebview.js.map +1 -1
- package/lib/commonjs/Chatbotsdk.js +75 -1
- package/lib/commonjs/Chatbotsdk.js.map +1 -1
- package/lib/commonjs/config.js +1 -1
- package/lib/commonjs/config.js.map +1 -1
- package/lib/commonjs/constants/errorConstants.js +1 -1
- package/lib/commonjs/constants/errorConstants.js.map +1 -1
- package/lib/commonjs/constants.js +1 -1
- package/lib/commonjs/constants.js.map +1 -1
- package/lib/commonjs/hooks/useChatbotEvents.js +1 -1
- package/lib/commonjs/hooks/useChatbotEvents.js.map +1 -1
- package/lib/commonjs/openChatbot.js +1 -1
- package/lib/commonjs/openChatbot.js.map +1 -1
- package/lib/commonjs/services/ErrorTrackingService.js +1 -1
- package/lib/commonjs/services/ErrorTrackingService.js.map +1 -1
- package/lib/commonjs/utils/debugConfig.js +26 -1
- package/lib/commonjs/utils/debugConfig.js.map +1 -1
- package/lib/commonjs/utils/systemInfo.js +28 -1
- package/lib/commonjs/utils/systemInfo.js.map +1 -1
- package/lib/commonjs/utils/webViewStorage.js +33 -1
- package/lib/commonjs/utils/webViewStorage.js.map +1 -1
- package/lib/commonjs/version.js +1 -1
- package/lib/module/ChatbotWebview.js +1 -1
- package/lib/module/ChatbotWebview.js.map +1 -1
- package/lib/module/Chatbotsdk.js +75 -1
- package/lib/module/Chatbotsdk.js.map +1 -1
- package/lib/module/config.js +1 -1
- package/lib/module/config.js.map +1 -1
- package/lib/module/constants/errorConstants.js +1 -1
- package/lib/module/constants/errorConstants.js.map +1 -1
- package/lib/module/constants.js +1 -1
- package/lib/module/constants.js.map +1 -1
- package/lib/module/hooks/useChatbotEvents.js +1 -1
- package/lib/module/hooks/useChatbotEvents.js.map +1 -1
- package/lib/module/openChatbot.js +1 -1
- package/lib/module/services/ErrorTrackingService.js +1 -1
- package/lib/module/services/ErrorTrackingService.js.map +1 -1
- package/lib/module/utils/debugConfig.js +26 -1
- package/lib/module/utils/debugConfig.js.map +1 -1
- package/lib/module/utils/systemInfo.js +28 -1
- package/lib/module/utils/systemInfo.js.map +1 -1
- package/lib/module/utils/webViewStorage.js +33 -1
- package/lib/module/utils/webViewStorage.js.map +1 -1
- package/lib/module/version.js +1 -1
- package/lib/typescript/version.d.ts +1 -1
- package/package.json +4 -3
- package/src/ChatbotWebview.tsx +44 -0
- package/src/Chatbotsdk.tsx +679 -0
- package/src/FloatingButton.tsx +74 -0
- package/src/LoadingIndicator.tsx +11 -0
- package/src/Toast.tsx +65 -0
- package/src/components/DebugButton.tsx +46 -0
- package/src/components/ErrorBoundary.tsx +38 -0
- package/src/config.ts +4 -0
- package/src/constants/errorConstants.ts +21 -0
- package/src/constants.ts +4 -0
- package/src/global.d.ts +11 -0
- package/src/hooks/useChatbotEvents.ts +93 -0
- package/src/index.tsx +10 -0
- package/src/openChatbot.ts +11 -0
- package/src/openChatbot.tsx +0 -0
- package/src/services/ErrorTrackingService.ts +217 -0
- package/src/types/events.ts +25 -0
- package/src/types/react-native-flipper-performance-plugin.d.ts +3 -0
- package/src/types/react-native-globals.d.ts +10 -0
- package/src/utils/cookieUtils.ts +7 -0
- package/src/utils/debugConfig.ts +56 -0
- package/src/utils/debugMenu.ts +14 -0
- package/src/utils/errorHandler.ts +58 -0
- package/src/utils/logger.ts +14 -0
- package/src/utils/systemInfo.ts +84 -0
- package/src/utils/webViewStorage.ts +62 -0
- package/src/version.ts +2 -0
|
@@ -1,2 +1,29 @@
|
|
|
1
|
-
Object.defineProperty(exports,"__esModule",{value:true});exports.getSystemInfo=exports.getBrowserAndOSInfoScript=void 0;var _reactNative=require("react-native");var _version=require("../version");var getDeviceType=function getDeviceType(){var _Dimensions$get=_reactNative.Dimensions.get("window"),width=_Dimensions$get.width,height=_Dimensions$get.height;var aspectRatio=height/width;if(_reactNative.Platform.OS==="ios"){return _reactNative.Platform.isPad?"iPad":"iPhone";}else if(_reactNative.Platform.OS==="android"){return aspectRatio<1.6?"Android Tablet":"Android Phone";}return"Desktop";};var getScreenSize=function getScreenSize(){return{width:Math.round(_reactNative.Dimensions.get("window").width*_reactNative.PixelRatio.get()),height:Math.round(_reactNative.Dimensions.get("window").height*_reactNative.PixelRatio.get())};};var getBrowserAndOSInfoScript=exports.getBrowserAndOSInfoScript=function getBrowserAndOSInfoScript(){return
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:true});exports.getSystemInfo=exports.getBrowserAndOSInfoScript=void 0;var _reactNative=require("react-native");var _version=require("../version");var getDeviceType=function getDeviceType(){var _Dimensions$get=_reactNative.Dimensions.get("window"),width=_Dimensions$get.width,height=_Dimensions$get.height;var aspectRatio=height/width;if(_reactNative.Platform.OS==="ios"){return _reactNative.Platform.isPad?"iPad":"iPhone";}else if(_reactNative.Platform.OS==="android"){return aspectRatio<1.6?"Android Tablet":"Android Phone";}return"Desktop";};var getScreenSize=function getScreenSize(){return{width:Math.round(_reactNative.Dimensions.get("window").width*_reactNative.PixelRatio.get()),height:Math.round(_reactNative.Dimensions.get("window").height*_reactNative.PixelRatio.get())};};var getBrowserAndOSInfoScript=exports.getBrowserAndOSInfoScript=function getBrowserAndOSInfoScript(){return`
|
|
2
|
+
function getOSAndBrowser() {
|
|
3
|
+
const userAgent = navigator.userAgent;
|
|
4
|
+
|
|
5
|
+
// OS Detection
|
|
6
|
+
let os = "unknown";
|
|
7
|
+
if (userAgent.indexOf("Win") !== -1) os = "Windows";
|
|
8
|
+
else if (userAgent.indexOf("Mac") !== -1) os = "MacOS";
|
|
9
|
+
else if (userAgent.indexOf("Linux") !== -1) os = "Linux";
|
|
10
|
+
else if (userAgent.indexOf("Android") !== -1) os = "Android";
|
|
11
|
+
else if (userAgent.indexOf("like Mac") !== -1) os = "iOS";
|
|
12
|
+
|
|
13
|
+
// Browser Detection
|
|
14
|
+
let browser = "unknown";
|
|
15
|
+
if (userAgent.indexOf("Chrome") !== -1) browser = "Chrome";
|
|
16
|
+
else if (userAgent.indexOf("Safari") !== -1) browser = "Safari";
|
|
17
|
+
else if (userAgent.indexOf("Firefox") !== -1) browser = "Firefox";
|
|
18
|
+
else if (userAgent.indexOf("Edge") !== -1) browser = "Edge";
|
|
19
|
+
else if (userAgent.indexOf("MSIE") !== -1 || userAgent.indexOf("Trident/") !== -1) browser = "IE";
|
|
20
|
+
|
|
21
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
22
|
+
type: 'SYSTEM_INFO',
|
|
23
|
+
data: { os, browser }
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
26
|
+
getOSAndBrowser();
|
|
27
|
+
true;
|
|
28
|
+
`;};var getSystemInfo=exports.getSystemInfo=function getSystemInfo(webViewSystemInfo){return{platform:_reactNative.Platform.OS,os:webViewSystemInfo.os||_reactNative.Platform.OS,browser:webViewSystemInfo.browser||"WebView",SDK_VERSION:_version.SDK_VERSION,device:getDeviceType(),screen_size:getScreenSize()};};
|
|
2
29
|
//# sourceMappingURL=systemInfo.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_version","getDeviceType","_Dimensions$get","Dimensions","get","width","height","aspectRatio","Platform","OS","isPad","getScreenSize","Math","round","PixelRatio","getBrowserAndOSInfoScript","exports","getSystemInfo","webViewSystemInfo","platform","os","browser","SDK_VERSION","device","screen_size"],"sourceRoot":"../../../src","sources":["utils/systemInfo.ts"],"mappings":"wHAAA,IAAAA,YAAA,CAAAC,OAAA,iBACA,IAAAC,QAAA,CAAAD,OAAA,eAiBA,GAAM,CAAAE,aAAa,CAAG,QAAhB,CAAAA,aAAaA,CAAA,CAAiB,CAClC,IAAAC,eAAA,CAA0BC,uBAAU,CAACC,GAAG,CAAC,QAAQ,CAAC,CAA1CC,KAAK,CAAAH,eAAA,CAALG,KAAK,CAAEC,MAAM,CAAAJ,eAAA,CAANI,MAAM,CACrB,GAAM,CAAAC,WAAW,CAAGD,MAAM,CAAGD,KAAK,CAElC,GAAIG,qBAAQ,CAACC,EAAE,GAAK,KAAK,CAAE,CACzB,MAAO,CAAAD,qBAAQ,CAACE,KAAK,CAAG,MAAM,CAAG,QAAQ,CAC3C,CAAC,IAAM,IAAIF,qBAAQ,CAACC,EAAE,GAAK,SAAS,CAAE,CACpC,MAAO,CAAAF,WAAW,CAAG,GAAG,CAAG,gBAAgB,CAAG,eAAe,CAC/D,CACA,MAAO,SAAS,CAClB,CAAC,CAGD,GAAM,CAAAI,aAAa,CAAG,QAAhB,CAAAA,aAAaA,CAAA,CAAqB,CACtC,MAAO,CACLN,KAAK,CAAEO,IAAI,CAACC,KAAK,CAACV,uBAAU,CAACC,GAAG,CAAC,QAAQ,CAAC,CAACC,KAAK,CAAGS,uBAAU,CAACV,GAAG,CAAC,CAAC,CAAC,CACpEE,MAAM,CAAEM,IAAI,CAACC,KAAK,CAACV,uBAAU,CAACC,GAAG,CAAC,QAAQ,CAAC,CAACE,MAAM,CAAGQ,uBAAU,CAACV,GAAG,CAAC,CAAC,CACvE,CAAC,CACH,CAAC,CAGM,GAAM,CAAAW,yBAAyB,CAAAC,OAAA,CAAAD,yBAAA,CAAG,QAA5B,CAAAA,yBAAyBA,CAAA,CAAiB,CACrD,
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_version","getDeviceType","_Dimensions$get","Dimensions","get","width","height","aspectRatio","Platform","OS","isPad","getScreenSize","Math","round","PixelRatio","getBrowserAndOSInfoScript","exports","getSystemInfo","webViewSystemInfo","platform","os","browser","SDK_VERSION","device","screen_size"],"sourceRoot":"../../../src","sources":["utils/systemInfo.ts"],"mappings":"wHAAA,IAAAA,YAAA,CAAAC,OAAA,iBACA,IAAAC,QAAA,CAAAD,OAAA,eAiBA,GAAM,CAAAE,aAAa,CAAG,QAAhB,CAAAA,aAAaA,CAAA,CAAiB,CAClC,IAAAC,eAAA,CAA0BC,uBAAU,CAACC,GAAG,CAAC,QAAQ,CAAC,CAA1CC,KAAK,CAAAH,eAAA,CAALG,KAAK,CAAEC,MAAM,CAAAJ,eAAA,CAANI,MAAM,CACrB,GAAM,CAAAC,WAAW,CAAGD,MAAM,CAAGD,KAAK,CAElC,GAAIG,qBAAQ,CAACC,EAAE,GAAK,KAAK,CAAE,CACzB,MAAO,CAAAD,qBAAQ,CAACE,KAAK,CAAG,MAAM,CAAG,QAAQ,CAC3C,CAAC,IAAM,IAAIF,qBAAQ,CAACC,EAAE,GAAK,SAAS,CAAE,CACpC,MAAO,CAAAF,WAAW,CAAG,GAAG,CAAG,gBAAgB,CAAG,eAAe,CAC/D,CACA,MAAO,SAAS,CAClB,CAAC,CAGD,GAAM,CAAAI,aAAa,CAAG,QAAhB,CAAAA,aAAaA,CAAA,CAAqB,CACtC,MAAO,CACLN,KAAK,CAAEO,IAAI,CAACC,KAAK,CAACV,uBAAU,CAACC,GAAG,CAAC,QAAQ,CAAC,CAACC,KAAK,CAAGS,uBAAU,CAACV,GAAG,CAAC,CAAC,CAAC,CACpEE,MAAM,CAAEM,IAAI,CAACC,KAAK,CAACV,uBAAU,CAACC,GAAG,CAAC,QAAQ,CAAC,CAACE,MAAM,CAAGQ,uBAAU,CAACV,GAAG,CAAC,CAAC,CACvE,CAAC,CACH,CAAC,CAGM,GAAM,CAAAW,yBAAyB,CAAAC,OAAA,CAAAD,yBAAA,CAAG,QAA5B,CAAAA,yBAAyBA,CAAA,CAAiB,CACrD,MAAO;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,CACH,CAAC,CAGM,GAAM,CAAAE,aAAa,CAAAD,OAAA,CAAAC,aAAA,CAAG,QAAhB,CAAAA,aAAaA,CAAIC,iBAG7B,CAAiB,CAChB,MAAO,CACLC,QAAQ,CAAEX,qBAAQ,CAACC,EAAE,CACrBW,EAAE,CAAEF,iBAAiB,CAACE,EAAE,EAAIZ,qBAAQ,CAACC,EAAE,CACvCY,OAAO,CAAEH,iBAAiB,CAACG,OAAO,EAAI,SAAS,CAC/CC,WAAW,CAAXA,oBAAW,CACXC,MAAM,CAAEtB,aAAa,CAAC,CAAC,CACvBuB,WAAW,CAAEb,aAAa,CAAC,CAC7B,CAAC,CACH,CAAC","ignoreList":[]}
|
|
@@ -1,2 +1,34 @@
|
|
|
1
|
-
Object.defineProperty(exports,"__esModule",{value:true});exports.getStorageScript=exports.createStorageMessage=exports.StorageMessageType=void 0;var StorageMessageType=exports.StorageMessageType=function(StorageMessageType){StorageMessageType["GET_STORAGE"]="GET_STORAGE";StorageMessageType["SET_STORAGE"]="SET_STORAGE";StorageMessageType["STORAGE_READY"]="STORAGE_READY";StorageMessageType["STORAGE_ERROR"]="STORAGE_ERROR";StorageMessageType["STORAGE_RESPONSE"]="STORAGE_RESPONSE";return StorageMessageType;}({});var getStorageScript=exports.getStorageScript=function getStorageScript(){return
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:true});exports.getStorageScript=exports.createStorageMessage=exports.StorageMessageType=void 0;var StorageMessageType=exports.StorageMessageType=function(StorageMessageType){StorageMessageType["GET_STORAGE"]="GET_STORAGE";StorageMessageType["SET_STORAGE"]="SET_STORAGE";StorageMessageType["STORAGE_READY"]="STORAGE_READY";StorageMessageType["STORAGE_ERROR"]="STORAGE_ERROR";StorageMessageType["STORAGE_RESPONSE"]="STORAGE_RESPONSE";return StorageMessageType;}({});var getStorageScript=exports.getStorageScript=function getStorageScript(){return`
|
|
2
|
+
window.handleStorageOperation = function(message) {
|
|
3
|
+
try {
|
|
4
|
+
switch(message.type) {
|
|
5
|
+
case '${StorageMessageType.GET_STORAGE}':
|
|
6
|
+
const value = localStorage.getItem(message.key);
|
|
7
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
8
|
+
type: '${StorageMessageType.STORAGE_RESPONSE}',
|
|
9
|
+
key: message.key,
|
|
10
|
+
value: value
|
|
11
|
+
}));
|
|
12
|
+
break;
|
|
13
|
+
case '${StorageMessageType.SET_STORAGE}':
|
|
14
|
+
localStorage.setItem(message.key, message.value);
|
|
15
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
16
|
+
type: '${StorageMessageType.STORAGE_RESPONSE}',
|
|
17
|
+
key: message.key,
|
|
18
|
+
value: message.value
|
|
19
|
+
}));
|
|
20
|
+
break;
|
|
21
|
+
}
|
|
22
|
+
} catch (error) {
|
|
23
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
24
|
+
type: '${StorageMessageType.STORAGE_ERROR}',
|
|
25
|
+
error: error.message
|
|
26
|
+
}));
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
31
|
+
type: '${StorageMessageType.STORAGE_READY}'
|
|
32
|
+
}));
|
|
33
|
+
`;};var createStorageMessage=exports.createStorageMessage=function createStorageMessage(type,key,value){return`window.handleStorageOperation(${JSON.stringify({type:type,key:key,value:value})});`;};
|
|
2
34
|
//# sourceMappingURL=webViewStorage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["StorageMessageType","exports","getStorageScript","GET_STORAGE","STORAGE_RESPONSE","SET_STORAGE","STORAGE_ERROR","STORAGE_READY","createStorageMessage","type","key","value","JSON","stringify"],"sourceRoot":"../../../src","sources":["utils/webViewStorage.ts"],"mappings":"oJAEY,CAAAA,kBAAkB,CAAAC,OAAA,CAAAD,kBAAA,UAAlBA,kBAAkB,EAAlBA,kBAAkB,8BAAlBA,kBAAkB,8BAAlBA,kBAAkB,kCAAlBA,kBAAkB,kCAAlBA,kBAAkB,8CAAlB,CAAAA,kBAAkB,OAevB,GAAM,CAAAE,gBAAgB,CAAAD,OAAA,CAAAC,gBAAA,CAAG,QAAnB,CAAAA,gBAAgBA,CAAA,
|
|
1
|
+
{"version":3,"names":["StorageMessageType","exports","getStorageScript","GET_STORAGE","STORAGE_RESPONSE","SET_STORAGE","STORAGE_ERROR","STORAGE_READY","createStorageMessage","type","key","value","JSON","stringify"],"sourceRoot":"../../../src","sources":["utils/webViewStorage.ts"],"mappings":"oJAEY,CAAAA,kBAAkB,CAAAC,OAAA,CAAAD,kBAAA,UAAlBA,kBAAkB,EAAlBA,kBAAkB,8BAAlBA,kBAAkB,8BAAlBA,kBAAkB,kCAAlBA,kBAAkB,kCAAlBA,kBAAkB,8CAAlB,CAAAA,kBAAkB,OAevB,GAAM,CAAAE,gBAAgB,CAAAD,OAAA,CAAAC,gBAAA,CAAG,QAAnB,CAAAA,gBAAgBA,CAAA,QAAS;AACtC;AACA;AACA;AACA,gBAAgBF,kBAAkB,CAACG,WAAW;AAC9C;AACA;AACA,qBAAqBH,kBAAkB,CAACI,gBAAgB;AACxD;AACA;AACA;AACA;AACA,gBAAgBJ,kBAAkB,CAACK,WAAW;AAC9C;AACA;AACA,qBAAqBL,kBAAkB,CAACI,gBAAgB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiBJ,kBAAkB,CAACM,aAAa;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,aAAaN,kBAAkB,CAACO,aAAa;AAC7C;AACA,CAAC,GAEM,GAAM,CAAAC,oBAAoB,CAAAP,OAAA,CAAAO,oBAAA,CAAG,QAAvB,CAAAA,oBAAoBA,CAC/BC,IAAwB,CACxBC,GAAY,CACZC,KAAc,CACH,CACX,MAAO,iCAAiCC,IAAI,CAACC,SAAS,CAAC,CACrDJ,IAAI,CAAJA,IAAI,CACJC,GAAG,CAAHA,GAAG,CACHC,KAAK,CAALA,KACF,CAAC,CAAC,IAAI,CACR,CAAC","ignoreList":[]}
|
package/lib/module/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,"__esModule",{value:true});exports.SDK_VERSION=void 0;var SDK_VERSION=exports.SDK_VERSION='2.0.
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:true});exports.SDK_VERSION=void 0;var SDK_VERSION=exports.SDK_VERSION='2.0.19-staging.4';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const SDK_VERSION = "2.0.
|
|
1
|
+
export declare const SDK_VERSION = "2.0.19-staging.4";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@robylon/react-native-sdk",
|
|
3
|
-
"version": "2.0.19-staging.
|
|
3
|
+
"version": "2.0.19-staging.4",
|
|
4
4
|
"description": "React Native SDK for Robylon",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"version:staging": "npm version prerelease --preid staging",
|
|
23
23
|
"version:production": "npm version patch",
|
|
24
24
|
"publish:dev": "npm run clean && npm run prebuild:dev && npm run version:dev && npm run build:dev && npm publish --tag dev",
|
|
25
|
-
"publish:staging": "node scripts/validate-publish.js staging && npm version $(node scripts/get-next-version.js staging) && npm publish --tag staging",
|
|
25
|
+
"publish:staging": "node scripts/validate-publish.js staging && npm version $(node scripts/get-next-version.js staging) && node scripts/update-version.js && npm run build:staging && npm publish --tag staging",
|
|
26
26
|
"publish:production": "node scripts/validate-publish.js production && npm version $(node scripts/get-next-version.js production) && npm publish",
|
|
27
27
|
"publish:hotfix": "node scripts/validate-publish.js hotfix && npm version $(node scripts/get-next-version.js hotfix) && npm publish --tag hotfix",
|
|
28
28
|
"postinstall": "node scripts/setup-git-hooks.js",
|
|
@@ -47,7 +47,8 @@
|
|
|
47
47
|
"react-native-builder-bob": "^0.20.0",
|
|
48
48
|
"rimraf": "^6.0.1",
|
|
49
49
|
"semver": "^7.5.4",
|
|
50
|
-
"typescript": "^4.5.2"
|
|
50
|
+
"typescript": "^4.5.2",
|
|
51
|
+
"metro-react-native-babel-preset": "^0.76.5"
|
|
51
52
|
},
|
|
52
53
|
"react-native-builder-bob": {
|
|
53
54
|
"source": "src",
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// File: src/ChatbotWebview.tsx
|
|
2
|
+
import React, { useEffect, useState } from "react";
|
|
3
|
+
import { View } from "react-native";
|
|
4
|
+
import { WebView } from "react-native-webview";
|
|
5
|
+
import { BASE_CHATBOT_URL } from "./constants";
|
|
6
|
+
import LoadingIndicator from "./LoadingIndicator";
|
|
7
|
+
|
|
8
|
+
interface ChatbotWebviewProps {
|
|
9
|
+
chatbotId: string;
|
|
10
|
+
additionalParams?: Record<string, string>;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const constructUrl = (
|
|
14
|
+
chatbotId: string,
|
|
15
|
+
additionalParams: Record<string, string> = {}
|
|
16
|
+
): string => {
|
|
17
|
+
const params = new URLSearchParams({ id: chatbotId, ...additionalParams });
|
|
18
|
+
return `${BASE_CHATBOT_URL}?${params.toString()}`;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export const ChatbotWebview: React.FC<ChatbotWebviewProps> = ({
|
|
22
|
+
chatbotId,
|
|
23
|
+
additionalParams,
|
|
24
|
+
}) => {
|
|
25
|
+
const [url, setUrl] = useState<string>("");
|
|
26
|
+
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
setUrl(constructUrl(chatbotId, additionalParams));
|
|
29
|
+
}, [chatbotId, additionalParams]);
|
|
30
|
+
|
|
31
|
+
return (
|
|
32
|
+
<View style={{ flex: 1 }}>
|
|
33
|
+
{url ? (
|
|
34
|
+
<WebView
|
|
35
|
+
source={{ uri: url }}
|
|
36
|
+
startInLoadingState={true}
|
|
37
|
+
renderLoading={() => <LoadingIndicator />}
|
|
38
|
+
/>
|
|
39
|
+
) : (
|
|
40
|
+
<LoadingIndicator />
|
|
41
|
+
)}
|
|
42
|
+
</View>
|
|
43
|
+
);
|
|
44
|
+
};
|