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
JavaScript
"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