@datadog/mobile-react-native-webview
Version:
A client-side React Native module to interact with react-native-webview and Datadog
71 lines (68 loc) • 3.51 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.WebView = void 0;
var _reactNativeWebview = require("react-native-webview");
var _react = _interopRequireWildcard(require("react"));
var _NativeDdLogs = _interopRequireDefault(require("./ext-specs/NativeDdLogs"));
var _NativeDdSdk = require("./ext-specs/NativeDdSdk");
var _NativeDdWebView = require("./specs/NativeDdWebView");
var _webviewJsUtils = require("./utils/webview-js-utils");
var _jsxRuntime = require("react/jsx-runtime");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
/*
* Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0.
* This product includes software developed at Datadog (https://www.datadoghq.com/).
* Copyright 2016-Present Datadog, Inc.
*/
const WebViewComponent = (props, ref) => {
const userDefinedOnMessage = props.onMessage;
const onMessage = (0, _react.useCallback)(event => {
const handleDatadogMessage = ddMessage => {
if (ddMessage.type === 'ERROR' && ddMessage.message != null && (props.logUserCodeErrors ?? false)) {
_NativeDdLogs.default?.error(ddMessage.message, {});
} else if (ddMessage.type === 'NATIVE_EVENT' && ddMessage.message != null) {
_NativeDdSdk.NativeDdSdk?.consumeWebviewEvent(ddMessage.message);
}
};
const message = event.nativeEvent.data;
if (message == null) {
return;
}
try {
const jsonMsg = JSON.parse(message);
if (jsonMsg && jsonMsg.source === 'DATADOG') {
handleDatadogMessage(jsonMsg);
} else {
userDefinedOnMessage?.(event);
}
} catch (err) {
userDefinedOnMessage?.(event);
}
}, [userDefinedOnMessage, props.logUserCodeErrors]);
const injectedJavascript = (0, _react.useMemo)(() => {
return (0, _webviewJsUtils.wrapJsCodeInTryAndCatch)(props.injectedJavaScript);
}, [props.injectedJavaScript]);
const injectedJavascriptBeforeContentLoaded = (0, _react.useMemo)(() => {
return (0, _webviewJsUtils.wrapJsCodeWithAllowedHosts)(props.injectedJavaScriptBeforeContentLoaded, props.allowedHosts);
}, [props.injectedJavaScriptBeforeContentLoaded, props.allowedHosts]);
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeWebview.WebView, {
...props,
onMessage: onMessage,
nativeConfig: {
component: _NativeDdWebView.NativeDdWebView,
props: {
allowedHosts: props.allowedHosts
}
},
injectedJavaScript: injectedJavascript,
injectedJavaScriptBeforeContentLoaded: injectedJavascriptBeforeContentLoaded,
ref: ref
});
};
const WebView = exports.WebView = /*#__PURE__*/(0, _react.forwardRef)(WebViewComponent);
// eslint-disable-next-line import/no-default-export
var _default = exports.default = WebView;
//# sourceMappingURL=index.js.map