UNPKG

@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
"use strict"; 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