UNPKG

react-native-klarna-inapp-sdk

Version:

This library wraps Klarna Mobile SDK and exposes its functionality as React Native components.

92 lines (91 loc) 4.01 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.KlarnaOSMView = void 0; var _react = _interopRequireWildcard(require("react")); var _reactNative = require("react-native"); var _KlarnaTheme = require("./types/common/KlarnaTheme"); var _KlarnaOSMViewNativeComponent = _interopRequireWildcard(require("./specs/KlarnaOSMViewNativeComponent")); 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); } class KlarnaOSMView extends _react.Component { isOSMViewReady = false; hasError = false; constructor(props) { super(props); this.state = { nativeViewHeight: 0 }; this.osmViewRef = /*#__PURE__*/_react.default.createRef(); } componentDidUpdate(prevProps) { if (this.isOSMViewReady && (prevProps.clientId !== this.props.clientId || prevProps.placementKey !== this.props.placementKey || prevProps.locale !== this.props.locale || prevProps.purchaseAmount !== this.props.purchaseAmount || prevProps.environment !== this.props.environment || prevProps.region !== this.props.region || prevProps.theme !== this.props.theme || prevProps.backgroundColor !== this.props.backgroundColor || prevProps.textColor !== this.props.textColor)) { this.renderNative(); } } componentWillUnmount() { this.isOSMViewReady = false; } render() { return /*#__PURE__*/_react.default.createElement(_KlarnaOSMViewNativeComponent.default, { ref: this.osmViewRef, style: [styles.container, this.props.style, { height: this.state.nativeViewHeight }], clientId: this.props.clientId, placementKey: this.props.placementKey, locale: this.props.locale, purchaseAmount: this.props.purchaseAmount, environment: this.props.environment, region: this.props.region, theme: this.props.theme ?? _KlarnaTheme.KlarnaTheme.Automatic, backgroundColor: this.props.backgroundColor ?? '', textColor: this.props.textColor ?? '', returnUrl: this.props.returnUrl ?? '', onError: event => { var _this$props$onError, _this$props; const mobileSdkError = { isFatal: event.nativeEvent.error.isFatal, message: event.nativeEvent.error.message, name: event.nativeEvent.error.name }; this.hasError = true; this.setState({ nativeViewHeight: 0 }); (_this$props$onError = (_this$props = this.props).onError) === null || _this$props$onError === void 0 || _this$props$onError.call(_this$props, mobileSdkError); }, onResized: event => { if (this.hasError) { return; } const newHeight = Number(event.nativeEvent.height); if (!Number.isNaN(newHeight) && newHeight !== this.state.nativeViewHeight) { this.setState({ nativeViewHeight: newHeight }); } }, onOSMViewReady: () => { this.isOSMViewReady = true; setTimeout(() => this.renderNative(), 0); } }); } renderNative = () => { this.hasError = false; const view = this.osmViewRef.current; if (view != null) { _KlarnaOSMViewNativeComponent.Commands.render(view); } }; } exports.KlarnaOSMView = KlarnaOSMView; const styles = _reactNative.StyleSheet.create({ container: { width: '100%', overflow: 'hidden' } }); var _default = exports.default = KlarnaOSMView; //# sourceMappingURL=KlarnaOSMView.js.map