mirror of
https://github.com/Qortal/qortal-ui.git
synced 2025-02-11 17:55:51 +00:00
Added Pirate Chain to wallet (unfinished)
- Address derivation isn't working yet as it appears to be different for Zcash derived coins - Core APIs will be different for ARRR, and these aren't in place in the UI yet IMPORTANT: Do not use this branch for anything other than development, or coins could be lost.
This commit is contained in:
parent
ffa19210e0
commit
9b4a763bca
@ -22,6 +22,7 @@ const sendLtc = api.sendLtc
|
||||
const sendDoge = api.sendDoge
|
||||
const sendDgb = api.sendDgb
|
||||
const sendRvn = api.sendRvn
|
||||
const sendArrr = api.sendArrr
|
||||
|
||||
export const routes = {
|
||||
hello: async (req) => {
|
||||
@ -361,4 +362,17 @@ export const routes = {
|
||||
}
|
||||
return response
|
||||
},
|
||||
|
||||
sendArrr: async (req) => {
|
||||
let response
|
||||
try {
|
||||
const res = await sendArrr(req.data)
|
||||
response = res
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
console.error(e.message)
|
||||
response = e.message
|
||||
}
|
||||
return response
|
||||
},
|
||||
}
|
||||
|
@ -168,6 +168,21 @@ export default class PhraseWallet {
|
||||
}
|
||||
}).createWallet(new Uint8Array(rvnSeed), false, 'RVN');
|
||||
|
||||
// Create Pirate Chain HD Wallet
|
||||
const arrrSeed = [...addrSeed];
|
||||
const arrrWallet = new AltcoinHDWallet({
|
||||
mainnet: {
|
||||
private: 0x0488ADE4,
|
||||
public: 0x0488B21E,
|
||||
prefix: [0x16, 0x9A]
|
||||
},
|
||||
testnet: {
|
||||
private: 0x04358394,
|
||||
public: 0x043587CF,
|
||||
prefix: [0x14, 0x51]
|
||||
}
|
||||
}).createWallet(new Uint8Array(arrrSeed), false, 'ARRR');
|
||||
|
||||
this._addresses[nonce] = {
|
||||
address,
|
||||
btcWallet,
|
||||
@ -175,6 +190,7 @@ export default class PhraseWallet {
|
||||
dogeWallet,
|
||||
dgbWallet,
|
||||
rvnWallet,
|
||||
arrrWallet,
|
||||
qoraAddress,
|
||||
keyPair: {
|
||||
publicKey: addrKeyPair.publicKey,
|
||||
|
@ -4,6 +4,6 @@ export { transactionTypes as transactions } from './transactions/transactions.js
|
||||
|
||||
export { processTransaction, createTransaction, computeChatNonce, signChatTransaction, signArbitraryTransaction } from './createTransaction.js'
|
||||
|
||||
export { tradeBotCreateRequest, tradeBotRespondRequest, signTradeBotTxn, deleteTradeOffer, sendBtc, sendLtc, sendDoge, sendDgb, sendRvn } from './tradeRequest.js'
|
||||
export { tradeBotCreateRequest, tradeBotRespondRequest, signTradeBotTxn, deleteTradeOffer, sendBtc, sendLtc, sendDoge, sendDgb, sendRvn, sendArrr } from './tradeRequest.js'
|
||||
|
||||
export { cancelAllOffers } from './transactions/trade-portal/tradeoffer/cancelAllOffers.js'
|
||||
|
@ -130,3 +130,16 @@ export const sendRvn = (requestObject) => {
|
||||
})
|
||||
}
|
||||
|
||||
// Send ARRR
|
||||
export const sendArrr = (requestObject) => {
|
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node];
|
||||
|
||||
return request(`/crosschain/arrr/send?apiKey=${myNode.apiKey}`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(requestObject)
|
||||
})
|
||||
}
|
||||
|
@ -25,7 +25,7 @@ import '@github/time-elements'
|
||||
|
||||
const parentEpml = new Epml({ type: 'WINDOW', source: window.parent })
|
||||
|
||||
const coinsNames = ['qort', 'btc', 'ltc', 'doge', 'dgb', 'rvn']
|
||||
const coinsNames = ['qort', 'btc', 'ltc', 'doge', 'dgb', 'rvn', 'arrr']
|
||||
|
||||
class MultiWallet extends LitElement {
|
||||
static get properties() {
|
||||
@ -50,6 +50,8 @@ class MultiWallet extends LitElement {
|
||||
dgbAmount: { type: Number },
|
||||
rvnRecipient: { type: String },
|
||||
rvnAmount: { type: Number },
|
||||
arrrRecipient: { type: String },
|
||||
arrrAmount: { type: Number },
|
||||
errorMessage: { type: String },
|
||||
successMessage: { type: String },
|
||||
sendMoneyLoading: { type: Boolean },
|
||||
@ -61,6 +63,7 @@ class MultiWallet extends LitElement {
|
||||
dogeFeePerByte: { type: Number },
|
||||
dgbFeePerByte: { type: Number },
|
||||
rvnFeePerByte: { type: Number },
|
||||
arrrFeePerByte: { type: Number },
|
||||
balanceString: { type: String }
|
||||
}
|
||||
}
|
||||
@ -261,7 +264,7 @@ class MultiWallet extends LitElement {
|
||||
}
|
||||
|
||||
.wallet {
|
||||
width: 170px;
|
||||
width: 200px;
|
||||
height: 100vh;
|
||||
border-top-left-radius: inherit;
|
||||
border-bottom-left-radius: inherit;
|
||||
@ -435,6 +438,10 @@ class MultiWallet extends LitElement {
|
||||
background-image: url('/img/rvn.png');
|
||||
}
|
||||
|
||||
.arrr .currency-image {
|
||||
background-image: url('/img/arrr.png');
|
||||
}
|
||||
|
||||
.card-list {
|
||||
margin-top: 20px;
|
||||
}
|
||||
@ -569,6 +576,7 @@ class MultiWallet extends LitElement {
|
||||
this.dogeRecipient = ''
|
||||
this.dgbRecipient = ''
|
||||
this.rvnRecipient = ''
|
||||
this.arrrRecipient = ''
|
||||
this.errorMessage = ''
|
||||
this.successMessage = ''
|
||||
this.sendMoneyLoading = false
|
||||
@ -581,6 +589,7 @@ class MultiWallet extends LitElement {
|
||||
this.dogeAmount = 0
|
||||
this.dgbAmount = 0
|
||||
this.rvnAmount = 0
|
||||
this.arrrAmount = 0
|
||||
this.btcFeePerByte = 100
|
||||
this.btcSatMinFee = 20
|
||||
this.btcSatMaxFee = 150
|
||||
@ -596,6 +605,9 @@ class MultiWallet extends LitElement {
|
||||
this.rvnFeePerByte = 1125
|
||||
this.rvnSatMinFee = 1000
|
||||
this.rvnSatMaxFee = 10000
|
||||
this.arrrFeePerByte = 8
|
||||
this.arrrSatMinFee = 1
|
||||
this.arrrSatMaxFee = 50
|
||||
|
||||
this.wallets = new Map()
|
||||
|
||||
@ -617,6 +629,7 @@ class MultiWallet extends LitElement {
|
||||
this.wallets.get('doge').wallet = window.parent.reduxStore.getState().app.selectedAddress.dogeWallet
|
||||
this.wallets.get('dgb').wallet = window.parent.reduxStore.getState().app.selectedAddress.dgbWallet
|
||||
this.wallets.get('rvn').wallet = window.parent.reduxStore.getState().app.selectedAddress.rvnWallet
|
||||
this.wallets.get('arrr').wallet = window.parent.reduxStore.getState().app.selectedAddress.arrWallet
|
||||
|
||||
this._selectedWallet = 'qort'
|
||||
|
||||
@ -630,6 +643,7 @@ class MultiWallet extends LitElement {
|
||||
this.wallets.get('ltc').wallet = window.parent.reduxStore.getState().app.selectedAddress.ltcWallet
|
||||
this.wallets.get('doge').wallet = window.parent.reduxStore.getState().app.selectedAddress.dogeWallet
|
||||
this.wallets.get('dgb').wallet = window.parent.reduxStore.getState().app.selectedAddress.dgbWallet
|
||||
this.wallets.get('arrr').wallet = window.parent.reduxStore.getState().app.selectedAddress.arrrWallet
|
||||
})
|
||||
|
||||
parentEpml.subscribe('copy_menu_switch', async (value) => {
|
||||
@ -671,6 +685,10 @@ class MultiWallet extends LitElement {
|
||||
<div class="currency-image"></div>
|
||||
<div class="currency-text">Ravencoin</div>
|
||||
</div>
|
||||
<div coin="arrr" class="currency-box arrr">
|
||||
<div class="currency-image"></div>
|
||||
<div class="currency-text">Pirate Chain</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -997,6 +1015,56 @@ class MultiWallet extends LitElement {
|
||||
</mwc-button>
|
||||
</mwc-dialog>
|
||||
|
||||
<mwc-dialog id="showArrrTransactionDetailsDialog" scrimClickAction="${this.showArrrTransactionDetailsLoading ? '' : 'close'}">
|
||||
<div style="text-align: center;">
|
||||
<h1>${translate("walletpage.wchange5")}</h1>
|
||||
<hr />
|
||||
</div>
|
||||
<div id="transactionList">
|
||||
<span class="title"> ${translate("walletpage.wchange6")} </span>
|
||||
<br />
|
||||
<div>
|
||||
<span>${translate("walletpage.wchange40")}</span>
|
||||
${this.selectedTransaction.arrrTxnFlow === 'OUT' ? html`<span class="color-out">${translate("walletpage.wchange7")}</span>` : html`<span class="color-in">${translate("walletpage.wchange8")}</span>`}
|
||||
</div>
|
||||
<span class="title"> ${translate("walletpage.wchange9")} </span>
|
||||
<br />
|
||||
<div>
|
||||
<span>${this.selectedTransaction.arrrSender}</span>
|
||||
</div>
|
||||
<span class="title"> ${translate("walletpage.wchange10")} </span>
|
||||
<br />
|
||||
<div>
|
||||
<span>${this.selectedTransaction.arrrReceiver}</span>
|
||||
</div>
|
||||
<span class="title"> ${translate("walletpage.wchange12")} </span>
|
||||
<br />
|
||||
<div>
|
||||
<span>${(this.selectedTransaction.feeAmount / 1e8).toFixed(8)} ARRR</span>
|
||||
</div>
|
||||
<span class="title"> ${translate("walletpage.wchange37")} </span>
|
||||
<br />
|
||||
<div>
|
||||
<span>${(this.selectedTransaction.totalAmount / 1e8).toFixed(8)} ARRR</span>
|
||||
</div>
|
||||
<span class="title"> ${translate("walletpage.wchange14")} </span>
|
||||
<br />
|
||||
<div><span>${new Date(this.selectedTransaction.timestamp).toString()}</span></div>
|
||||
<span class="title"> ${translate("walletpage.wchange16")} </span>
|
||||
<br />
|
||||
<div>
|
||||
<span>${this.selectedTransaction.txHash}</span>
|
||||
</div>
|
||||
</div>
|
||||
<mwc-button
|
||||
slot="primaryAction"
|
||||
dialogAction="cancel"
|
||||
class="red"
|
||||
>
|
||||
${translate("general.close")}
|
||||
</mwc-button>
|
||||
</mwc-dialog>
|
||||
|
||||
<mwc-dialog id="sendQortDialog">
|
||||
<div class="send-coin-dialog">
|
||||
<div style="text-align: center;">
|
||||
@ -1435,6 +1503,82 @@ class MultiWallet extends LitElement {
|
||||
${translate("general.close")}
|
||||
</mwc-button>
|
||||
</mwc-dialog>
|
||||
|
||||
<mwc-dialog id="sendArrrDialog">
|
||||
<div class="send-coin-dialog">
|
||||
<div style="text-align: center;">
|
||||
<img src="/img/arrr.png" width="32" height="32">
|
||||
<h2>${translate("walletpage.wchange17")} ARRR</h2>
|
||||
<hr />
|
||||
</div>
|
||||
<p>
|
||||
<span>${translate("walletpage.wchange18")}:</span><br />
|
||||
<span style="font-weight: bold;">${this.getSelectedWalletAddress()}</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>${translate("walletpage.wchange19")}:</span><br />
|
||||
<span style="font-weight: bold;">${this.balanceString}</span>
|
||||
</p>
|
||||
<p>
|
||||
<mwc-textfield
|
||||
style="width: 100%;"
|
||||
required
|
||||
@input="${(e) => { this._checkAmount(e) }}"
|
||||
id="arrrAmountInput"
|
||||
label="${translate("walletpage.wchange11")} (ARRR)"
|
||||
type="number"
|
||||
auto-validate="false"
|
||||
value="${this.arrrAmount}"
|
||||
>
|
||||
</mwc-textfield>
|
||||
</p>
|
||||
<p>
|
||||
<mwc-textfield
|
||||
style="width: 100%;"
|
||||
required
|
||||
id="arrrRecipient"
|
||||
label="${translate("walletpage.wchange23")}"
|
||||
type="text"
|
||||
value="${this.arrrRecipient}"
|
||||
>
|
||||
</mwc-textfield>
|
||||
</p>
|
||||
<div style="margin-bottom: 0;">
|
||||
<p style="margin-bottom: 0;">
|
||||
${translate("walletpage.wchange24")}: <span style="font-weight: bold;">${(this.arrrFeePerByte / 1e8).toFixed(8)} ARRR</span><br>L${translate("walletpage.wchange25")}
|
||||
</p>
|
||||
<paper-slider
|
||||
class="blue"
|
||||
style="width: 100%;"
|
||||
pin
|
||||
@change="${(e) => (this.arrrFeePerByte = e.target.value)}"
|
||||
id="arrrFeeSlider"
|
||||
min="${this.arrrSatMinFee}"
|
||||
max="${this.arrrSatMaxFee}"
|
||||
value="${this.arrrFeePerByte}"
|
||||
>
|
||||
</paper-slider>
|
||||
</div>
|
||||
<p style="color: red;">${this.errorMessage}</p>
|
||||
<p style="color: green;">${this.successMessage}</p>
|
||||
${this.sendMoneyLoading ? html` <paper-progress indeterminate style="width: 100%; margin: 4px;"></paper-progress> ` : ''}
|
||||
<div class="buttons">
|
||||
<div>
|
||||
<vaadin-button ?disabled="${this.btnDisable}" theme="primary medium" style="width: 100%;" @click=${() => this.sendArrr()}>
|
||||
<vaadin-icon icon="vaadin:arrow-forward" slot="prefix"></vaadin-icon>
|
||||
${translate("walletpage.wchange17")} ARRR
|
||||
</vaadin-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<mwc-button
|
||||
slot="primaryAction"
|
||||
dialogAction="cancel"
|
||||
class="red"
|
||||
>
|
||||
${translate("general.close")}
|
||||
</mwc-button>
|
||||
</mwc-dialog>
|
||||
</div>
|
||||
`
|
||||
}
|
||||
@ -1700,6 +1844,29 @@ class MultiWallet extends LitElement {
|
||||
checkSelectedTextAndShowMenu()
|
||||
})
|
||||
|
||||
this.shadowRoot.getElementById('dgbRecipient').addEventListener('contextmenu', (event) => {
|
||||
const getSelectedText = () => {
|
||||
var text = ''
|
||||
if (typeof window.getSelection != 'undefined') {
|
||||
text = window.getSelection().toString()
|
||||
} else if (typeof this.shadowRoot.selection != 'undefined' && this.shadowRoot.selection.type == 'Text') {
|
||||
text = this.shadowRoot.selection.createRange().text
|
||||
}
|
||||
return text
|
||||
}
|
||||
const checkSelectedTextAndShowMenu = () => {
|
||||
let selectedText = getSelectedText()
|
||||
if (selectedText && typeof selectedText === 'string') {
|
||||
} else {
|
||||
this.pasteMenu(event, 'dgbRecipient')
|
||||
this.isPasteMenuOpen = true
|
||||
event.preventDefault()
|
||||
event.stopPropagation()
|
||||
}
|
||||
}
|
||||
checkSelectedTextAndShowMenu()
|
||||
})
|
||||
|
||||
this.shadowRoot.getElementById('rvnAmountInput').addEventListener('contextmenu', (event) => {
|
||||
const getSelectedText = () => {
|
||||
var text = ''
|
||||
@ -1746,7 +1913,7 @@ class MultiWallet extends LitElement {
|
||||
checkSelectedTextAndShowMenu()
|
||||
})
|
||||
|
||||
this.shadowRoot.getElementById('dgbRecipient').addEventListener('contextmenu', (event) => {
|
||||
this.shadowRoot.getElementById('arrrAmountInput').addEventListener('contextmenu', (event) => {
|
||||
const getSelectedText = () => {
|
||||
var text = ''
|
||||
if (typeof window.getSelection != 'undefined') {
|
||||
@ -1760,7 +1927,30 @@ class MultiWallet extends LitElement {
|
||||
let selectedText = getSelectedText()
|
||||
if (selectedText && typeof selectedText === 'string') {
|
||||
} else {
|
||||
this.pasteMenu(event, 'dgbRecipient')
|
||||
this.pasteMenu(event, 'arrrAmountInput')
|
||||
this.isPasteMenuOpen = true
|
||||
event.preventDefault()
|
||||
event.stopPropagation()
|
||||
}
|
||||
}
|
||||
checkSelectedTextAndShowMenu()
|
||||
})
|
||||
|
||||
this.shadowRoot.getElementById('arrrRecipient').addEventListener('contextmenu', (event) => {
|
||||
const getSelectedText = () => {
|
||||
var text = ''
|
||||
if (typeof window.getSelection != 'undefined') {
|
||||
text = window.getSelection().toString()
|
||||
} else if (typeof this.shadowRoot.selection != 'undefined' && this.shadowRoot.selection.type == 'Text') {
|
||||
text = this.shadowRoot.selection.createRange().text
|
||||
}
|
||||
return text
|
||||
}
|
||||
const checkSelectedTextAndShowMenu = () => {
|
||||
let selectedText = getSelectedText()
|
||||
if (selectedText && typeof selectedText === 'string') {
|
||||
} else {
|
||||
this.pasteMenu(event, 'arrrRecipient')
|
||||
this.isPasteMenuOpen = true
|
||||
event.preventDefault()
|
||||
event.stopPropagation()
|
||||
@ -2237,6 +2427,52 @@ class MultiWallet extends LitElement {
|
||||
this.showWallet()
|
||||
}
|
||||
|
||||
async sendArrr() {
|
||||
const arrrAmount = this.shadowRoot.getElementById('arrrAmountInput').value
|
||||
let arrrRecipient = this.shadowRoot.getElementById('arrrRecipient').value
|
||||
const xprv58 = this.wallets.get(this._selectedWallet).wallet.derivedMasterPrivateKey
|
||||
|
||||
this.sendMoneyLoading = true
|
||||
this.btnDisable = true
|
||||
|
||||
const makeRequest = async () => {
|
||||
const opts = {
|
||||
xprv58: xprv58,
|
||||
receivingAddress: arrrRecipient,
|
||||
ravencoinAmount: arrrAmount,
|
||||
feePerByte: (this.arrrFeePerByte / 1e8).toFixed(8),
|
||||
}
|
||||
const response = await parentEpml.request('sendArrr', opts)
|
||||
return response
|
||||
}
|
||||
|
||||
const manageResponse = (response) => {
|
||||
if (response.length === 64) {
|
||||
this.shadowRoot.getElementById('arrrAmountInput').value = 0
|
||||
this.shadowRoot.getElementById('arrrRecipient').value = ''
|
||||
this.errorMessage = ''
|
||||
this.arrrRecipient = ''
|
||||
this.arrrAmount = 0
|
||||
this.successMessage = this.renderSuccessText()
|
||||
this.sendMoneyLoading = false
|
||||
this.btnDisable = false
|
||||
} else if (response === false) {
|
||||
this.errorMessage = this.renderFailText()
|
||||
this.sendMoneyLoading = false
|
||||
this.btnDisable = false
|
||||
throw new Error(txnResponse)
|
||||
} else {
|
||||
this.errorMessage = response.message
|
||||
this.sendMoneyLoading = false
|
||||
this.btnDisable = false
|
||||
throw new Error(response)
|
||||
}
|
||||
}
|
||||
const res = await makeRequest()
|
||||
manageResponse(res)
|
||||
this.showWallet()
|
||||
}
|
||||
|
||||
async showWallet() {
|
||||
this.transactionsDOM.hidden = true
|
||||
this.loading = true
|
||||
@ -2289,6 +2525,7 @@ class MultiWallet extends LitElement {
|
||||
case 'doge':
|
||||
case 'dgb':
|
||||
case 'rvn':
|
||||
case 'arrr':
|
||||
const walletName = `${coin}Wallet`
|
||||
parentEpml.request('apiCall', {
|
||||
url: `/crosschain/${coin}/walletbalance?apiKey=${this.getApiKey()}`,
|
||||
@ -2343,6 +2580,8 @@ class MultiWallet extends LitElement {
|
||||
return html`<vaadin-button theme="primary large" style="width: 75%;" @click=${() => this.openSendDgb()}><vaadin-icon icon="vaadin:coin-piles" slot="prefix"></vaadin-icon> ${translate("walletpage.wchange17")} DGB</vaadin-button>`
|
||||
} else if ( this._selectedWallet === "rvn" ) {
|
||||
return html`<vaadin-button theme="primary large" style="width: 75%;" @click=${() => this.openSendRvn()}><vaadin-icon icon="vaadin:coin-piles" slot="prefix"></vaadin-icon> ${translate("walletpage.wchange17")} RVN</vaadin-button>`
|
||||
} else if ( this._selectedWallet === "arrr" ) {
|
||||
return html`<vaadin-button theme="primary large" style="width: 75%;" @click=${() => this.openSendArrr()}><vaadin-icon icon="vaadin:coin-piles" slot="prefix"></vaadin-icon> ${translate("walletpage.wchange17")} ARRR</vaadin-button>`
|
||||
} else {
|
||||
return html``
|
||||
}
|
||||
@ -2372,6 +2611,10 @@ class MultiWallet extends LitElement {
|
||||
this.shadowRoot.querySelector("#sendRvnDialog").show();
|
||||
}
|
||||
|
||||
openSendArrr() {
|
||||
this.shadowRoot.querySelector("#sendArrrDialog").show();
|
||||
}
|
||||
|
||||
changeTheme() {
|
||||
const checkTheme = localStorage.getItem('qortalTheme')
|
||||
if (checkTheme === 'dark') {
|
||||
@ -2446,12 +2689,12 @@ class MultiWallet extends LitElement {
|
||||
},
|
||||
{ passive: true }
|
||||
)
|
||||
} else if (coin === 'dgb') {
|
||||
} else if (coin === 'arrr') {
|
||||
this.transactionsGrid.addEventListener(
|
||||
'click',
|
||||
(e) => {
|
||||
let dgbItem = this.transactionsGrid.getEventContext(e).item
|
||||
this.showDgbTransactionDetails(dgbItem, this.wallets.get(this._selectedWallet).transactions)
|
||||
this.showArrrTransactionDetails(dgbItem, this.wallets.get(this._selectedWallet).transactions)
|
||||
},
|
||||
{ passive: true }
|
||||
)
|
||||
@ -2474,6 +2717,8 @@ class MultiWallet extends LitElement {
|
||||
render(this.renderDgbTransactions(this.wallets.get(this._selectedWallet).transactions, this._selectedWallet), this.transactionsDOM)
|
||||
} else if (this._selectedWallet === 'rvn') {
|
||||
render(this.renderRvnTransactions(this.wallets.get(this._selectedWallet).transactions, this._selectedWallet), this.transactionsDOM)
|
||||
} else if (this._selectedWallet === 'arrr') {
|
||||
render(this.renderArrrTransactions(this.wallets.get(this._selectedWallet).transactions, this._selectedWallet), this.transactionsDOM)
|
||||
}
|
||||
}
|
||||
|
||||
@ -2859,6 +3104,71 @@ class MultiWallet extends LitElement {
|
||||
`
|
||||
}
|
||||
|
||||
renderArrrTransactions(transactions, coin) {
|
||||
return html`
|
||||
<div style="padding-left:12px;" ?hidden="${!this.isEmptyArray(transactions)}"><span style="color: var(--black);">${translate("walletpage.wchange38")}</span></div>
|
||||
<vaadin-grid theme="large" id="${coin}TransactionsGrid" ?hidden="${this.isEmptyArray(this.wallets.get(this._selectedWallet).transactions)}" page-size="25" all-rows-visible>
|
||||
<vaadin-grid-column
|
||||
auto-width
|
||||
header="${translate("walletpage.wchange41")}"
|
||||
.renderer=${(root, column, data) => {
|
||||
render(html`<mwc-icon style="color: #00C851">check</mwc-icon>`, root)
|
||||
}}
|
||||
>
|
||||
</vaadin-grid-column>
|
||||
<vaadin-grid-column
|
||||
auto-width
|
||||
resizable
|
||||
header="${translate("walletpage.wchange35")}"
|
||||
.renderer=${(root, column, data) => {
|
||||
render(html` ${translate("walletpage.wchange40")} ${data.item.amount > 0 ? html`<span class="color-out">${translate("walletpage.wchange7")}</span>` : html`<span class="color-in">${translate("walletpage.wchange8")}</span>`} `, root)
|
||||
}}
|
||||
>
|
||||
</vaadin-grid-column>
|
||||
<!--<vaadin-grid-column
|
||||
auto-width
|
||||
resizable
|
||||
header="${translate("walletpage.wchange9")}"
|
||||
.renderer=${(root, column, data) => {
|
||||
render(html`${data.item.inputs[0].address}`, root)
|
||||
}}
|
||||
>
|
||||
</vaadin-grid-column>
|
||||
<vaadin-grid-column
|
||||
auto-width
|
||||
resizable
|
||||
header="${translate("walletpage.wchange10")}"
|
||||
.renderer=${(root, column, data) => {
|
||||
render(html`${data.item.outputs[0].address}`, root)
|
||||
}}
|
||||
>
|
||||
</vaadin-grid-column>-->
|
||||
<vaadin-grid-column auto-width resizable header="${translate("walletpage.wchange16")}" path="txHash"></vaadin-grid-column>
|
||||
<vaadin-grid-column
|
||||
auto-width
|
||||
resizable
|
||||
header="${translate("walletpage.wchange37")}"
|
||||
.renderer=${(root, column, data) => {
|
||||
const amount = (Number(data.item.totalAmount) / 1e8).toFixed(8)
|
||||
render(html`${amount}`, root)
|
||||
}}
|
||||
>
|
||||
</vaadin-grid-column>
|
||||
<vaadin-grid-column
|
||||
auto-width
|
||||
resizable
|
||||
header="${translate("walletpage.wchange14")}"
|
||||
.renderer=${(root, column, data) => {
|
||||
const time = new Date(data.item.timestamp * 1000)
|
||||
render(html` <time-ago datetime=${time.toISOString()}> </time-ago> `, root)
|
||||
}}
|
||||
>
|
||||
</vaadin-grid-column>
|
||||
</vaadin-grid>
|
||||
<div id="pages"></div>
|
||||
`
|
||||
}
|
||||
|
||||
async updateItemsFromPage(page, changeWallet = false) {
|
||||
if (page === undefined) {
|
||||
return
|
||||
@ -3059,6 +3369,20 @@ class MultiWallet extends LitElement {
|
||||
})
|
||||
}
|
||||
|
||||
showArrrTransactionDetails(myTransaction, allTransactions) {
|
||||
allTransactions.forEach((transaction) => {
|
||||
if (myTransaction.txHash === transaction.txHash) {
|
||||
let arrrTxnFlow = myTransaction.inputs[0].address === this.wallets.get(this._selectedWallet).wallet.address ? 'OUT' : 'IN'
|
||||
let arrrSender = myTransaction.inputs[0].address
|
||||
let arrrReceiver = myTransaction.outputs[0].address
|
||||
this.selectedTransaction = { ...transaction, arrrTxnFlow, arrrSender, arrrReceiver }
|
||||
if (this.selectedTransaction.txHash.length != 0) {
|
||||
this.shadowRoot.querySelector('#showArrrTransactionDetailsDialog').show()
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
isEmptyArray(arr) {
|
||||
if (!arr) {
|
||||
return true
|
||||
|
Loading…
x
Reference in New Issue
Block a user