@kimafinance/kima-transaction-widget 1.2.29-beta.1 → 1.2.30-beta.1

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.
@@ -1,7 +1,5 @@
1
1
  import React from 'react';
2
- import { PendingTxData } from '../../utils/constants';
3
- declare const PendingTxPopup: ({ txData, handleHtlcContinue }: {
4
- txData: Array<PendingTxData>;
2
+ declare const PendingTxPopup: ({ handleHtlcContinue }: {
5
3
  handleHtlcContinue: (expireTime: any, hash: any, amount: any) => {};
6
4
  }) => React.JSX.Element;
7
5
  export default PendingTxPopup;
@@ -1,7 +1,6 @@
1
1
  import React from 'react';
2
2
  import { ThemeOptions } from '../../interface';
3
- declare const TxButton: ({ theme, txCount }: {
3
+ declare const TxButton: ({ theme }: {
4
4
  theme: ThemeOptions;
5
- txCount: number;
6
5
  }) => React.JSX.Element;
7
6
  export default TxButton;
package/dist/index.js CHANGED
@@ -1204,7 +1204,9 @@ var _optionSlice$actions = optionSlice.actions,
1204
1204
  setSignature = _optionSlice$actions.setSignature,
1205
1205
  setUuid = _optionSlice$actions.setUuid,
1206
1206
  setKYCStatus = _optionSlice$actions.setKYCStatus,
1207
- setExpireTime = _optionSlice$actions.setExpireTime;
1207
+ setExpireTime = _optionSlice$actions.setExpireTime,
1208
+ setPendingTxData = _optionSlice$actions.setPendingTxData,
1209
+ setPendingTxs = _optionSlice$actions.setPendingTxs;
1208
1210
  var optionReducer = optionSlice.reducer;
1209
1211
 
1210
1212
  var configureStore = toolkitRaw.configureStore;
@@ -1420,6 +1422,9 @@ var selectHelpPopup = function selectHelpPopup(state) {
1420
1422
  var selectHashPopup = function selectHashPopup(state) {
1421
1423
  return state.option.hashPopup;
1422
1424
  };
1425
+ var selectPendingTxPopup = function selectPendingTxPopup(state) {
1426
+ return state.option.pendingTxPopup;
1427
+ };
1423
1428
  var selectBankPopup = function selectBankPopup(state) {
1424
1429
  return state.option.bankPopup;
1425
1430
  };
@@ -1510,6 +1515,9 @@ var selectExpireTime = function selectExpireTime(state) {
1510
1515
  var selectPendingTxs = function selectPendingTxs(state) {
1511
1516
  return state.option.pendingTxs;
1512
1517
  };
1518
+ var selectPendingTxData = function selectPendingTxData(state) {
1519
+ return state.option.pendingTxData;
1520
+ };
1513
1521
 
1514
1522
  var Loading180Ring = function Loading180Ring(_ref) {
1515
1523
  var _ref$width = _ref.width,
@@ -2194,7 +2202,7 @@ function useIsWalletReady() {
2194
2202
  if (bitcoinAddress) {
2195
2203
  return createWalletStatus(true, undefined, connectBitcoinWallet, bitcoinAddress);
2196
2204
  }
2197
- return createWalletStatus(false, 'Xverse wallet connection error', connectBitcoinWallet, '');
2205
+ return createWalletStatus(false, 'Xverse wallet not connected', connectBitcoinWallet, '');
2198
2206
  } else if (isEVMChain(correctChain) && hasEthInfo && evmAddress) {
2199
2207
  if (hasCorrectEvmNetwork) {
2200
2208
  return createWalletStatus(true, undefined, connectBitcoinWallet, evmAddress);
@@ -3239,12 +3247,12 @@ var BankInput = function BankInput() {
3239
3247
  };
3240
3248
 
3241
3249
  var TxButton = function TxButton(_ref) {
3242
- var theme = _ref.theme,
3243
- txCount = _ref.txCount;
3250
+ var theme = _ref.theme;
3244
3251
  var dispatch = reactRedux.useDispatch();
3245
3252
  var handleClick = function handleClick() {
3246
3253
  dispatch(setPendingTxPopup(true));
3247
3254
  };
3255
+ var txCount = reactRedux.useSelector(selectPendingTxs);
3248
3256
  return React__default.createElement("button", {
3249
3257
  className: "secondary-button tx-button " + theme.colorMode,
3250
3258
  onClick: handleClick,
@@ -8039,6 +8047,82 @@ function htlcP2WSHAddress(htlcScript, network) {
8039
8047
  return p2wsh.address;
8040
8048
  }
8041
8049
 
8050
+ var PendingTxPopup = function PendingTxPopup(_ref) {
8051
+ var handleHtlcContinue = _ref.handleHtlcContinue;
8052
+ var dispatch = reactRedux.useDispatch();
8053
+ var theme = reactRedux.useSelector(selectTheme);
8054
+ var pendingTxPopup = reactRedux.useSelector(selectPendingTxPopup);
8055
+ var txData = reactRedux.useSelector(selectPendingTxData);
8056
+ return React__default.createElement("div", {
8057
+ className: "kima-modal pending-tx-popup " + theme.colorMode + " " + (pendingTxPopup ? 'open' : '')
8058
+ }, React__default.createElement("div", {
8059
+ className: 'modal-overlay',
8060
+ onClick: function onClick() {
8061
+ dispatch(setPendingTxPopup(false));
8062
+ }
8063
+ }), React__default.createElement("div", {
8064
+ className: 'modal-content-container'
8065
+ }, React__default.createElement("div", {
8066
+ className: 'kima-card-header'
8067
+ }, React__default.createElement("div", {
8068
+ className: 'topbar'
8069
+ }, React__default.createElement("div", {
8070
+ className: 'title'
8071
+ }, React__default.createElement("h3", null, "Bitcoin Transaction List")), React__default.createElement("div", {
8072
+ className: 'control-buttons'
8073
+ }, React__default.createElement("button", {
8074
+ className: 'icon-button',
8075
+ onClick: function onClick() {
8076
+ return dispatch(setPendingTxPopup(false));
8077
+ }
8078
+ }, React__default.createElement(Cross, {
8079
+ fill: theme.colorMode === 'light' ? 'black' : 'white'
8080
+ }))))), React__default.createElement("div", {
8081
+ className: 'modal-content'
8082
+ }, React__default.createElement("div", {
8083
+ className: 'scroll-area custom-scrollbar'
8084
+ }, React__default.createElement("div", {
8085
+ className: 'header-container'
8086
+ }, React__default.createElement("span", null, "Amount"), React__default.createElement("span", null, "Expire Time"), React__default.createElement("span", null, "Status"), React__default.createElement("span", null, "Hash"), React__default.createElement("span", null, "Action")), React__default.createElement("div", {
8087
+ className: 'tx-container'
8088
+ }, txData.map(function (tx, index) {
8089
+ var date = new Date(+tx.expireTime * 1000);
8090
+ var year = date.getFullYear();
8091
+ var month = date.getMonth() + 1;
8092
+ var day = date.getDate();
8093
+ var hours = date.getHours();
8094
+ var minutes = date.getMinutes();
8095
+ var seconds = date.getSeconds();
8096
+ var formattedDate = year + "-" + month.toString().padStart(2, '0') + "-" + day.toString().padStart(2, '0') + " " + hours.toString().padStart(2, '0') + ":" + minutes.toString().padStart(2, '0') + ":" + seconds.toString().padStart(2, '0');
8097
+ return React__default.createElement("div", {
8098
+ className: 'tx-item',
8099
+ key: index
8100
+ }, React__default.createElement("div", {
8101
+ className: 'label'
8102
+ }, React__default.createElement("div", {
8103
+ className: 'icon-wrapper'
8104
+ }, (+tx.amount).toFixed(8), React__default.createElement(BTC, null))), React__default.createElement("span", {
8105
+ className: 'label'
8106
+ }, "" + formattedDate), React__default.createElement("span", {
8107
+ className: 'label'
8108
+ }, tx.status), React__default.createElement("div", {
8109
+ className: 'label'
8110
+ }, React__default.createElement(ExternalLink, {
8111
+ to: "https://" + CHAIN_NAMES_TO_EXPLORER[exports.SupportNetworks.BTC] + "/tx/" + tx.hash
8112
+ }, getShortenedAddress(tx.hash))), React__default.createElement("div", {
8113
+ className: "action-button-container " + (tx.status === 'Pending' || tx.status === 'Failed' ? '' : 'disabled')
8114
+ }, React__default.createElement("div", {
8115
+ className: 'action-button'
8116
+ }, "Reclaim"), React__default.createElement("div", {
8117
+ className: 'action-button',
8118
+ onClick: function onClick() {
8119
+ handleHtlcContinue(tx.expireTime, tx.hash, tx.amount);
8120
+ dispatch(setPendingTxPopup(false));
8121
+ }
8122
+ }, "Continue")));
8123
+ }))))));
8124
+ };
8125
+
8042
8126
  var TransferWidget = function TransferWidget(_ref) {
8043
8127
  var _theme$backgroundColo;
8044
8128
  var theme = _ref.theme,
@@ -8280,6 +8364,19 @@ var TransferWidget = function TransferWidget(_ref) {
8280
8364
  return Promise.reject(e);
8281
8365
  }
8282
8366
  };
8367
+ var handleHtlcContinue = function handleHtlcContinue(expireTime, hash, amount) {
8368
+ try {
8369
+ setBTCTimestamp(expireTime);
8370
+ setBTCSigning(false);
8371
+ setBTCSigned(true);
8372
+ setBTCHash(hash);
8373
+ dispatch(setFeeDeduct(true));
8374
+ dispatch(setAmount(amount));
8375
+ return Promise.resolve();
8376
+ } catch (e) {
8377
+ return Promise.reject(e);
8378
+ }
8379
+ };
8283
8380
  var handleSubmit = function handleSubmit() {
8284
8381
  try {
8285
8382
  var _temp8 = function _temp8(_result) {
@@ -8567,6 +8664,53 @@ var TransferWidget = function TransferWidget(_ref) {
8567
8664
  React.useEffect(function () {
8568
8665
  dispatch(setTheme(theme));
8569
8666
  }, [theme]);
8667
+ React.useEffect(function () {
8668
+ if (!nodeProviderQuery || sourceChain !== exports.SupportNetworks.BTC || !walletAddress) return;
8669
+ var updatePendingTxs = function updatePendingTxs() {
8670
+ try {
8671
+ return Promise.resolve(fetchWrapper.get(nodeProviderQuery + "/kima-finance/kima-blockchain/transaction/get_htlc_transaction/" + walletAddress)).then(function (result) {
8672
+ var data = result === null || result === void 0 ? void 0 : result.htlcLockingTransaction;
8673
+ var txData = [];
8674
+ if (data.length > 0) {
8675
+ for (var _iterator5 = _createForOfIteratorHelperLoose(data), _step5; !(_step5 = _iterator5()).done;) {
8676
+ var tx = _step5.value;
8677
+ var status = '';
8678
+ if (tx.status !== 'Completed') {
8679
+ status = 'Confirming';
8680
+ } else if (tx.pull_status === 'htlc_pull_available') {
8681
+ status = 'Pending';
8682
+ } else if (tx.pull_status === 'htlc_pull_in_progress') {
8683
+ status = 'In Progress';
8684
+ } else if (tx.pull_status === 'htlc_pull_succeed') {
8685
+ status = 'Completed';
8686
+ } else if (tx.pull_status === 'htlc_pull_failed') {
8687
+ status = 'Failed';
8688
+ }
8689
+ txData.push({
8690
+ hash: tx.txHash,
8691
+ amount: tx.amount,
8692
+ expireTime: tx.htlcTimestamp,
8693
+ status: status
8694
+ });
8695
+ }
8696
+ dispatch(setPendingTxData([].concat(txData)));
8697
+ dispatch(setPendingTxs(txData.filter(function (tx) {
8698
+ return tx.status === 'Pending' || tx.status === 'Confirming';
8699
+ }).length));
8700
+ }
8701
+ });
8702
+ } catch (e) {
8703
+ return Promise.reject(e);
8704
+ }
8705
+ };
8706
+ var timerId = setInterval(function () {
8707
+ updatePendingTxs();
8708
+ }, 10000);
8709
+ updatePendingTxs();
8710
+ return function () {
8711
+ clearInterval(timerId);
8712
+ };
8713
+ }, [sourceChain, nodeProviderQuery, walletAddress]);
8570
8714
  return React__default.createElement("div", {
8571
8715
  className: "kima-card " + theme.colorMode + " font-" + theme.fontSize,
8572
8716
  style: {
@@ -8582,8 +8726,7 @@ var TransferWidget = function TransferWidget(_ref) {
8582
8726
  }, React__default.createElement("h3", null, isWizard && wizardStep === 3 || !isWizard && formStep > 0 ? titleOption !== null && titleOption !== void 0 && titleOption.confirmTitle ? titleOption === null || titleOption === void 0 ? void 0 : titleOption.confirmTitle : 'Transfer Details' : titleOption !== null && titleOption !== void 0 && titleOption.initialTitle ? titleOption === null || titleOption === void 0 ? void 0 : titleOption.initialTitle : 'New Transfer')), React__default.createElement("div", {
8583
8727
  className: 'control-buttons'
8584
8728
  }, pendingTxs > 0 ? React__default.createElement(TxButton, {
8585
- theme: theme,
8586
- txCount: pendingTxs
8729
+ theme: theme
8587
8730
  }) : null, React__default.createElement(ExternalLink, {
8588
8731
  to: helpURL ? helpURL : 'https://docs.kima.finance/demo'
8589
8732
  }, React__default.createElement("div", {
@@ -8668,6 +8811,8 @@ var TransferWidget = function TransferWidget(_ref) {
8668
8811
  background: theme.colorMode === exports.ColorModeOptions.light ? 'white' : (_theme$backgroundColo = theme.backgroundColorDark) != null ? _theme$backgroundColo : '#1b1e25'
8669
8812
  }
8670
8813
  }
8814
+ }), React__default.createElement(PendingTxPopup, {
8815
+ handleHtlcContinue: handleHtlcContinue
8671
8816
  }), React__default.createElement(reactTooltip.Tooltip, {
8672
8817
  id: 'popup-tooltip',
8673
8818
  className: "popup-tooltip " + theme.colorMode,