react-native-bootpay-api 1.5.0 → 1.5.2

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/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ### 1.5.2
2
+ - webview version update
3
+
4
+ ### 1.5.1
5
+ - 안드로이드 팝업 일 경우 백버튼 클릭시 닫히도록 수정
6
+
1
7
  ### 1.5.0
2
8
  - webview update, android manifest 외부앱 패키지명 update
3
9
 
@@ -33,8 +33,6 @@ class BootpayWebView extends _react.Component {
33
33
  firstLoad: false
34
34
  });
35
35
 
36
- _defineProperty(this, "s", void 0);
37
-
38
36
  _defineProperty(this, "request", async (payload, items, user, extra) => {
39
37
  payload.application_id = _reactNative.Platform.OS == 'ios' ? this.props.ios_application_id : this.props.android_application_id;
40
38
  payload.items = items;
@@ -182,6 +180,19 @@ class BootpayWebView extends _react.Component {
182
180
  });
183
181
  }
184
182
 
183
+ // canGoBack() {
184
+ // console.log('canGoBack');
185
+ // if(this.webView.current) {
186
+ // return this.webView.current.canGoBack();
187
+ // }
188
+ // return false;
189
+ // }
190
+ // goBack() {
191
+ // console.log('GoBack');
192
+ // if(this.webView.goBack) {
193
+ // this.webView.current.goBack();
194
+ // }
195
+ // }
185
196
  async componentWillUnmount() {
186
197
  this.setState({
187
198
  visibility: false,
@@ -195,7 +206,12 @@ class BootpayWebView extends _react.Component {
195
206
  render() {
196
207
  return /*#__PURE__*/_react.default.createElement(_reactNative.Modal, {
197
208
  animationType: 'slide',
198
- transparent: false,
209
+ transparent: false // shouldCloseOnOverlayClick={true}
210
+ ,
211
+ onRequestClose: () => {
212
+ console.log('onRequestClose');
213
+ this.dismiss();
214
+ },
199
215
  visible: this.state.visibility
200
216
  }, /*#__PURE__*/_react.default.createElement(_reactNative.SafeAreaView, {
201
217
  style: {
@@ -221,7 +237,8 @@ class BootpayWebView extends _react.Component {
221
237
  style: [styles.overlay],
222
238
  source: require('../images/close.png')
223
239
  })), /*#__PURE__*/_react.default.createElement(_reactNativeWebviewBootpay.default, {
224
- ref: wv => this.webView = wv,
240
+ ref: wv => this.webView = wv // ref={btWebView}
241
+ ,
225
242
  useWebKit: true,
226
243
  originWhitelist: ['*'],
227
244
  source: {
@@ -229,8 +246,8 @@ class BootpayWebView extends _react.Component {
229
246
  },
230
247
  injectedJavaScript: this.state.script,
231
248
  javaScriptEnabled: true,
232
- javaScriptCanOpenWindowsAutomatically: true,
233
- scalesPageToFit: true,
249
+ javaScriptCanOpenWindowsAutomatically: true // scalesPageToFit={true}
250
+ ,
234
251
  onMessage: this.onMessage,
235
252
  onShouldStartLoadWithRequest: this.onShouldStartLoadWithRequest
236
253
  })));
@@ -1 +1 @@
1
- {"version":3,"sources":["BootpayWebView.js"],"names":["BootpayWebView","Component","useRef","WebView","visibility","script","firstLoad","payload","items","user","extra","application_id","Platform","OS","props","ios_application_id","android_application_id","user_info","quickPopup","undefined","quick_popup","setState","getMountJavascript","generateScript","showCloseButton","show_close_button","UserInfo","updateInfo","removePaymentWindow","getBootpayPlatform","getAnalyticsData","onError","onCancel","onReady","onConfirm","onClose","onDone","JSON","stringify","nativeEvent","data","json","action","message","dismiss","parse","url","callJavaScript","webView","injectJavaScript","uuid","getBootpayUUID","bootpaySK","getBootpaySK","bootLastTime","getBootpayLastTime","elaspedTime","Date","now","componentWillUnmount","setBootpayLastTime","render","state","flex","cancelData","closeData","styles","overlay","require","wv","uri","onMessage","onShouldStartLoadWithRequest","StyleSheet","create","container","justifyContent","alignItems","backgroundColor","welcome","fontSize","textAlign","margin","width","height","right","alignSelf"],"mappings":"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","sourcesContent":["\n\nimport React, { Component, useRef } from 'react';\nimport { SafeAreaView, Modal, Platform, TouchableOpacity, Image, StyleSheet } from 'react-native';\nimport WebView from 'react-native-webview-bootpay';\nimport UserInfo from './UserInfo'\n\nexport class BootpayWebView extends Component {\n webView = useRef<WebView>(null); \n\n state = {\n visibility: false, \n script: '',\n firstLoad: false\n } \ns\n async componentWillUnmount() {\n this.setState(\n {\n visibility: false, \n firstLoad: false,\n showCloseButton: false\n }\n )\n UserInfo.setBootpayLastTime(Date.now());\n }\n \n render() {\n\n\n return <Modal\n animationType={'slide'}\n transparent={false}\n visible={this.state.visibility}>\n <SafeAreaView style={{ flex: 1 }}>\n {\n this.state.showCloseButton &&\n <TouchableOpacity\n onPress={() => {\n var cancelData = {\n action: 'BootpayCancel',\n message: '사용자에 의해 취소되었습니다'\n }\n var closeData = {\n action: 'BootpayClose',\n message: '결제창이 닫혔습니다'\n }\n \n if(this.props.onCancel != undefined) this.props.onCancel(cancelData);\n if(this.props.onClose != undefined) this.props.onClose(closeData); \n\n this.setState({visibility: false})\n } }>\n <Image \n style={[styles.overlay]}\n source={require('../images/close.png')} />\n </TouchableOpacity>\n }\n <WebView\n ref={(wv) => this.webView = wv}\n useWebKit={true}\n originWhitelist={['*']}\n source={{\n uri: 'https://inapp.bootpay.co.kr/3.3.3/production.html'\n }}\n injectedJavaScript={this.state.script}\n javaScriptEnabled={true}\n javaScriptCanOpenWindowsAutomatically={true}\n scalesPageToFit={true} \n onMessage={this.onMessage}\n onShouldStartLoadWithRequest={this.onShouldStartLoadWithRequest}\n />\n </SafeAreaView>\n\n </Modal>\n }\n\n request = async (payload, items, user, extra) => { \n\n payload.application_id = Platform.OS == 'ios' ? this.props.ios_application_id : this.props.android_application_id;\n payload.items = items;\n payload.user_info = user;\n payload.extra = extra; \n \n\n var quickPopup = '';\n\n if(extra != undefined && extra.quick_popup != undefined) {\n if(extra.quick_popup == 1) {\n quickPopup = 'BootPay.startQuickPopup();';\n }\n } \n \n\n //visibility가 true가 되면 webview onLoaded가 실행됨\n this.setState(\n {\n visibility: true,\n script: `\n ${await this.getMountJavascript()}\n ${quickPopup}\n ${this.generateScript(payload)}\n `,\n firstLoad: false,\n showCloseButton: extra.show_close_button || false \n }\n ) \n\n UserInfo.updateInfo();\n }\n\n dismiss = () => {\n this.setState(\n ({ visibility }) => ({\n visibility: false\n })\n )\n this.removePaymentWindow();\n }\n \n\n getMountJavascript = async () => { \n return `\n ${this.getBootpayPlatform()}\n ${await this.getAnalyticsData()}\n `; \n }\n\n\n generateScript= (payload) => { \n const onError = '.error(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onCancel = '.cancel(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onReady = '.ready(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onConfirm = '.confirm(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onClose = '.close(function(data){ window.BootpayRNWebView.postMessage(\"close\"); })';\n const onDone = '.done(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n\n return `BootPay.request(${JSON.stringify(payload)})` + onError + onCancel + onReady + onConfirm + onClose + onDone + '; void(0);';\n }\n\n onMessage = ({ nativeEvent }) => { \n if (nativeEvent == undefined || nativeEvent.data == undefined) return;\n \n if(nativeEvent.data == 'close') {\n if(this.props.onClose == undefined) return;\n var json = {\n action: 'BootpayClose',\n message: '결제창이 닫혔습니다'\n }\n this.props.onClose(json);\n this.dismiss();\n return;\n }\n\n const data = JSON.parse(nativeEvent.data);\n switch (data.action) {\n case 'BootpayCancel':\n if(this.props.onCancel != undefined) this.props.onCancel(data);\n this.setState(\n {\n visibility: false\n }\n )\n break;\n case 'BootpayError':\n if(this.props.onError != undefined) this.props.onError(data);\n this.setState(\n {\n visibility: false\n }\n )\n break;\n case 'BootpayBankReady':\n if(this.props.onReady != undefined) this.props.onReady(data);\n break;\n case 'BootpayConfirm':\n if(this.props.onConfirm != undefined) this.props.onConfirm(data);\n break;\n case 'BootpayDone':\n if(this.props.onDone != undefined) this.props.onDone(data);\n this.setState(\n {\n visibility: false\n }\n )\n break;\n }\n }\n\n onShouldStartLoadWithRequest = (url) => { \n return true;\n }\n\n getBootpayPlatform = () => { \n if(Platform.OS == 'ios') {\n return \"BootPay.setDevice('IOS');\";\n } else if(Platform.OS == 'android'){\n return \"BootPay.setDevice('ANDROID');\"; \n }\n }\n\n // setPayScript = () => {\n // const fullScript = this.generateScript(this.state.script);\n // this.injectJavaScript(fullScript);\n // if(this.state.showCloseButton == true) {\n // if(this.webView == null || this.webView == undefined) return; \n // this.webView.showCloseButton();\n // }\n // } \n\n transactionConfirm = (data) => {\n // console.log('transactionConfirm: ' + data);\n\n var json = JSON.stringify(data)\n this.callJavaScript(`\n BootPay.transactionConfirm(${json});\n `);\n }\n\n removePaymentWindow = () => {\n this.callJavaScript(`\n BootPay.removePaymentWindow();\n `);\n } \n\n callJavaScript = (script) => {\n if(this.webView == null || this.webView == undefined) return;\n\n // console.log('callJavascript: ' + script);\n\n this.webView.injectJavaScript(`\n javascript:(function(){${script} })()\n `);\n // this.webView.evalu\n } \n\n getAnalyticsData = async () => { \n const uuid = await UserInfo.getBootpayUUID(); \n const bootpaySK = await UserInfo.getBootpaySK();\n const bootLastTime = await UserInfo.getBootpayLastTime(); \n\n\n const elaspedTime = Date.now() - bootLastTime; \n return `window.BootPay.setAnalyticsData({uuid:'${uuid}',sk:'${bootpaySK}',sk_time:${bootLastTime},time:${elaspedTime}});`;\n // this.callJavaScript(`window.BootPay.setAnalyticsData({uuid:'${uuid}',sk:'${bootpaySK}',sk_time:${bootLastTime},time:${elaspedTime}});`); \n }\n} \n\n\nvar styles = StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: '#F5FCFF',\n },\n welcome: {\n fontSize: 20,\n textAlign: 'center',\n margin: 10,\n },\n // Flex to fill, position absolute, \n // Fixed left/top, and the width set to the window width\n overlay: { \n width: 25,\n height: 25, \n right: 5,\n alignSelf: 'flex-end'\n } \n });"]}
1
+ {"version":3,"sources":["BootpayWebView.js"],"names":["BootpayWebView","Component","useRef","WebView","visibility","script","firstLoad","payload","items","user","extra","application_id","Platform","OS","props","ios_application_id","android_application_id","user_info","quickPopup","undefined","quick_popup","setState","getMountJavascript","generateScript","showCloseButton","show_close_button","UserInfo","updateInfo","removePaymentWindow","getBootpayPlatform","getAnalyticsData","onError","onCancel","onReady","onConfirm","onClose","onDone","JSON","stringify","nativeEvent","data","json","action","message","dismiss","parse","url","callJavaScript","webView","injectJavaScript","uuid","getBootpayUUID","bootpaySK","getBootpaySK","bootLastTime","getBootpayLastTime","elaspedTime","Date","now","componentWillUnmount","setBootpayLastTime","render","console","log","state","flex","cancelData","closeData","styles","overlay","require","wv","uri","onMessage","onShouldStartLoadWithRequest","StyleSheet","create","container","justifyContent","alignItems","backgroundColor","welcome","fontSize","textAlign","margin","width","height","right","alignSelf"],"mappings":"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","sourcesContent":["\n\nimport React, { Component, useRef, useEffect } from 'react';\nimport { SafeAreaView, Modal, Platform, TouchableOpacity, Image, StyleSheet, BackHandler} from 'react-native';\nimport WebView from 'react-native-webview-bootpay';\nimport UserInfo from './UserInfo'\n\nexport class BootpayWebView extends Component {\n webView = useRef<WebView>(null); \n\n \n state = {\n visibility: false, \n script: '',\n firstLoad: false\n } \n \n // canGoBack() {\n // console.log('canGoBack');\n // if(this.webView.current) {\n // return this.webView.current.canGoBack();\n // }\n // return false;\n // }\n\n // goBack() {\n // console.log('GoBack');\n // if(this.webView.goBack) {\n // this.webView.current.goBack();\n // }\n // }\n\n async componentWillUnmount() {\n this.setState(\n {\n visibility: false, \n firstLoad: false,\n showCloseButton: false\n }\n )\n UserInfo.setBootpayLastTime(Date.now());\n }\n \n render() { \n return <Modal\n animationType={'slide'}\n transparent={false}\n \n // shouldCloseOnOverlayClick={true} \n onRequestClose={()=> {\n console.log('onRequestClose');\n this.dismiss();\n }}\n visible={this.state.visibility}>\n <SafeAreaView style={{ flex: 1 }}>\n {\n this.state.showCloseButton &&\n <TouchableOpacity\n onPress={() => {\n var cancelData = {\n action: 'BootpayCancel',\n message: '사용자에 의해 취소되었습니다'\n }\n var closeData = {\n action: 'BootpayClose',\n message: '결제창이 닫혔습니다'\n }\n \n if(this.props.onCancel != undefined) this.props.onCancel(cancelData);\n if(this.props.onClose != undefined) this.props.onClose(closeData); \n\n this.setState({visibility: false})\n } }>\n <Image \n style={[styles.overlay]}\n source={require('../images/close.png')} />\n </TouchableOpacity>\n }\n <WebView\n ref={(wv) => this.webView = wv}\n // ref={btWebView}\n useWebKit={true}\n originWhitelist={['*']}\n source={{\n uri: 'https://inapp.bootpay.co.kr/3.3.3/production.html'\n }}\n injectedJavaScript={this.state.script}\n javaScriptEnabled={true}\n javaScriptCanOpenWindowsAutomatically={true}\n // scalesPageToFit={true} \n onMessage={this.onMessage}\n onShouldStartLoadWithRequest={this.onShouldStartLoadWithRequest}\n />\n </SafeAreaView>\n\n </Modal>\n }\n\n request = async (payload, items, user, extra) => { \n\n payload.application_id = Platform.OS == 'ios' ? this.props.ios_application_id : this.props.android_application_id;\n payload.items = items;\n payload.user_info = user;\n payload.extra = extra; \n \n\n var quickPopup = '';\n\n if(extra != undefined && extra.quick_popup != undefined) {\n if(extra.quick_popup == 1) {\n quickPopup = 'BootPay.startQuickPopup();';\n }\n } \n \n\n //visibility가 true가 되면 webview onLoaded가 실행됨\n this.setState(\n {\n visibility: true,\n script: `\n ${await this.getMountJavascript()}\n ${quickPopup}\n ${this.generateScript(payload)}\n `,\n firstLoad: false,\n showCloseButton: extra.show_close_button || false \n }\n ) \n\n UserInfo.updateInfo();\n }\n\n dismiss = () => {\n this.setState(\n ({ visibility }) => ({\n visibility: false\n })\n )\n this.removePaymentWindow();\n }\n \n\n getMountJavascript = async () => { \n return `\n ${this.getBootpayPlatform()}\n ${await this.getAnalyticsData()}\n `; \n }\n\n\n generateScript= (payload) => { \n const onError = '.error(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onCancel = '.cancel(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onReady = '.ready(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onConfirm = '.confirm(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onClose = '.close(function(data){ window.BootpayRNWebView.postMessage(\"close\"); })';\n const onDone = '.done(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n\n return `BootPay.request(${JSON.stringify(payload)})` + onError + onCancel + onReady + onConfirm + onClose + onDone + '; void(0);';\n }\n\n onMessage = ({ nativeEvent }) => { \n if (nativeEvent == undefined || nativeEvent.data == undefined) return;\n \n if(nativeEvent.data == 'close') {\n if(this.props.onClose == undefined) return;\n var json = {\n action: 'BootpayClose',\n message: '결제창이 닫혔습니다'\n }\n this.props.onClose(json);\n this.dismiss();\n return;\n }\n\n const data = JSON.parse(nativeEvent.data);\n switch (data.action) {\n case 'BootpayCancel':\n if(this.props.onCancel != undefined) this.props.onCancel(data);\n this.setState(\n {\n visibility: false\n }\n )\n break;\n case 'BootpayError':\n if(this.props.onError != undefined) this.props.onError(data);\n this.setState(\n {\n visibility: false\n }\n )\n break;\n case 'BootpayBankReady':\n if(this.props.onReady != undefined) this.props.onReady(data);\n break;\n case 'BootpayConfirm':\n if(this.props.onConfirm != undefined) this.props.onConfirm(data);\n break;\n case 'BootpayDone':\n if(this.props.onDone != undefined) this.props.onDone(data);\n this.setState(\n {\n visibility: false\n }\n )\n break;\n }\n }\n\n onShouldStartLoadWithRequest = (url) => { \n return true;\n }\n\n getBootpayPlatform = () => { \n if(Platform.OS == 'ios') {\n return \"BootPay.setDevice('IOS');\";\n } else if(Platform.OS == 'android'){\n return \"BootPay.setDevice('ANDROID');\"; \n }\n }\n\n // setPayScript = () => {\n // const fullScript = this.generateScript(this.state.script);\n // this.injectJavaScript(fullScript);\n // if(this.state.showCloseButton == true) {\n // if(this.webView == null || this.webView == undefined) return; \n // this.webView.showCloseButton();\n // }\n // } \n\n transactionConfirm = (data) => {\n // console.log('transactionConfirm: ' + data);\n\n var json = JSON.stringify(data)\n this.callJavaScript(`\n BootPay.transactionConfirm(${json});\n `);\n }\n\n removePaymentWindow = () => {\n this.callJavaScript(`\n BootPay.removePaymentWindow();\n `);\n } \n\n callJavaScript = (script) => {\n if(this.webView == null || this.webView == undefined) return;\n\n // console.log('callJavascript: ' + script);\n\n this.webView.injectJavaScript(`\n javascript:(function(){${script} })()\n `);\n // this.webView.evalu\n } \n\n getAnalyticsData = async () => { \n const uuid = await UserInfo.getBootpayUUID(); \n const bootpaySK = await UserInfo.getBootpaySK();\n const bootLastTime = await UserInfo.getBootpayLastTime(); \n\n\n const elaspedTime = Date.now() - bootLastTime; \n return `window.BootPay.setAnalyticsData({uuid:'${uuid}',sk:'${bootpaySK}',sk_time:${bootLastTime},time:${elaspedTime}});`;\n // this.callJavaScript(`window.BootPay.setAnalyticsData({uuid:'${uuid}',sk:'${bootpaySK}',sk_time:${bootLastTime},time:${elaspedTime}});`); \n }\n} \n\n\nvar styles = StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: '#F5FCFF',\n },\n welcome: {\n fontSize: 20,\n textAlign: 'center',\n margin: 10,\n },\n // Flex to fill, position absolute, \n // Fixed left/top, and the width set to the window width\n overlay: { \n width: 25,\n height: 25, \n right: 5,\n alignSelf: 'flex-end'\n } \n });"]}
@@ -1,7 +1,7 @@
1
1
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
2
 
3
- import React, { Component, useRef } from 'react';
4
- import { SafeAreaView, Modal, Platform, TouchableOpacity, Image, StyleSheet } from 'react-native';
3
+ import React, { Component, useRef, useEffect } from 'react';
4
+ import { SafeAreaView, Modal, Platform, TouchableOpacity, Image, StyleSheet, BackHandler } from 'react-native';
5
5
  import WebView from 'react-native-webview-bootpay';
6
6
  import UserInfo from './UserInfo';
7
7
  export class BootpayWebView extends Component {
@@ -16,8 +16,6 @@ export class BootpayWebView extends Component {
16
16
  firstLoad: false
17
17
  });
18
18
 
19
- _defineProperty(this, "s", void 0);
20
-
21
19
  _defineProperty(this, "request", async (payload, items, user, extra) => {
22
20
  payload.application_id = Platform.OS == 'ios' ? this.props.ios_application_id : this.props.android_application_id;
23
21
  payload.items = items;
@@ -164,6 +162,19 @@ export class BootpayWebView extends Component {
164
162
  });
165
163
  }
166
164
 
165
+ // canGoBack() {
166
+ // console.log('canGoBack');
167
+ // if(this.webView.current) {
168
+ // return this.webView.current.canGoBack();
169
+ // }
170
+ // return false;
171
+ // }
172
+ // goBack() {
173
+ // console.log('GoBack');
174
+ // if(this.webView.goBack) {
175
+ // this.webView.current.goBack();
176
+ // }
177
+ // }
167
178
  async componentWillUnmount() {
168
179
  this.setState({
169
180
  visibility: false,
@@ -176,7 +187,12 @@ export class BootpayWebView extends Component {
176
187
  render() {
177
188
  return /*#__PURE__*/React.createElement(Modal, {
178
189
  animationType: 'slide',
179
- transparent: false,
190
+ transparent: false // shouldCloseOnOverlayClick={true}
191
+ ,
192
+ onRequestClose: () => {
193
+ console.log('onRequestClose');
194
+ this.dismiss();
195
+ },
180
196
  visible: this.state.visibility
181
197
  }, /*#__PURE__*/React.createElement(SafeAreaView, {
182
198
  style: {
@@ -202,7 +218,8 @@ export class BootpayWebView extends Component {
202
218
  style: [styles.overlay],
203
219
  source: require('../images/close.png')
204
220
  })), /*#__PURE__*/React.createElement(WebView, {
205
- ref: wv => this.webView = wv,
221
+ ref: wv => this.webView = wv // ref={btWebView}
222
+ ,
206
223
  useWebKit: true,
207
224
  originWhitelist: ['*'],
208
225
  source: {
@@ -210,8 +227,8 @@ export class BootpayWebView extends Component {
210
227
  },
211
228
  injectedJavaScript: this.state.script,
212
229
  javaScriptEnabled: true,
213
- javaScriptCanOpenWindowsAutomatically: true,
214
- scalesPageToFit: true,
230
+ javaScriptCanOpenWindowsAutomatically: true // scalesPageToFit={true}
231
+ ,
215
232
  onMessage: this.onMessage,
216
233
  onShouldStartLoadWithRequest: this.onShouldStartLoadWithRequest
217
234
  })));
@@ -1 +1 @@
1
- {"version":3,"sources":["BootpayWebView.js"],"names":["React","Component","useRef","SafeAreaView","Modal","Platform","TouchableOpacity","Image","StyleSheet","WebView","UserInfo","BootpayWebView","visibility","script","firstLoad","payload","items","user","extra","application_id","OS","props","ios_application_id","android_application_id","user_info","quickPopup","undefined","quick_popup","setState","getMountJavascript","generateScript","showCloseButton","show_close_button","updateInfo","removePaymentWindow","getBootpayPlatform","getAnalyticsData","onError","onCancel","onReady","onConfirm","onClose","onDone","JSON","stringify","nativeEvent","data","json","action","message","dismiss","parse","url","callJavaScript","webView","injectJavaScript","uuid","getBootpayUUID","bootpaySK","getBootpaySK","bootLastTime","getBootpayLastTime","elaspedTime","Date","now","componentWillUnmount","setBootpayLastTime","render","state","flex","cancelData","closeData","styles","overlay","require","wv","uri","onMessage","onShouldStartLoadWithRequest","create","container","justifyContent","alignItems","backgroundColor","welcome","fontSize","textAlign","margin","width","height","right","alignSelf"],"mappings":"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","sourcesContent":["\n\nimport React, { Component, useRef } from 'react';\nimport { SafeAreaView, Modal, Platform, TouchableOpacity, Image, StyleSheet } from 'react-native';\nimport WebView from 'react-native-webview-bootpay';\nimport UserInfo from './UserInfo'\n\nexport class BootpayWebView extends Component {\n webView = useRef<WebView>(null); \n\n state = {\n visibility: false, \n script: '',\n firstLoad: false\n } \ns\n async componentWillUnmount() {\n this.setState(\n {\n visibility: false, \n firstLoad: false,\n showCloseButton: false\n }\n )\n UserInfo.setBootpayLastTime(Date.now());\n }\n \n render() {\n\n\n return <Modal\n animationType={'slide'}\n transparent={false}\n visible={this.state.visibility}>\n <SafeAreaView style={{ flex: 1 }}>\n {\n this.state.showCloseButton &&\n <TouchableOpacity\n onPress={() => {\n var cancelData = {\n action: 'BootpayCancel',\n message: '사용자에 의해 취소되었습니다'\n }\n var closeData = {\n action: 'BootpayClose',\n message: '결제창이 닫혔습니다'\n }\n \n if(this.props.onCancel != undefined) this.props.onCancel(cancelData);\n if(this.props.onClose != undefined) this.props.onClose(closeData); \n\n this.setState({visibility: false})\n } }>\n <Image \n style={[styles.overlay]}\n source={require('../images/close.png')} />\n </TouchableOpacity>\n }\n <WebView\n ref={(wv) => this.webView = wv}\n useWebKit={true}\n originWhitelist={['*']}\n source={{\n uri: 'https://inapp.bootpay.co.kr/3.3.3/production.html'\n }}\n injectedJavaScript={this.state.script}\n javaScriptEnabled={true}\n javaScriptCanOpenWindowsAutomatically={true}\n scalesPageToFit={true} \n onMessage={this.onMessage}\n onShouldStartLoadWithRequest={this.onShouldStartLoadWithRequest}\n />\n </SafeAreaView>\n\n </Modal>\n }\n\n request = async (payload, items, user, extra) => { \n\n payload.application_id = Platform.OS == 'ios' ? this.props.ios_application_id : this.props.android_application_id;\n payload.items = items;\n payload.user_info = user;\n payload.extra = extra; \n \n\n var quickPopup = '';\n\n if(extra != undefined && extra.quick_popup != undefined) {\n if(extra.quick_popup == 1) {\n quickPopup = 'BootPay.startQuickPopup();';\n }\n } \n \n\n //visibility가 true가 되면 webview onLoaded가 실행됨\n this.setState(\n {\n visibility: true,\n script: `\n ${await this.getMountJavascript()}\n ${quickPopup}\n ${this.generateScript(payload)}\n `,\n firstLoad: false,\n showCloseButton: extra.show_close_button || false \n }\n ) \n\n UserInfo.updateInfo();\n }\n\n dismiss = () => {\n this.setState(\n ({ visibility }) => ({\n visibility: false\n })\n )\n this.removePaymentWindow();\n }\n \n\n getMountJavascript = async () => { \n return `\n ${this.getBootpayPlatform()}\n ${await this.getAnalyticsData()}\n `; \n }\n\n\n generateScript= (payload) => { \n const onError = '.error(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onCancel = '.cancel(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onReady = '.ready(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onConfirm = '.confirm(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onClose = '.close(function(data){ window.BootpayRNWebView.postMessage(\"close\"); })';\n const onDone = '.done(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n\n return `BootPay.request(${JSON.stringify(payload)})` + onError + onCancel + onReady + onConfirm + onClose + onDone + '; void(0);';\n }\n\n onMessage = ({ nativeEvent }) => { \n if (nativeEvent == undefined || nativeEvent.data == undefined) return;\n \n if(nativeEvent.data == 'close') {\n if(this.props.onClose == undefined) return;\n var json = {\n action: 'BootpayClose',\n message: '결제창이 닫혔습니다'\n }\n this.props.onClose(json);\n this.dismiss();\n return;\n }\n\n const data = JSON.parse(nativeEvent.data);\n switch (data.action) {\n case 'BootpayCancel':\n if(this.props.onCancel != undefined) this.props.onCancel(data);\n this.setState(\n {\n visibility: false\n }\n )\n break;\n case 'BootpayError':\n if(this.props.onError != undefined) this.props.onError(data);\n this.setState(\n {\n visibility: false\n }\n )\n break;\n case 'BootpayBankReady':\n if(this.props.onReady != undefined) this.props.onReady(data);\n break;\n case 'BootpayConfirm':\n if(this.props.onConfirm != undefined) this.props.onConfirm(data);\n break;\n case 'BootpayDone':\n if(this.props.onDone != undefined) this.props.onDone(data);\n this.setState(\n {\n visibility: false\n }\n )\n break;\n }\n }\n\n onShouldStartLoadWithRequest = (url) => { \n return true;\n }\n\n getBootpayPlatform = () => { \n if(Platform.OS == 'ios') {\n return \"BootPay.setDevice('IOS');\";\n } else if(Platform.OS == 'android'){\n return \"BootPay.setDevice('ANDROID');\"; \n }\n }\n\n // setPayScript = () => {\n // const fullScript = this.generateScript(this.state.script);\n // this.injectJavaScript(fullScript);\n // if(this.state.showCloseButton == true) {\n // if(this.webView == null || this.webView == undefined) return; \n // this.webView.showCloseButton();\n // }\n // } \n\n transactionConfirm = (data) => {\n // console.log('transactionConfirm: ' + data);\n\n var json = JSON.stringify(data)\n this.callJavaScript(`\n BootPay.transactionConfirm(${json});\n `);\n }\n\n removePaymentWindow = () => {\n this.callJavaScript(`\n BootPay.removePaymentWindow();\n `);\n } \n\n callJavaScript = (script) => {\n if(this.webView == null || this.webView == undefined) return;\n\n // console.log('callJavascript: ' + script);\n\n this.webView.injectJavaScript(`\n javascript:(function(){${script} })()\n `);\n // this.webView.evalu\n } \n\n getAnalyticsData = async () => { \n const uuid = await UserInfo.getBootpayUUID(); \n const bootpaySK = await UserInfo.getBootpaySK();\n const bootLastTime = await UserInfo.getBootpayLastTime(); \n\n\n const elaspedTime = Date.now() - bootLastTime; \n return `window.BootPay.setAnalyticsData({uuid:'${uuid}',sk:'${bootpaySK}',sk_time:${bootLastTime},time:${elaspedTime}});`;\n // this.callJavaScript(`window.BootPay.setAnalyticsData({uuid:'${uuid}',sk:'${bootpaySK}',sk_time:${bootLastTime},time:${elaspedTime}});`); \n }\n} \n\n\nvar styles = StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: '#F5FCFF',\n },\n welcome: {\n fontSize: 20,\n textAlign: 'center',\n margin: 10,\n },\n // Flex to fill, position absolute, \n // Fixed left/top, and the width set to the window width\n overlay: { \n width: 25,\n height: 25, \n right: 5,\n alignSelf: 'flex-end'\n } \n });"]}
1
+ {"version":3,"sources":["BootpayWebView.js"],"names":["React","Component","useRef","useEffect","SafeAreaView","Modal","Platform","TouchableOpacity","Image","StyleSheet","BackHandler","WebView","UserInfo","BootpayWebView","visibility","script","firstLoad","payload","items","user","extra","application_id","OS","props","ios_application_id","android_application_id","user_info","quickPopup","undefined","quick_popup","setState","getMountJavascript","generateScript","showCloseButton","show_close_button","updateInfo","removePaymentWindow","getBootpayPlatform","getAnalyticsData","onError","onCancel","onReady","onConfirm","onClose","onDone","JSON","stringify","nativeEvent","data","json","action","message","dismiss","parse","url","callJavaScript","webView","injectJavaScript","uuid","getBootpayUUID","bootpaySK","getBootpaySK","bootLastTime","getBootpayLastTime","elaspedTime","Date","now","componentWillUnmount","setBootpayLastTime","render","console","log","state","flex","cancelData","closeData","styles","overlay","require","wv","uri","onMessage","onShouldStartLoadWithRequest","create","container","justifyContent","alignItems","backgroundColor","welcome","fontSize","textAlign","margin","width","height","right","alignSelf"],"mappings":"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","sourcesContent":["\n\nimport React, { Component, useRef, useEffect } from 'react';\nimport { SafeAreaView, Modal, Platform, TouchableOpacity, Image, StyleSheet, BackHandler} from 'react-native';\nimport WebView from 'react-native-webview-bootpay';\nimport UserInfo from './UserInfo'\n\nexport class BootpayWebView extends Component {\n webView = useRef<WebView>(null); \n\n \n state = {\n visibility: false, \n script: '',\n firstLoad: false\n } \n \n // canGoBack() {\n // console.log('canGoBack');\n // if(this.webView.current) {\n // return this.webView.current.canGoBack();\n // }\n // return false;\n // }\n\n // goBack() {\n // console.log('GoBack');\n // if(this.webView.goBack) {\n // this.webView.current.goBack();\n // }\n // }\n\n async componentWillUnmount() {\n this.setState(\n {\n visibility: false, \n firstLoad: false,\n showCloseButton: false\n }\n )\n UserInfo.setBootpayLastTime(Date.now());\n }\n \n render() { \n return <Modal\n animationType={'slide'}\n transparent={false}\n \n // shouldCloseOnOverlayClick={true} \n onRequestClose={()=> {\n console.log('onRequestClose');\n this.dismiss();\n }}\n visible={this.state.visibility}>\n <SafeAreaView style={{ flex: 1 }}>\n {\n this.state.showCloseButton &&\n <TouchableOpacity\n onPress={() => {\n var cancelData = {\n action: 'BootpayCancel',\n message: '사용자에 의해 취소되었습니다'\n }\n var closeData = {\n action: 'BootpayClose',\n message: '결제창이 닫혔습니다'\n }\n \n if(this.props.onCancel != undefined) this.props.onCancel(cancelData);\n if(this.props.onClose != undefined) this.props.onClose(closeData); \n\n this.setState({visibility: false})\n } }>\n <Image \n style={[styles.overlay]}\n source={require('../images/close.png')} />\n </TouchableOpacity>\n }\n <WebView\n ref={(wv) => this.webView = wv}\n // ref={btWebView}\n useWebKit={true}\n originWhitelist={['*']}\n source={{\n uri: 'https://inapp.bootpay.co.kr/3.3.3/production.html'\n }}\n injectedJavaScript={this.state.script}\n javaScriptEnabled={true}\n javaScriptCanOpenWindowsAutomatically={true}\n // scalesPageToFit={true} \n onMessage={this.onMessage}\n onShouldStartLoadWithRequest={this.onShouldStartLoadWithRequest}\n />\n </SafeAreaView>\n\n </Modal>\n }\n\n request = async (payload, items, user, extra) => { \n\n payload.application_id = Platform.OS == 'ios' ? this.props.ios_application_id : this.props.android_application_id;\n payload.items = items;\n payload.user_info = user;\n payload.extra = extra; \n \n\n var quickPopup = '';\n\n if(extra != undefined && extra.quick_popup != undefined) {\n if(extra.quick_popup == 1) {\n quickPopup = 'BootPay.startQuickPopup();';\n }\n } \n \n\n //visibility가 true가 되면 webview onLoaded가 실행됨\n this.setState(\n {\n visibility: true,\n script: `\n ${await this.getMountJavascript()}\n ${quickPopup}\n ${this.generateScript(payload)}\n `,\n firstLoad: false,\n showCloseButton: extra.show_close_button || false \n }\n ) \n\n UserInfo.updateInfo();\n }\n\n dismiss = () => {\n this.setState(\n ({ visibility }) => ({\n visibility: false\n })\n )\n this.removePaymentWindow();\n }\n \n\n getMountJavascript = async () => { \n return `\n ${this.getBootpayPlatform()}\n ${await this.getAnalyticsData()}\n `; \n }\n\n\n generateScript= (payload) => { \n const onError = '.error(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onCancel = '.cancel(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onReady = '.ready(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onConfirm = '.confirm(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onClose = '.close(function(data){ window.BootpayRNWebView.postMessage(\"close\"); })';\n const onDone = '.done(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n\n return `BootPay.request(${JSON.stringify(payload)})` + onError + onCancel + onReady + onConfirm + onClose + onDone + '; void(0);';\n }\n\n onMessage = ({ nativeEvent }) => { \n if (nativeEvent == undefined || nativeEvent.data == undefined) return;\n \n if(nativeEvent.data == 'close') {\n if(this.props.onClose == undefined) return;\n var json = {\n action: 'BootpayClose',\n message: '결제창이 닫혔습니다'\n }\n this.props.onClose(json);\n this.dismiss();\n return;\n }\n\n const data = JSON.parse(nativeEvent.data);\n switch (data.action) {\n case 'BootpayCancel':\n if(this.props.onCancel != undefined) this.props.onCancel(data);\n this.setState(\n {\n visibility: false\n }\n )\n break;\n case 'BootpayError':\n if(this.props.onError != undefined) this.props.onError(data);\n this.setState(\n {\n visibility: false\n }\n )\n break;\n case 'BootpayBankReady':\n if(this.props.onReady != undefined) this.props.onReady(data);\n break;\n case 'BootpayConfirm':\n if(this.props.onConfirm != undefined) this.props.onConfirm(data);\n break;\n case 'BootpayDone':\n if(this.props.onDone != undefined) this.props.onDone(data);\n this.setState(\n {\n visibility: false\n }\n )\n break;\n }\n }\n\n onShouldStartLoadWithRequest = (url) => { \n return true;\n }\n\n getBootpayPlatform = () => { \n if(Platform.OS == 'ios') {\n return \"BootPay.setDevice('IOS');\";\n } else if(Platform.OS == 'android'){\n return \"BootPay.setDevice('ANDROID');\"; \n }\n }\n\n // setPayScript = () => {\n // const fullScript = this.generateScript(this.state.script);\n // this.injectJavaScript(fullScript);\n // if(this.state.showCloseButton == true) {\n // if(this.webView == null || this.webView == undefined) return; \n // this.webView.showCloseButton();\n // }\n // } \n\n transactionConfirm = (data) => {\n // console.log('transactionConfirm: ' + data);\n\n var json = JSON.stringify(data)\n this.callJavaScript(`\n BootPay.transactionConfirm(${json});\n `);\n }\n\n removePaymentWindow = () => {\n this.callJavaScript(`\n BootPay.removePaymentWindow();\n `);\n } \n\n callJavaScript = (script) => {\n if(this.webView == null || this.webView == undefined) return;\n\n // console.log('callJavascript: ' + script);\n\n this.webView.injectJavaScript(`\n javascript:(function(){${script} })()\n `);\n // this.webView.evalu\n } \n\n getAnalyticsData = async () => { \n const uuid = await UserInfo.getBootpayUUID(); \n const bootpaySK = await UserInfo.getBootpaySK();\n const bootLastTime = await UserInfo.getBootpayLastTime(); \n\n\n const elaspedTime = Date.now() - bootLastTime; \n return `window.BootPay.setAnalyticsData({uuid:'${uuid}',sk:'${bootpaySK}',sk_time:${bootLastTime},time:${elaspedTime}});`;\n // this.callJavaScript(`window.BootPay.setAnalyticsData({uuid:'${uuid}',sk:'${bootpaySK}',sk_time:${bootLastTime},time:${elaspedTime}});`); \n }\n} \n\n\nvar styles = StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: '#F5FCFF',\n },\n welcome: {\n fontSize: 20,\n textAlign: 'center',\n margin: 10,\n },\n // Flex to fill, position absolute, \n // Fixed left/top, and the width set to the window width\n overlay: { \n width: 25,\n height: 25, \n right: 5,\n alignSelf: 'flex-end'\n } \n });"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-bootpay-api",
3
- "version": "1.5.0",
3
+ "version": "1.5.2",
4
4
  "description": "React Native를 위한 bootpay 라이브러리 입니다.",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -26,14 +26,18 @@
26
26
  "!**/__mocks__"
27
27
  ],
28
28
  "scripts": {
29
- "test": "jest",
30
- "typescript": "tsc --noEmit",
31
- "lint": "eslint \"**/*.{js,ts,tsx}\"",
32
- "prepare": "bob build",
33
- "release": "release-it",
34
- "example": "yarn --cwd example",
35
- "pods": "cd example && pod-install --quiet",
36
- "bootstrap": "yarn example && yarn && yarn pods"
29
+ "android": "react-native run-android",
30
+ "ios": "react-native run-ios --project-path example/ios",
31
+ "macos": "react-native run-macos --scheme WebviewExample --project-path example/macos",
32
+ "start": "cd example && react-native start",
33
+ "windows": "install-windows-test-app --project-directory example/windows && react-native run-windows --root example --arch x64",
34
+ "ci": "CI=true && yarn lint",
35
+ "ci:publish": "yarn semantic-release",
36
+ "lint": "yarn tsc --noEmit && yarn eslint ./src --ext .ts,.tsx",
37
+ "build": "yarn tsc",
38
+ "prepare": "yarn build",
39
+ "appium": "appium",
40
+ "test:windows": "yarn jest --setupFiles=./jest-setups/jest.setup.js"
37
41
  },
38
42
  "keywords": [
39
43
  "react-native",
@@ -51,96 +55,46 @@
51
55
  "registry": "https://registry.npmjs.org/"
52
56
  },
53
57
  "devDependencies": {
54
- "@commitlint/config-conventional": "^11.0.0",
55
- "@react-native-community/eslint-config": "^2.0.0",
56
- "@release-it/conventional-changelog": "^2.0.0",
58
+ "@babel/core": "^7.0.0",
59
+ "@babel/runtime": "^7.0.0",
60
+ "@react-native-community/cli": "^6.0.0",
61
+ "@react-native-community/cli-platform-android": "^6.0.0",
62
+ "@react-native-community/cli-platform-ios": "^6.0.0",
63
+ "@semantic-release/git": "7.0.16",
64
+ "@types/invariant": "^2.2.30",
57
65
  "@types/jest": "^26.0.0",
58
- "@types/react": "^16.9.19",
59
- "@types/react-native": "0.62.13",
60
- "commitlint": "^11.0.0",
61
- "eslint": "^7.2.0",
62
- "jest": "^26.0.1",
63
- "pod-install": "^0.1.0",
64
- "prettier": "^2.0.5",
65
- "react": "16.13.1",
66
- "react-native": "0.63.4",
67
- "react-native-builder-bob": "^0.18.0",
68
- "release-it": "^14.2.2",
69
- "typescript": "^4.1.3",
70
- "react-native-webview-bootpay": "^11.6.5",
71
- "react-native-device-info": "^8.4.0",
66
+ "@types/react": "^17.0.0",
67
+ "@types/react-native": "^0.64.0",
68
+ "@types/selenium-webdriver": "4.0.9",
69
+ "@typescript-eslint/eslint-plugin": "2.1.0",
70
+ "@typescript-eslint/parser": "2.1.0",
71
+ "appium": "1.17.0",
72
+ "eslint": "6.3.0",
73
+ "eslint-config-airbnb": "18.0.1",
74
+ "eslint-config-prettier": "6.2.0",
75
+ "eslint-plugin-import": "2.18.2",
76
+ "eslint-plugin-jsx-a11y": "6.2.3",
77
+ "eslint-plugin-react": "7.14.3",
78
+ "eslint-plugin-react-native": "3.7.0",
79
+ "jest": "^26.6.3",
80
+ "metro-react-native-babel-preset": "^0.66.2",
81
+ "react": "17.0.2",
82
+ "react-native": "^0.66.0-0",
83
+ "react-native-macos": "^0.66.0-0",
84
+ "react-native-test-app": "^1.3.2",
85
+ "react-native-windows": "^0.66.0-0",
86
+ "selenium-appium": "1.0.2",
87
+ "selenium-webdriver": "4.0.0-alpha.7",
88
+ "semantic-release": "15.13.24",
89
+ "typescript": "^4.0.0",
90
+ "react-native-webview-bootpay": "^11.18.13",
91
+ "react-native-device-info": "^8.7.0",
72
92
  "react-native-sensitive-info": "^5.5.8",
73
93
  "react-native-base64": "^0.2.1",
74
- "react-native-aes-crypto": "^1.3.10"
94
+ "react-native-aes-crypto": "^2.1.0"
75
95
  },
76
96
  "peerDependencies": {
77
97
  "react": "*",
78
98
  "react-native": "*"
79
- },
80
- "jest": {
81
- "preset": "react-native",
82
- "modulePathIgnorePatterns": [
83
- "<rootDir>/example/node_modules",
84
- "<rootDir>/lib/"
85
- ]
86
- },
87
- "commitlint": {
88
- "extends": [
89
- "@commitlint/config-conventional"
90
- ]
91
- },
92
- "release-it": {
93
- "git": {
94
- "commitMessage": "chore: release ${version}",
95
- "tagName": "v${version}"
96
- },
97
- "npm": {
98
- "publish": true
99
- },
100
- "github": {
101
- "release": true
102
- },
103
- "plugins": {
104
- "@release-it/conventional-changelog": {
105
- "preset": "angular"
106
- }
107
- }
108
- },
109
- "eslintConfig": {
110
- "root": true,
111
- "extends": [
112
- "@react-native-community",
113
- "prettier"
114
- ],
115
- "rules": {
116
- "prettier/prettier": [
117
- "error",
118
- {
119
- "quoteProps": "consistent",
120
- "singleQuote": true,
121
- "tabWidth": 2,
122
- "trailingComma": "es5",
123
- "useTabs": false
124
- }
125
- ]
126
- }
127
- },
128
- "eslintIgnore": [
129
- "node_modules/",
130
- "lib/"
131
- ],
132
- "react-native-builder-bob": {
133
- "source": "src",
134
- "output": "lib",
135
- "targets": [
136
- "commonjs",
137
- "module",
138
- [
139
- "typescript",
140
- {
141
- "project": "tsconfig.build.json"
142
- }
143
- ]
144
- ]
145
99
  }
146
100
  }
@@ -1,19 +1,35 @@
1
1
 
2
2
 
3
- import React, { Component, useRef } from 'react';
4
- import { SafeAreaView, Modal, Platform, TouchableOpacity, Image, StyleSheet } from 'react-native';
3
+ import React, { Component, useRef, useEffect } from 'react';
4
+ import { SafeAreaView, Modal, Platform, TouchableOpacity, Image, StyleSheet, BackHandler} from 'react-native';
5
5
  import WebView from 'react-native-webview-bootpay';
6
6
  import UserInfo from './UserInfo'
7
7
 
8
8
  export class BootpayWebView extends Component {
9
9
  webView = useRef<WebView>(null);
10
10
 
11
+
11
12
  state = {
12
13
  visibility: false,
13
14
  script: '',
14
15
  firstLoad: false
15
16
  }
16
- s
17
+
18
+ // canGoBack() {
19
+ // console.log('canGoBack');
20
+ // if(this.webView.current) {
21
+ // return this.webView.current.canGoBack();
22
+ // }
23
+ // return false;
24
+ // }
25
+
26
+ // goBack() {
27
+ // console.log('GoBack');
28
+ // if(this.webView.goBack) {
29
+ // this.webView.current.goBack();
30
+ // }
31
+ // }
32
+
17
33
  async componentWillUnmount() {
18
34
  this.setState(
19
35
  {
@@ -25,12 +41,13 @@ s
25
41
  UserInfo.setBootpayLastTime(Date.now());
26
42
  }
27
43
 
28
- render() {
29
-
30
-
44
+ render() {
31
45
  return <Modal
32
46
  animationType={'slide'}
33
- transparent={false}
47
+ transparent={false}
48
+ onRequestClose={()=> {
49
+ this.dismiss();
50
+ }}
34
51
  visible={this.state.visibility}>
35
52
  <SafeAreaView style={{ flex: 1 }}>
36
53
  {
@@ -58,15 +75,20 @@ s
58
75
  }
59
76
  <WebView
60
77
  ref={(wv) => this.webView = wv}
78
+ // ref={btWebView}
61
79
  useWebKit={true}
62
80
  originWhitelist={['*']}
63
81
  source={{
64
82
  uri: 'https://inapp.bootpay.co.kr/3.3.3/production.html'
65
83
  }}
84
+ onRequestClose={()=> {
85
+ console.log('onRequestClose');
86
+ this.dismiss();
87
+ }}
66
88
  injectedJavaScript={this.state.script}
67
89
  javaScriptEnabled={true}
68
90
  javaScriptCanOpenWindowsAutomatically={true}
69
- scalesPageToFit={true}
91
+ // scalesPageToFit={true}
70
92
  onMessage={this.onMessage}
71
93
  onShouldStartLoadWithRequest={this.onShouldStartLoadWithRequest}
72
94
  />
@@ -0,0 +1,15 @@
1
+ import { Component } from 'react';
2
+ export default class UserInfo extends Component {
3
+ static getBootpayInfo: (key: string, defaultVal: any) => Promise<unknown>;
4
+ static setBootpayInfo: (key: string, val: any) => Promise<unknown>;
5
+ static getBootpayUUID: () => Promise<unknown>;
6
+ static getBootpaySK: () => Promise<unknown>;
7
+ static setBootpaySK: (val: string) => Promise<unknown>;
8
+ static newBootpaySK: (uuid: string, time: number) => Promise<unknown>;
9
+ static getBootpayLastTime: () => Promise<unknown>;
10
+ static setBootpayLastTime(val: number): Promise<unknown>;
11
+ static getBootpayUserId(): Promise<unknown>;
12
+ static setBootpayUserId: (val: string) => Promise<unknown>;
13
+ static updateInfo: () => Promise<void>;
14
+ }
15
+ //# sourceMappingURL=UserInfo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserInfo.d.ts","sourceRoot":"","sources":["UserInfo.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlC,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,SAAS;IAC3C,MAAM,CAAC,cAAc,QAAS,MAAM,cAAc,GAAG,sBAYpD;IAED,MAAM,CAAC,cAAc,QAAS,MAAM,OAAO,GAAG,sBAW7C;IAED,MAAM,CAAC,cAAc,yBAGpB;IAED,MAAM,CAAC,YAAY,yBAElB;IAED,MAAM,CAAC,YAAY,QAAS,MAAM,sBAEjC;IAED,MAAM,CAAC,YAAY,SAAU,MAAM,QAAQ,MAAM,sBAEhD;IAED,MAAM,CAAC,kBAAkB,yBAExB;IAED,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,MAAM;IAIrC,MAAM,CAAC,gBAAgB;IAIvB,MAAM,CAAC,gBAAgB,QAAS,MAAM,sBAErC;IAED,MAAM,CAAC,UAAU,sBAWhB;CACJ"}
@@ -0,0 +1,67 @@
1
+ import { Component } from 'react';
2
+ import DeviceInfo from 'react-native-device-info';
3
+ import SInfo from 'react-native-sensitive-info';
4
+ export default class UserInfo extends Component {
5
+ static getBootpayInfo = (key, defaultVal) => {
6
+ return new Promise((resolve, reject) => {
7
+ SInfo.getItem(key, {
8
+ sharedPreferencesName: 'bootpaySharedPrefs',
9
+ keychainService: 'bootpayKeychain'
10
+ }).then((res) => {
11
+ res == undefined ? resolve(defaultVal) : resolve(res);
12
+ resolve(res);
13
+ }).catch((error) => {
14
+ reject(error);
15
+ });
16
+ });
17
+ };
18
+ static setBootpayInfo = (key, val) => {
19
+ return new Promise((resolve, reject) => {
20
+ SInfo.setItem(String(key), String(val), {
21
+ sharedPreferencesName: 'bootpaySharedPrefs',
22
+ keychainService: 'bootpayKeychain'
23
+ }).then((res) => {
24
+ resolve(res);
25
+ }).catch((error) => {
26
+ reject(error);
27
+ });
28
+ });
29
+ };
30
+ static getBootpayUUID = () => {
31
+ let uuid = DeviceInfo.getUniqueId();
32
+ return UserInfo.setBootpayInfo('uuid', uuid);
33
+ };
34
+ static getBootpaySK = () => {
35
+ return UserInfo.getBootpayInfo('bootpay_sk', '');
36
+ };
37
+ static setBootpaySK = (val) => {
38
+ return UserInfo.setBootpayInfo('bootpay_sk', val);
39
+ };
40
+ static newBootpaySK = (uuid, time) => {
41
+ return UserInfo.setBootpaySK(`${uuid}_${time}`);
42
+ };
43
+ static getBootpayLastTime = async () => {
44
+ return await UserInfo.getBootpayInfo('bootpay_last_time', 0);
45
+ };
46
+ static setBootpayLastTime(val) {
47
+ return UserInfo.setBootpayInfo('bootpay_last_time', val);
48
+ }
49
+ static getBootpayUserId() {
50
+ return UserInfo.getBootpayInfo('bootpay_user_id', '');
51
+ }
52
+ static setBootpayUserId = (val) => {
53
+ return UserInfo.setBootpayInfo('bootpay_user_id', val);
54
+ };
55
+ static updateInfo = async () => {
56
+ const uuid = await UserInfo.getBootpayUUID();
57
+ const bootpaySK = await UserInfo.getBootpaySK();
58
+ const lastTime = await UserInfo.getBootpayLastTime();
59
+ let current = Date.now();
60
+ if (bootpaySK == '')
61
+ await UserInfo.newBootpaySK(uuid, current);
62
+ const isExpired = current - lastTime > 30 * 60 * 1000;
63
+ if (isExpired)
64
+ await UserInfo.newBootpaySK(uuid, current);
65
+ await UserInfo.setBootpayLastTime(current);
66
+ };
67
+ }