No more needed

This commit is contained in:
AlphaX-Projects 2022-03-15 18:51:46 +01:00 committed by GitHub
parent 124f0084b4
commit 12d9adbcaf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 0 additions and 939 deletions

View File

@ -1,46 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="/font/material-icons.css">
<link rel="stylesheet" href="/font/switch-theme.css">
<style>
html {
--scrollbarBG: #a1a1a1;
--thumbBG: #6a6c75;
}
*::-webkit-scrollbar {
width: 11px;
}
* {
scrollbar-width: thin;
scrollbar-color: var(--thumbBG) var(--scrollbarBG);
}
*::-webkit-scrollbar-track {
background: var(--scrollbarBG);
}
*::-webkit-scrollbar-thumb {
background-color: var(--thumbBG);
border-radius: 6px;
border: 3px solid var(--scrollbarBG);
}
html,
body {
margin: 0;
font-family: "Roboto", sans-serif;
background: var(--plugback);
}
</style>
</head>
<body>
<send-coin-page></send-coin-page>
<script src="send-coin.js"></script>
</body>
</html>

View File

@ -1,893 +0,0 @@
import { LitElement, html, css } from 'lit'
import { render } from 'lit/html.js'
import { Epml } from '../../../epml'
import '@material/mwc-button'
import '@material/mwc-textfield'
import '@material/mwc-select'
import '@material/mwc-list/mwc-list-item.js'
import '@material/mwc-slider'
import '@polymer/paper-progress/paper-progress.js'
const parentEpml = new Epml({ type: 'WINDOW', source: window.parent })
class SendMoneyPage extends LitElement {
static get properties() {
return {
addresses: { type: Array },
amount: { type: Number },
errorMessage: { type: String },
sendMoneyLoading: { type: Boolean },
btnDisable: { type: Boolean },
data: { type: Object },
selectedAddress: { type: Object },
recipient: { type: String },
isValidAmount: { type: Boolean },
balance: { type: Number },
qortBalance: { type: Number },
btcBalance: { type: Number },
ltcBalance: { type: Number },
dogeBalance: { type: Number },
selectedCoin: { type: String },
satFeePerByte: { type: Number },
theme: { type: String, reflect: true }
}
}
static get observers() {
return ['_kmxKeyUp(amount)']
}
static get styles() {
return css`
* {
--mdc-theme-primary: rgb(3, 169, 244);
--mdc-theme-secondary: var(--mdc-theme-primary);
--paper-input-container-focus-color: var(--mdc-theme-primary);
}
h2,
h3,
h4,
h5 {
color: var(--black);
font-weight: 400;
}
#sendMoneyWrapper {
}
#sendMoneyWrapper paper-button {
float: right;
}
#sendMoneyWrapper .buttons {
width: auto !important;
}
.address-item {
--paper-item-focused: {
background: transparent;
}
--paper-item-focused-before: {
opacity: 0;
}
}
.address-balance {
font-size: 42px;
font-weight: 100;
}
.show-transactions {
cursor: pointer;
}
.address-icon {
border-radius: 50%;
border: 5px solid;
padding: 8px;
}
.baltxt {
color: var(--black);
}
mwc-textfield {
margin: 0;
}
.selectedBalance {
display: none;
font-size: 14px;
}
.selectedBalance .balance {
font-size: 22px;
font-weight: 100;
}
.coinName::before {
content: "";
display: inline-block;
height: 25px;
width: 25px;
position: absolute;
background-repeat: no-repeat;
background-size: cover;
left: 10px;
top: 10px;
}
.qort.coinName:before {
background-image: url('/img/qort.png');
}
.btc.coinName:before {
background-image: url('/img/btc.png');
}
.ltc.coinName:before {
background-image: url('/img/ltc.png');
}
.doge.coinName:before {
background-image: url('/img/doge.png');
}
.coinName {
display: inline-block;
height: 25px;
padding-left: 25px;
}
paper-progress {
--paper-progress-active-color: var(--mdc-theme-primary);
}
`
}
constructor() {
super()
this.recipient = ''
this.errorMessage = ''
this.sendMoneyLoading = false
this.btnDisable = false
this.selectedAddress = {}
this.amount = 0
this.satFeePerByte = 100000 // TODO: Set to 0.001 QORT (100000 in sats)
this.btcSatMinFee = 20
this.btcSatMaxFee = 150
this.btcDefaultFee = 100 // 0.000001 BTC per byte
this.ltcSatMinFee = 10
this.ltcSatMaxFee = 100
this.ltcDefaultFee = 30 // 0.0000003 LTC per byte
this.dogeSatMinFee = 100
this.dogeSatMaxFee = 10000
this.dogeDefaultFee = 1000 // 0.00001 DOGE per byte
this.isValidAmount = false
this.qortBalance = 0
this.btcBalance = 0
this.ltcBalance = 0
this.dogeBalance = 0
this.selectedCoin = 'invalid'
this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light';
let configLoaded = false
parentEpml.ready().then(() => {
parentEpml.subscribe('selected_address', async (selectedAddress) => {
this.selectedAddress = {}
selectedAddress = JSON.parse(selectedAddress)
if (!selectedAddress || Object.entries(selectedAddress).length === 0) return
this.selectedAddress = selectedAddress
const addr = selectedAddress.address
this.updateAccountBalance()
})
parentEpml.subscribe('config', (c) => {
if (!configLoaded) {
configLoaded = true
}
this.config = JSON.parse(c)
})
parentEpml.subscribe('copy_menu_switch', async (value) => {
if (value === 'false' && window.getSelection().toString().length !== 0) {
this.clearSelection()
}
})
parentEpml.subscribe('frame_paste_menu_switch', async (res) => {
res = JSON.parse(res)
if (res.isOpen === false && this.isPasteMenuOpen === true) {
this.pasteToTextBox(res.elementId)
this.isPasteMenuOpen = false
}
})
})
}
render() {
return html`
<div id="sendMoneyWrapper" style="width:auto; padding:10px; background: var(--white); height:100vh;">
<div class="layout horizontal center" style="padding:12px 15px;">
<paper-card style="width:100%; max-width:740px;">
<div style="background-color: ${this.selectedAddress.color}; margin:0; color: ${this.textColor(this.selectedAddress.textColor)};">
<h3 style="margin: 0; padding: 8px 0;">Send Coin</h3>
<div class="selectedBalance">
<span id="balance" class="baltxt"></span> <span class="baltxt">available for transfer from</span> <span id="address" class="baltxt"></span>
</div>
</div>
</paper-card>
<p>
<mwc-select id="coinType" label="Select Coin" index="0" @selected="${(e) => this.selectCoin(e)}" style="min-width: 130px; max-width:100%; width:100%;">
<mwc-list-item value="qort"></span> <span class="coinName qort">QORT</span></mwc-list-item>
<mwc-list-item value="btc"> <span class="coinName btc">BTC</span></mwc-list-item>
<mwc-list-item value="ltc"> <span class="coinName ltc">LTC</span></mwc-list-item>
<mwc-list-item value="doge"> <span class="coinName doge">DOGE</span></mwc-list-item>
</mwc-select>
</p>
<p>
<mwc-textfield
style="width:100%;"
id="amountInput"
required
label="Amount (QORT)"
@input="${(e) => { this._checkAmount(e) }}"
type="number"
auto-validate="false"
value="${this.amount}"
>
</mwc-textfield>
</p>
<p>
<mwc-textfield style="width:100%;" label="To (address or name)" id="recipient" type="text" value="${this.recipient}"></mwc-textfield>
</p>
<div style="${this.selectedCoin === 'invalid' || this.selectedCoin === 'qort' ? 'visibility: hidden; margin-bottom: -5em;' : 'visibility: visible; margin-bottom: 0;'}">
<p style="margin-bottom: 0; color: var(--black);">Fee per byte: ${(this.satFeePerByte / 1e8).toFixed(8)} ${this.selectedCoin === 'invalid' ? 'QORT' : this.selectedCoin.toLocaleUpperCase()}</p>
<mwc-slider
@change="${(e) => (this.satFeePerByte = e.target.value)}"
id="feeSlider"
style="width:100%;"
step="1"
min="10"
max="100"
?disabled="${this.selectedCoin === 'invalid' || this.selectedCoin === 'qort' ? true : false}"
value="${this.satFeePerByte}"
>
</mwc-slider>
</div>
<p style="color: red;">${this.errorMessage}</p>
<p style="color: green; word-break: break-word;">${this.successMessage}</p>
${this.sendMoneyLoading ? html` <paper-progress indeterminate style="width:100%; margin:4px;"></paper-progress> ` : ''}
<div class="buttons">
<div>
<mwc-button ?disabled="${this.btnDisable}" style="width:100%;" raised icon="send" @click="${(e) => this.doSend(e)}">Send &nbsp;</mwc-button>
</div>
</div>
</div>
</div>
`
}
firstUpdated() {
this.changeTheme()
setInterval(() => {
this.changeTheme();
}, 100)
// Get BTC Balance
this.updateBTCAccountBalance()
// Get LTC Balance
this.updateLTCAccountBalance()
// Get DOGE Balance
this.updateDOGEAccountBalance()
setInterval(() => {
this.errorMessage = '';
}, 5000)
setInterval(() => {
this.successMessage = '';
}, 5000)
window.addEventListener('contextmenu', (event) => {
event.preventDefault()
this._textMenu(event)
})
window.addEventListener('click', () => {
parentEpml.request('closeCopyTextMenu', null)
})
window.onkeyup = (e) => {
if (e.keyCode === 27) {
parentEpml.request('closeCopyTextMenu', null)
}
}
// TODO: Rewrite the context menu event listener to support more elements (for now, I'll do write everything out manually )
this.shadowRoot.getElementById('amountInput').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, 'amountInput')
this.isPasteMenuOpen = true
// Prevent Default and Stop Event Bubbling
event.preventDefault()
event.stopPropagation()
}
}
checkSelectedTextAndShowMenu()
})
this.shadowRoot.getElementById('recipient').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, 'recipient')
this.isPasteMenuOpen = true
// Prevent Default and Stop Event Bubbling
event.preventDefault()
event.stopPropagation()
}
}
checkSelectedTextAndShowMenu()
})
}
changeTheme() {
const checkTheme = localStorage.getItem('qortalTheme')
if (checkTheme === 'dark') {
this.theme = 'dark';
} else {
this.theme = 'light';
}
document.querySelector('html').setAttribute('theme', this.theme);
}
_floor(num) {
return Math.floor(num)
}
// Helper Functions (Re-Used in Most part of the UI )
/**
* Check and Validate Amount Helper Function
* @param { Event } e
*
* @description Gets called oninput in an input element
*/
_checkAmount(e) {
const targetAmount = e.target.value
const target = e.target
if (targetAmount.length === 0) {
this.isValidAmount = false
this.btnDisable = true
// Quick Hack to lose and regain focus inorder to display error message without user having to click outside the input field
e.target.blur()
e.target.focus()
e.target.invalid = true
e.target.validationMessage = 'Invalid Amount!'
} else {
this.btnDisable = false
}
e.target.blur()
e.target.focus()
e.target.validityTransform = (newValue, nativeValidity) => {
if (newValue.includes('-') === true) {
this.btnDisable = true
target.validationMessage = 'Invalid Amount!'
return {
valid: false,
}
} else if (!nativeValidity.valid) {
if (newValue.includes('.') === true) {
let myAmount = newValue.split('.')
if (myAmount[1].length > 8) {
this.btnDisable = true
target.validationMessage = 'Invalid Amount!'
} else {
return {
valid: true,
}
}
}
} else {
this.btnDisable = false
}
}
}
textColor(color) {
return color == 'light' ? 'rgba(255,255,255,0.7)' : 'rgba(0,0,0,0.87)'
}
pasteToTextBox(elementId) {
// Return focus to the window
window.focus()
navigator.clipboard.readText().then((clipboardText) => {
let element = this.shadowRoot.getElementById(elementId)
element.value += clipboardText
element.focus()
})
}
pasteMenu(event, elementId) {
let eventObject = { pageX: event.pageX, pageY: event.pageY, clientX: event.clientX, clientY: event.clientY, elementId }
parentEpml.request('openFramePasteMenu', eventObject)
}
doSend(e) {
if (this.selectedCoin === 'invalid') {
parentEpml.request('showSnackBar', 'Invalid Selection!')
} else if (this.selectedCoin === 'qort') {
this.sendQort()
} else if (this.selectedCoin === 'btc') {
this.sendBtc()
} else if (this.selectedCoin === 'ltc') {
this.sendLtc()
} else if (this.selectedCoin === 'doge') {
this.sendDoge()
}
}
async sendQort() {
const amount = this.shadowRoot.getElementById('amountInput').value
let recipient = this.shadowRoot.getElementById('recipient').value
this.sendMoneyLoading = true
this.btnDisable = true
if (parseFloat(amount) + parseFloat(0.001) > parseFloat(this.balance)) {
this.sendMoneyLoading = false
this.btnDisable = false
parentEpml.request('showSnackBar', 'Insufficient Funds!')
return false
}
if (parseFloat(amount) <= 0) {
this.sendMoneyLoading = false
this.btnDisable = false
parentEpml.request('showSnackBar', 'Invalid Amount!')
return false
}
if (recipient.length === 0) {
this.sendMoneyLoading = false
this.btnDisable = false
parentEpml.request('showSnackBar', 'Receiver cannot be empty!')
return false
}
const getLastRef = async () => {
let myRef = await parentEpml.request('apiCall', {
type: 'api',
url: `/addresses/lastreference/${this.selectedAddress.address}`,
})
return myRef
}
const validateName = async (receiverName) => {
let myRes
let myNameRes = await parentEpml.request('apiCall', {
type: 'api',
url: `/names/${receiverName}`,
})
if (myNameRes.error === 401) {
myRes = false
} else {
myRes = myNameRes
}
return myRes
}
const validateAddress = async (receiverAddress) => {
let myAddress = await window.parent.validateAddress(receiverAddress)
return myAddress
}
const validateReceiver = async (recipient) => {
let lastRef = await getLastRef()
let isAddress
try {
isAddress = await validateAddress(recipient)
} catch (err) {
isAddress = false
}
if (isAddress) {
let myTransaction = await makeTransactionRequest(recipient, lastRef)
getTxnRequestResponse(myTransaction)
} else {
let myNameRes = await validateName(recipient)
if (myNameRes !== false) {
let myNameAddress = myNameRes.owner
let myTransaction = await makeTransactionRequest(myNameAddress, lastRef)
getTxnRequestResponse(myTransaction)
} else {
console.error('INVALID_RECEIVER')
this.errorMessage = 'INVALID_RECEIVER'
this.sendMoneyLoading = false
this.btnDisable = false
}
}
}
const makeTransactionRequest = async (receiver, lastRef) => {
let myReceiver = receiver
let mylastRef = lastRef
let myTxnrequest = await parentEpml.request('transaction', {
type: 2,
nonce: this.selectedAddress.nonce,
params: {
recipient: myReceiver,
amount: amount,
lastReference: mylastRef,
fee: 0.001,
},
})
return myTxnrequest
}
const getTxnRequestResponse = (txnResponse) => {
if (txnResponse.success === false && txnResponse.message) {
this.errorMessage = txnResponse.message
this.sendMoneyLoading = false
this.btnDisable = false
throw new Error(txnResponse)
} else if (txnResponse.success === true && !txnResponse.data.error) {
this.shadowRoot.getElementById('amountInput').value = ''
this.shadowRoot.getElementById('recipient').value = ''
this.errorMessage = ''
this.recipient = ''
this.amount = 0
this.successMessage = 'Transaction Successful!'
this.sendMoneyLoading = false
this.btnDisable = false
} else {
this.errorMessage = txnResponse.data.message
this.sendMoneyLoading = false
this.btnDisable = false
throw new Error(txnResponse)
}
}
validateReceiver(recipient)
}
async sendBtc() {
const amount = this.shadowRoot.getElementById('amountInput').value
let recipient = this.shadowRoot.getElementById('recipient').value
const xprv58 = this.selectedAddress.btcWallet.derivedMasterPrivateKey
this.sendMoneyLoading = true
this.btnDisable = true
const makeRequest = async () => {
const opts = {
xprv58: xprv58,
receivingAddress: recipient,
bitcoinAmount: amount,
feePerByte: (this.satFeePerByte / 1e8).toFixed(8),
}
const response = await parentEpml.request('sendBtc', opts)
return response
}
const manageResponse = (response) => {
if (response.length === 64) {
this.shadowRoot.getElementById('amountInput').value = 0
this.shadowRoot.getElementById('recipient').value = ''
this.errorMessage = ''
this.recipient = ''
this.amount = 0
this.successMessage = 'Transaction Successful!'
this.sendMoneyLoading = false
this.btnDisable = false
} else if (response === false) {
this.errorMessage = 'Transaction Failed!'
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)
}
}
// Call makeRequest
const res = await makeRequest()
manageResponse(res)
}
async sendLtc() {
const amount = this.shadowRoot.getElementById('amountInput').value
let recipient = this.shadowRoot.getElementById('recipient').value
const xprv58 = this.selectedAddress.ltcWallet.derivedMasterPrivateKey
this.sendMoneyLoading = true
this.btnDisable = true
const makeRequest = async () => {
const opts = {
xprv58: xprv58,
receivingAddress: recipient,
litecoinAmount: amount,
feePerByte: (this.satFeePerByte / 1e8).toFixed(8),
}
const response = await parentEpml.request('sendLtc', opts)
return response
}
const manageResponse = (response) => {
if (response.length === 64) {
this.shadowRoot.getElementById('amountInput').value = 0
this.shadowRoot.getElementById('recipient').value = ''
this.errorMessage = ''
this.recipient = ''
this.amount = 0
this.successMessage = 'Transaction Successful!'
this.sendMoneyLoading = false
this.btnDisable = false
} else if (response === false) {
this.errorMessage = 'Transaction Failed!'
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)
}
}
// Call makeRequest
const res = await makeRequest()
manageResponse(res)
}
async sendDoge() {
const amount = this.shadowRoot.getElementById('amountInput').value
let recipient = this.shadowRoot.getElementById('recipient').value
const xprv58 = this.selectedAddress.dogeWallet.derivedMasterPrivateKey
this.sendMoneyLoading = true
this.btnDisable = true
const makeRequest = async () => {
const opts = {
xprv58: xprv58,
receivingAddress: recipient,
dogecoinAmount: amount,
feePerByte: (this.satFeePerByte / 1e8).toFixed(8),
}
const response = await parentEpml.request('sendDoge', opts)
return response
}
const manageResponse = (response) => {
if (response.length === 64) {
this.shadowRoot.getElementById('amountInput').value = 0
this.shadowRoot.getElementById('recipient').value = ''
this.errorMessage = ''
this.recipient = ''
this.amount = 0
this.successMessage = 'Transaction Successful!'
this.sendMoneyLoading = false
this.btnDisable = false
} else if (response === false) {
this.errorMessage = 'Transaction Failed!'
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)
}
}
// Call makeRequest
const res = await makeRequest()
manageResponse(res)
}
_textMenu(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') {
let _eve = { pageX: event.pageX, pageY: event.pageY, clientX: event.clientX, clientY: event.clientY }
let textMenuObject = { selectedText: selectedText, eventObject: _eve, isFrame: true }
parentEpml.request('openCopyTextMenu', textMenuObject)
}
}
checkSelectedTextAndShowMenu()
}
updateAccountBalance() {
clearTimeout(this.updateAccountBalanceTimeout)
parentEpml
.request('apiCall', {
url: `/addresses/balance/${this.selectedAddress.address}?apiKey=${this.getApiKey()}`,
})
.then((res) => {
this.qortBalance = res
this.updateAccountBalanceTimeout = setTimeout(() => this.updateAccountBalance(), 4000)
})
}
selectCoin(e) {
const coinType = this.shadowRoot.getElementById('coinType').value
this.selectedCoin = coinType
this.amount = 0
this.recipient = ''
this.shadowRoot.getElementById('amountInput').value = 0
this.shadowRoot.getElementById('recipient').value = ''
this.successMessage = ''
this.errorMessage = ''
if (coinType === 'qort') {
this.shadowRoot.getElementById('balance').textContent = `${this.qortBalance} QORT`
this.shadowRoot.getElementById('address').textContent = this.selectedAddress.address
this.shadowRoot.querySelector('.selectedBalance').style.display = 'block'
this.shadowRoot.getElementById('amountInput').label = 'Amount (QORT)'
this.shadowRoot.getElementById('recipient').label = 'To (address or name)'
this.satFeePerByte = 100000
} else if (coinType === 'btc') {
this.shadowRoot.getElementById('balance').textContent = `${this.btcBalance} BTC`
this.shadowRoot.getElementById('address').textContent = this.selectedAddress.btcWallet.address
this.shadowRoot.querySelector('.selectedBalance').style.display = 'block'
this.shadowRoot.getElementById('amountInput').label = 'Amount (BTC)'
this.shadowRoot.getElementById('recipient').label = 'To (BTC address)'
this.shadowRoot.getElementById('feeSlider').min = this.btcSatMinFee
this.shadowRoot.getElementById('feeSlider').max = this.btcSatMaxFee
this.satFeePerByte = this.btcDefaultFee
} else if (coinType === 'ltc') {
this.shadowRoot.getElementById('balance').textContent = `${this.ltcBalance} LTC`
this.shadowRoot.getElementById('address').textContent = this.selectedAddress.ltcWallet.address
this.shadowRoot.querySelector('.selectedBalance').style.display = 'block'
this.shadowRoot.getElementById('amountInput').label = 'Amount (LTC)'
this.shadowRoot.getElementById('recipient').label = 'To (LTC address)'
this.shadowRoot.getElementById('feeSlider').min = this.ltcSatMinFee
this.shadowRoot.getElementById('feeSlider').max = this.ltcSatMaxFee
this.satFeePerByte = this.ltcDefaultFee
} else if (coinType === 'doge') {
this.shadowRoot.getElementById('balance').textContent = `${this.dogeBalance} DOGE`
this.shadowRoot.getElementById('address').textContent = this.selectedAddress.dogeWallet.address
this.shadowRoot.querySelector('.selectedBalance').style.display = 'block'
this.shadowRoot.getElementById('amountInput').label = 'Amount (DOGE)'
this.shadowRoot.getElementById('recipient').label = 'To (DOGE address)'
this.shadowRoot.getElementById('feeSlider').min = this.dogeSatMinFee
this.shadowRoot.getElementById('feeSlider').max = this.dogeSatMaxFee
this.satFeePerByte = this.dogeDefaultFee
} else {
this.selectedCoin = 'invalid'
}
}
updateBTCAccountBalance() {
parentEpml
.request('apiCall', {
url: `/crosschain/btc/walletbalance?apiKey=${this.getApiKey()}`,
method: 'POST',
body: window.parent.reduxStore.getState().app.selectedAddress.btcWallet.derivedMasterPublicKey,
})
.then((res) => {
if (isNaN(Number(res))) {
parentEpml.request('showSnackBar', 'Failed to Fetch BTC Balance. Try again!')
} else {
this.btcBalance = (Number(res) / 1e8).toFixed(8)
}
})
}
updateLTCAccountBalance() {
parentEpml
.request('apiCall', {
url: `/crosschain/ltc/walletbalance?apiKey=${this.getApiKey()}`,
method: 'POST',
body: window.parent.reduxStore.getState().app.selectedAddress.ltcWallet.derivedMasterPublicKey,
})
.then((res) => {
if (isNaN(Number(res))) {
parentEpml.request('showSnackBar', 'Failed to Fetch LTC Balance. Try again!')
} else {
this.ltcBalance = (Number(res) / 1e8).toFixed(8)
}
})
}
updateDOGEAccountBalance() {
parentEpml
.request('apiCall', {
url: `/crosschain/doge/walletbalance?apiKey=${this.getApiKey()}`,
method: 'POST',
body: window.parent.reduxStore.getState().app.selectedAddress.dogeWallet.derivedMasterPublicKey,
})
.then((res) => {
if (isNaN(Number(res))) {
parentEpml.request('showSnackBar', 'Failed to Fetch DOGE Balance. Try again!')
} else {
this.dogeBalance = (Number(res) / 1e8).toFixed(8)
}
})
}
getApiKey() {
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node];
let apiKey = myNode.apiKey;
return apiKey;
}
clearSelection() {
window.getSelection().removeAllRanges()
window.parent.getSelection().removeAllRanges()
}
}
window.customElements.define('send-coin-page', SendMoneyPage)