Translate Wallet Page

This commit is contained in:
AlphaX-Projects 2022-04-11 09:18:55 +02:00
parent 7cfb91c384
commit 77f625127a
7 changed files with 465 additions and 144 deletions

View File

@ -122,7 +122,6 @@
"continue": "繼續", "continue": "繼續",
"save": "節省" "save": "節省"
}, },
"mintingpage": {
"mintingpage": { "mintingpage": {
"mchange1": "General Minting Details", "mchange1": "General Minting Details",
"mchange2": "Blockchain Statistics", "mchange2": "Blockchain Statistics",
@ -162,5 +161,49 @@
"mchange36": "Your sponsor will issue you a Sponsorship Key which you will use to add to your node, and begin minting (for no rewards until reaching level 1.) Once you reach level 1, you create/assign your own Minting Key and begin earning rewards. You have XXXX blocks remaining in your sponsorship period.", "mchange36": "Your sponsor will issue you a Sponsorship Key which you will use to add to your node, and begin minting (for no rewards until reaching level 1.) Once you reach level 1, you create/assign your own Minting Key and begin earning rewards. You have XXXX blocks remaining in your sponsorship period.",
"mchange37": "Simply reach out to a minter in Qortal who is high enough level to issue a sponsorship key, obtain that key, then come back here and input the key to begin your minting journey !", "mchange37": "Simply reach out to a minter in Qortal who is high enough level to issue a sponsorship key, obtain that key, then come back here and input the key to begin your minting journey !",
"mchange38": "in" "mchange38": "in"
},
"walletpage": {
"wchange1": "Fetching balance ...",
"wchange2": "Current Wallet",
"wchange3": "Copy wallet address to clipboard",
"wchange4": "Address copied to clipboard",
"wchange5": "Transaction Details",
"wchange6": "Transaction Type",
"wchange7": "OUT",
"wchange8": "IN",
"wchange9": "Sender",
"wchange10": "Receiver",
"wchange11": "Amount",
"wchange12": "Transaction Fee",
"wchange13": "Block",
"wchange14": "Time",
"wchange15": "Transaction Signature",
"wchange16": "Transaction Hash",
"wchange17": "Send",
"wchange18": "From address",
"wchange19": "Available balance",
"wchange20": "To (address or name)",
"wchange21": "Current static fee:",
"wchange22": "Wallets",
"wchange23": "To (address)",
"wchange24": "Current fee per byte",
"wchange25": "Low fees may result in slow or unconfirmed transactions.",
"wchange26": "Insufficient Funds!",
"wchange27": "Invalid Amount!",
"wchange28": "Receiver cannot be empty!",
"wchange29": "Inalid Receiver!",
"wchange30": "Transaction Successful!",
"wchange31": "Transaction Failed!",
"wchange32": "Failed to Fetch QORT Balance. Try again!",
"wchange33": "Failed to Fetch",
"wchange34": "Balance. Try again!",
"wchange35": "Type",
"wchange36": "Fee",
"wchange37": "Total Amount",
"wchange38": "Address has no transactions yet.",
"wchange39": "Unable to copy address.",
"wchange40": "PAYMENT",
"wchange41": "Status",
"wchange42": "Confirmations"
} }
} }

View File

@ -161,5 +161,49 @@
"mchange36": "Ihr Sponsor stellt Ihnen einen „Sponsorship Key“ aus, den Sie zum Hinzufügen zu Ihrem Knoten verwenden und mit dem Prägen beginnen (keine Belohnungen bis zum Erreichen von Level 1). Sobald Sie Level 1 erreicht haben, erstellen/weisen Sie Ihren eigenen „Minting Key“ und Beginnen Sie mit dem Verdienen von Belohnungen. Sie haben noch XXXX-Blöcke in Ihrem Sponsoring-Zeitraum.", "mchange36": "Ihr Sponsor stellt Ihnen einen „Sponsorship Key“ aus, den Sie zum Hinzufügen zu Ihrem Knoten verwenden und mit dem Prägen beginnen (keine Belohnungen bis zum Erreichen von Level 1). Sobald Sie Level 1 erreicht haben, erstellen/weisen Sie Ihren eigenen „Minting Key“ und Beginnen Sie mit dem Verdienen von Belohnungen. Sie haben noch XXXX-Blöcke in Ihrem Sponsoring-Zeitraum.",
"mchange37": "Wenden Sie sich einfach an einen Minter in Qortal, der hoch genug ist, um einen Sponsoring-Schlüssel auszustellen, erhalten Sie diesen Schlüssel, kommen Sie dann hierher zurück und geben Sie den Schlüssel ein, um Ihre Minting-Reise zu beginnen!", "mchange37": "Wenden Sie sich einfach an einen Minter in Qortal, der hoch genug ist, um einen Sponsoring-Schlüssel auszustellen, erhalten Sie diesen Schlüssel, kommen Sie dann hierher zurück und geben Sie den Schlüssel ein, um Ihre Minting-Reise zu beginnen!",
"mchange38": "in" "mchange38": "in"
},
"walletpage": {
"wchange1": "Hole Kontostand ...",
"wchange2": "Aktuelle Brieftasche",
"wchange3": "Brieftaschenadresse in die Zwischenablage kopieren",
"wchange4": "Adresse in die Zwischenablage kopiert",
"wchange5": "Transaktionsdetails",
"wchange6": "Art der Transaktion",
"wchange7": "RAUS",
"wchange8": "REIN",
"wchange9": "Sender",
"wchange10": "Empfäner",
"wchange11": "Menge",
"wchange12": "Transaktionsgebühr",
"wchange13": "Block",
"wchange14": "Zeit",
"wchange15": "Transaktionssignatur",
"wchange16": "Transaktions-Hash",
"wchange17": "Sende",
"wchange18": "Von der Adresse",
"wchange19": "Verfügbares Guthaben",
"wchange20": "An (Adresse oder Name)",
"wchange21": "Aktuelle statische Gebühr",
"wchange22": "Geldbörsen",
"wchange23": "An (Adresse)",
"wchange24": "Aktuelle Gebühr pro Byte",
"wchange25": "Niedrige Gebühren können zu langsamen oder unbestätigten Transaktionen führen.",
"wchange26": "Unzureichendes Guthaben!",
"wchange27": "Ungültige Menge!",
"wchange28": "Empfänger darf nicht leer sein!",
"wchange29": "Ungültiger Empfänger!",
"wchange30": "Transaktion Erfolgreich!",
"wchange31": "Transaktion fehlgeschlagen!",
"wchange32": "QORT-Guthaben konnte nicht abgerufen werden. Versuchen Sie es nochmal!",
"wchange33": "Fehler beim Abrufen vom",
"wchange34": "Guthaben. Versuchen Sie es nochmal!",
"wchange35": "Typ",
"wchange36": "Gebühr",
"wchange37": "Gesamtsumme",
"wchange38": "Adresse hat noch keine Transaktionen.",
"wchange39": "Adresse kann nicht kopiert werden.",
"wchange40": "ZAHLUNG",
"wchange41": "Status",
"wchange42": "Bestätigungen"
} }
} }

View File

@ -122,7 +122,6 @@
"continue": "Continuez", "continue": "Continuez",
"save": "Sauver" "save": "Sauver"
}, },
"mintingpage": {
"mintingpage": { "mintingpage": {
"mchange1": "General Minting Details", "mchange1": "General Minting Details",
"mchange2": "Blockchain Statistics", "mchange2": "Blockchain Statistics",
@ -162,5 +161,49 @@
"mchange36": "Your sponsor will issue you a Sponsorship Key which you will use to add to your node, and begin minting (for no rewards until reaching level 1.) Once you reach level 1, you create/assign your own Minting Key and begin earning rewards. You have XXXX blocks remaining in your sponsorship period.", "mchange36": "Your sponsor will issue you a Sponsorship Key which you will use to add to your node, and begin minting (for no rewards until reaching level 1.) Once you reach level 1, you create/assign your own Minting Key and begin earning rewards. You have XXXX blocks remaining in your sponsorship period.",
"mchange37": "Simply reach out to a minter in Qortal who is high enough level to issue a sponsorship key, obtain that key, then come back here and input the key to begin your minting journey !", "mchange37": "Simply reach out to a minter in Qortal who is high enough level to issue a sponsorship key, obtain that key, then come back here and input the key to begin your minting journey !",
"mchange38": "in" "mchange38": "in"
},
"walletpage": {
"wchange1": "Fetching balance ...",
"wchange2": "Current Wallet",
"wchange3": "Copy wallet address to clipboard",
"wchange4": "Address copied to clipboard",
"wchange5": "Transaction Details",
"wchange6": "Transaction Type",
"wchange7": "OUT",
"wchange8": "IN",
"wchange9": "Sender",
"wchange10": "Receiver",
"wchange11": "Amount",
"wchange12": "Transaction Fee",
"wchange13": "Block",
"wchange14": "Time",
"wchange15": "Transaction Signature",
"wchange16": "Transaction Hash",
"wchange17": "Send",
"wchange18": "From address",
"wchange19": "Available balance",
"wchange20": "To (address or name)",
"wchange21": "Current static fee:",
"wchange22": "Wallets",
"wchange23": "To (address)",
"wchange24": "Current fee per byte",
"wchange25": "Low fees may result in slow or unconfirmed transactions.",
"wchange26": "Insufficient Funds!",
"wchange27": "Invalid Amount!",
"wchange28": "Receiver cannot be empty!",
"wchange29": "Inalid Receiver!",
"wchange30": "Transaction Successful!",
"wchange31": "Transaction Failed!",
"wchange32": "Failed to Fetch QORT Balance. Try again!",
"wchange33": "Failed to Fetch",
"wchange34": "Balance. Try again!",
"wchange35": "Type",
"wchange36": "Fee",
"wchange37": "Total Amount",
"wchange38": "Address has no transactions yet.",
"wchange39": "Unable to copy address.",
"wchange40": "PAYMENT",
"wchange41": "Status",
"wchange42": "Confirmations"
} }
} }

View File

@ -161,5 +161,49 @@
"mchange36": "Your sponsor will issue you a Sponsorship Key which you will use to add to your node, and begin minting (for no rewards until reaching level 1.) Once you reach level 1, you create/assign your own Minting Key and begin earning rewards. You have XXXX blocks remaining in your sponsorship period.", "mchange36": "Your sponsor will issue you a Sponsorship Key which you will use to add to your node, and begin minting (for no rewards until reaching level 1.) Once you reach level 1, you create/assign your own Minting Key and begin earning rewards. You have XXXX blocks remaining in your sponsorship period.",
"mchange37": "Simply reach out to a minter in Qortal who is high enough level to issue a sponsorship key, obtain that key, then come back here and input the key to begin your minting journey !", "mchange37": "Simply reach out to a minter in Qortal who is high enough level to issue a sponsorship key, obtain that key, then come back here and input the key to begin your minting journey !",
"mchange38": "in" "mchange38": "in"
},
"walletpage": {
"wchange1": "Fetching balance ...",
"wchange2": "Current Wallet",
"wchange3": "Copy wallet address to clipboard",
"wchange4": "Address copied to clipboard",
"wchange5": "Transaction Details",
"wchange6": "Transaction Type",
"wchange7": "OUT",
"wchange8": "IN",
"wchange9": "Sender",
"wchange10": "Receiver",
"wchange11": "Amount",
"wchange12": "Transaction Fee",
"wchange13": "Block",
"wchange14": "Time",
"wchange15": "Transaction Signature",
"wchange16": "Transaction Hash",
"wchange17": "Send",
"wchange18": "From address",
"wchange19": "Available balance",
"wchange20": "To (address or name)",
"wchange21": "Current static fee:",
"wchange22": "Wallets",
"wchange23": "To (address)",
"wchange24": "Current fee per byte",
"wchange25": "Low fees may result in slow or unconfirmed transactions.",
"wchange26": "Insufficient Funds!",
"wchange27": "Invalid Amount!",
"wchange28": "Receiver cannot be empty!",
"wchange29": "Inalid Receiver!",
"wchange30": "Transaction Successful!",
"wchange31": "Transaction Failed!",
"wchange32": "Failed to Fetch QORT Balance. Try again!",
"wchange33": "Failed to Fetch",
"wchange34": "Balance. Try again!",
"wchange35": "Type",
"wchange36": "Fee",
"wchange37": "Total Amount",
"wchange38": "Address has no transactions yet.",
"wchange39": "Unable to copy address.",
"wchange40": "PAYMENT",
"wchange41": "Status",
"wchange42": "Confirmations"
} }
} }

View File

@ -161,5 +161,49 @@
"mchange36": "Your sponsor will issue you a Sponsorship Key which you will use to add to your node, and begin minting (for no rewards until reaching level 1.) Once you reach level 1, you create/assign your own Minting Key and begin earning rewards. You have XXXX blocks remaining in your sponsorship period.", "mchange36": "Your sponsor will issue you a Sponsorship Key which you will use to add to your node, and begin minting (for no rewards until reaching level 1.) Once you reach level 1, you create/assign your own Minting Key and begin earning rewards. You have XXXX blocks remaining in your sponsorship period.",
"mchange37": "Simply reach out to a minter in Qortal who is high enough level to issue a sponsorship key, obtain that key, then come back here and input the key to begin your minting journey !", "mchange37": "Simply reach out to a minter in Qortal who is high enough level to issue a sponsorship key, obtain that key, then come back here and input the key to begin your minting journey !",
"mchange38": "in" "mchange38": "in"
},
"walletpage": {
"wchange1": "Fetching balance ...",
"wchange2": "Current Wallet",
"wchange3": "Copy wallet address to clipboard",
"wchange4": "Address copied to clipboard",
"wchange5": "Transaction Details",
"wchange6": "Transaction Type",
"wchange7": "OUT",
"wchange8": "IN",
"wchange9": "Sender",
"wchange10": "Receiver",
"wchange11": "Amount",
"wchange12": "Transaction Fee",
"wchange13": "Block",
"wchange14": "Time",
"wchange15": "Transaction Signature",
"wchange16": "Transaction Hash",
"wchange17": "Send",
"wchange18": "From address",
"wchange19": "Available balance",
"wchange20": "To (address or name)",
"wchange21": "Current static fee:",
"wchange22": "Wallets",
"wchange23": "To (address)",
"wchange24": "Current fee per byte",
"wchange25": "Low fees may result in slow or unconfirmed transactions.",
"wchange26": "Insufficient Funds!",
"wchange27": "Invalid Amount!",
"wchange28": "Receiver cannot be empty!",
"wchange29": "Inalid Receiver!",
"wchange30": "Transaction Successful!",
"wchange31": "Transaction Failed!",
"wchange32": "Failed to Fetch QORT Balance. Try again!",
"wchange33": "Failed to Fetch",
"wchange34": "Balance. Try again!",
"wchange35": "Type",
"wchange36": "Fee",
"wchange37": "Total Amount",
"wchange38": "Address has no transactions yet.",
"wchange39": "Unable to copy address.",
"wchange40": "PAYMENT",
"wchange41": "Status",
"wchange42": "Confirmations"
} }
} }

View File

@ -161,5 +161,49 @@
"mchange36": "Your sponsor will issue you a Sponsorship Key which you will use to add to your node, and begin minting (for no rewards until reaching level 1.) Once you reach level 1, you create/assign your own Minting Key and begin earning rewards. You have XXXX blocks remaining in your sponsorship period.", "mchange36": "Your sponsor will issue you a Sponsorship Key which you will use to add to your node, and begin minting (for no rewards until reaching level 1.) Once you reach level 1, you create/assign your own Minting Key and begin earning rewards. You have XXXX blocks remaining in your sponsorship period.",
"mchange37": "Simply reach out to a minter in Qortal who is high enough level to issue a sponsorship key, obtain that key, then come back here and input the key to begin your minting journey !", "mchange37": "Simply reach out to a minter in Qortal who is high enough level to issue a sponsorship key, obtain that key, then come back here and input the key to begin your minting journey !",
"mchange38": "in" "mchange38": "in"
},
"walletpage": {
"wchange1": "Fetching balance ...",
"wchange2": "Current Wallet",
"wchange3": "Copy wallet address to clipboard",
"wchange4": "Address copied to clipboard",
"wchange5": "Transaction Details",
"wchange6": "Transaction Type",
"wchange7": "OUT",
"wchange8": "IN",
"wchange9": "Sender",
"wchange10": "Receiver",
"wchange11": "Amount",
"wchange12": "Transaction Fee",
"wchange13": "Block",
"wchange14": "Time",
"wchange15": "Transaction Signature",
"wchange16": "Transaction Hash",
"wchange17": "Send",
"wchange18": "From address",
"wchange19": "Available balance",
"wchange20": "To (address or name)",
"wchange21": "Current static fee:",
"wchange22": "Wallets",
"wchange23": "To (address)",
"wchange24": "Current fee per byte",
"wchange25": "Low fees may result in slow or unconfirmed transactions.",
"wchange26": "Insufficient Funds!",
"wchange27": "Invalid Amount!",
"wchange28": "Receiver cannot be empty!",
"wchange29": "Invalid Receiver!",
"wchange30": "Transaction Successful!",
"wchange31": "Transaction Failed!",
"wchange32": "Failed to Fetch QORT Balance. Try again!",
"wchange33": "Failed to Fetch",
"wchange34": "Balance. Try again!",
"wchange35": "Type",
"wchange36": "Fee",
"wchange37": "Total Amount",
"wchange38": "Address has no transactions yet.",
"wchange39": "Unable to copy address.",
"wchange40": "PAYMENT",
"wchange41": "Status",
"wchange42": "Confirmations"
} }
} }

View File

@ -1,6 +1,11 @@
import { LitElement, html, css } from 'lit' import { LitElement, html, css } from 'lit'
import { render } from 'lit/html.js' import { render } from 'lit/html.js'
import { Epml } from '../../../epml.js' import { Epml } from '../../../epml.js'
import { use, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate'
registerTranslateConfig({
loader: lang => fetch(`/language/${lang}.json`).then(res => res.json())
})
import '../components/ButtonIconCopy' import '../components/ButtonIconCopy'
import '@material/mwc-button' import '@material/mwc-button'
@ -50,7 +55,7 @@ class MultiWallet extends LitElement {
btcFeePerByte: { type: Number }, btcFeePerByte: { type: Number },
ltcFeePerByte: { type: Number }, ltcFeePerByte: { type: Number },
dogeFeePerByte: { type: Number }, dogeFeePerByte: { type: Number },
balanceString: 'Fetching balance ...' balanceString: { type: String }
} }
} }
@ -535,6 +540,7 @@ class MultiWallet extends LitElement {
height: 0, height: 0,
} }
this.balanceString = this.renderFetchText()
this.selectedTransaction = {} this.selectedTransaction = {}
this.isTextMenuOpen = false this.isTextMenuOpen = false
this.loading = true this.loading = true
@ -612,7 +618,7 @@ class MultiWallet extends LitElement {
return html` return html`
<div class="wrapper"> <div class="wrapper">
<div class="wallet"> <div class="wallet">
<div style="font-size: 20px; color: var(--black); padding: 16px; border-bottom: 1px solid var(--border);">Wallets</div> <div style="font-size: 20px; color: var(--black); padding: 16px; border-bottom: 1px solid var(--border);">${translate("walletpage.wchange22")}</div>
<div class="cards"> <div class="cards">
<div coin="qort" class="currency-box qort active"> <div coin="qort" class="currency-box qort active">
<div class="currency-image"></div> <div class="currency-image"></div>
@ -635,13 +641,13 @@ class MultiWallet extends LitElement {
<div class="transactions-wrapper"> <div class="transactions-wrapper">
<h2 class="wallet-header"> <h2 class="wallet-header">
Current Wallet ${translate("walletpage.wchange2")}
<div class="wallet-address"> <div class="wallet-address">
<span>${this.getSelectedWalletAddress()}</span> <span>${this.getSelectedWalletAddress()}</span>
<button-icon-copy <button-icon-copy
title="Copy wallet address to clipboard" title="${translate("walletpage.wchange3")}"
onSuccessMessage="Address copied to clipboard" onSuccessMessage="${translate("walletpage.wchange4")}"
onErrorMessage="Unable to copy address" onErrorMessage="${translate("walletpage.wchange39")}"
textToCopy=${this.getSelectedWalletAddress()} textToCopy=${this.getSelectedWalletAddress()}
buttonSize="28px" buttonSize="28px"
iconSize="16px" iconSize="16px"
@ -663,37 +669,37 @@ class MultiWallet extends LitElement {
<mwc-dialog id="showTransactionDetailsDialog" scrimClickAction="${this.showTransactionDetailsLoading ? '' : 'close'}"> <mwc-dialog id="showTransactionDetailsDialog" scrimClickAction="${this.showTransactionDetailsLoading ? '' : 'close'}">
<div style="text-align: center;"> <div style="text-align: center;">
<h1>Transaction Details</h1> <h1>${translate("walletpage.wchange5")}</h1>
<hr /> <hr />
</div> </div>
<div id="transactionList"> <div id="transactionList">
<span class="title"> Transaction Type </span> <span class="title"> ${translate("walletpage.wchange6")} </span>
<br /> <br />
<div> <div>
<span>${this.selectedTransaction.type}</span> <span>${this.selectedTransaction.type}</span>
${this.selectedTransaction.txnFlow === 'OUT' ? html`<span class="color-out">OUT</span>` : html`<span class="color-in">IN</span>`} ${this.selectedTransaction.txnFlow === 'OUT' ? html`<span class="color-out">${translate("walletpage.wchange7")}</span>` : html`<span class="color-in">${translate("walletpage.wchange8")}</span>`}
</div> </div>
<span class="title">Sender</span> <span class="title"> ${translate("walletpage.wchange9")} </span>
<br /> <br />
<div><span>${this.selectedTransaction.creatorAddress}</span></div> <div><span>${this.selectedTransaction.creatorAddress}</span></div>
<span class="title">Receiver</span> <span class="title"> ${translate("walletpage.wchange10")} </span>
<br /> <br />
<div><span>${this.selectedTransaction.recipient}</span></div> <div><span>${this.selectedTransaction.recipient}</span></div>
${!this.selectedTransaction.amount ? '' : html` ${!this.selectedTransaction.amount ? '' : html`
<span class="title">Amount</span> <span class="title"> ${translate("walletpage.wchange11")} </span>
<br /> <br />
<div><span>${this.selectedTransaction.amount} QORT</span></div> <div><span>${this.selectedTransaction.amount} QORT</span></div>
`} `}
<span class="title"> Transaction Fee </span> <span class="title"> ${translate("walletpage.wchange12")} </span>
<br /> <br />
<div><span>${this.selectedTransaction.fee}</span></div> <div><span>${this.selectedTransaction.fee}</span></div>
<span class="title">Block</span> <span class="title"> ${translate("walletpage.wchange13")} </span>
<br /> <br />
<div><span>${this.selectedTransaction.blockHeight}</span></div> <div><span>${this.selectedTransaction.blockHeight}</span></div>
<span class="title">Time</span> <span class="title"> ${translate("walletpage.wchange14")} </span>
<br /> <br />
<div><span>${new Date(this.selectedTransaction.timestamp).toString()}</span></div> <div><span>${new Date(this.selectedTransaction.timestamp).toString()}</span></div>
<span class="title"> Transaction Signature </span> <span class="title"> ${translate("walletpage.wchange15")} </span>
<br /> <br />
<div><span>${this.selectedTransaction.signature}</span></div> <div><span>${this.selectedTransaction.signature}</span></div>
</div> </div>
@ -702,46 +708,46 @@ class MultiWallet extends LitElement {
dialogAction="cancel" dialogAction="cancel"
class="red" class="red"
> >
Close ${translate("general.close")}
</mwc-button> </mwc-button>
</mwc-dialog> </mwc-dialog>
<mwc-dialog id="showBtcTransactionDetailsDialog" scrimClickAction="${this.showBtcTransactionDetailsLoading ? '' : 'close'}"> <mwc-dialog id="showBtcTransactionDetailsDialog" scrimClickAction="${this.showBtcTransactionDetailsLoading ? '' : 'close'}">
<div style="text-align: center;"> <div style="text-align: center;">
<h1>Transaction Details</h1> <h1>${translate("walletpage.wchange5")}</h1>
<hr /> <hr />
</div> </div>
<div id="transactionList"> <div id="transactionList">
<span class="title"> Transaction Type </span> <span class="title"> ${translate("walletpage.wchange6")} </span>
<br /> <br />
<div> <div>
<span>PAYMENT</span> <span>${translate("walletpage.wchange40")}</span>
${this.selectedTransaction.btcTxnFlow === 'OUT' ? html`<span class="color-out">OUT</span>` : html`<span class="color-in">IN</span>`} ${this.selectedTransaction.btcTxnFlow === 'OUT' ? html`<span class="color-out">${translate("walletpage.wchange7")}</span>` : html`<span class="color-in">${translate("walletpage.wchange8")}</span>`}
</div> </div>
<span class="title"> Sender </span> <span class="title"> ${translate("walletpage.wchange9")} </span>
<br /> <br />
<div> <div>
<span>${this.selectedTransaction.btcSender}</span> <span>${this.selectedTransaction.btcSender}</span>
</div> </div>
<span class="title"> Receiver </span> <span class="title"> ${translate("walletpage.wchange10")} </span>
<br /> <br />
<div> <div>
<span>${this.selectedTransaction.btcReceiver}</span> <span>${this.selectedTransaction.btcReceiver}</span>
</div> </div>
<span class="title"> Transaction Fee </span> <span class="title"> ${translate("walletpage.wchange12")} </span>
<br /> <br />
<div> <div>
<span>${(this.selectedTransaction.feeAmount / 1e8).toFixed(8)} BTC</span> <span>${(this.selectedTransaction.feeAmount / 1e8).toFixed(8)} BTC</span>
</div> </div>
<span class="title"> Total Amount </span> <span class="title"> ${translate("walletpage.wchange37")} </span>
<br /> <br />
<div> <div>
<span>${(this.selectedTransaction.totalAmount / 1e8).toFixed(8)} BTC</span> <span>${(this.selectedTransaction.totalAmount / 1e8).toFixed(8)} BTC</span>
</div> </div>
<span class="title"> Time </span> <span class="title"> ${translate("walletpage.wchange14")} </span>
<br /> <br />
<div><span>${new Date(this.selectedTransaction.timestamp).toString()}</span></div> <div><span>${new Date(this.selectedTransaction.timestamp).toString()}</span></div>
<span class="title"> Transaction Hash </span> <span class="title"> ${translate("walletpage.wchange16")} </span>
<br /> <br />
<div> <div>
<span>${this.selectedTransaction.txHash}</span> <span>${this.selectedTransaction.txHash}</span>
@ -752,46 +758,46 @@ class MultiWallet extends LitElement {
dialogAction="cancel" dialogAction="cancel"
class="red" class="red"
> >
Close ${translate("general.close")}
</mwc-button> </mwc-button>
</mwc-dialog> </mwc-dialog>
<mwc-dialog id="showLtcTransactionDetailsDialog" scrimClickAction="${this.showLtcTransactionDetailsLoading ? '' : 'close'}"> <mwc-dialog id="showLtcTransactionDetailsDialog" scrimClickAction="${this.showLtcTransactionDetailsLoading ? '' : 'close'}">
<div style="text-align: center;"> <div style="text-align: center;">
<h1>Transaction Details</h1> <h1>${translate("walletpage.wchange5")}</h1>
<hr /> <hr />
</div> </div>
<div id="transactionList"> <div id="transactionList">
<span class="title"> Transaction Type </span> <span class="title"> ${translate("walletpage.wchange6")}e </span>
<br /> <br />
<div> <div>
<span>PAYMENT</span> <span>${translate("walletpage.wchange40")}</span>
${this.selectedTransaction.ltcTxnFlow === 'OUT' ? html`<span class="color-out">OUT</span>` : html`<span class="color-in">IN</span>`} ${this.selectedTransaction.ltcTxnFlow === 'OUT' ? html`<span class="color-out">${translate("walletpage.wchange7")}</span>` : html`<span class="color-in">${translate("walletpage.wchange8")}</span>`}
</div> </div>
<span class="title"> Sender </span> <span class="title"> ${translate("walletpage.wchange9")} </span>
<br /> <br />
<div> <div>
<span>${this.selectedTransaction.ltcSender}</span> <span>${this.selectedTransaction.ltcSender}</span>
</div> </div>
<span class="title"> Receiver </span> <span class="title"> ${translate("walletpage.wchange10")} </span>
<br /> <br />
<div> <div>
<span>${this.selectedTransaction.ltcReceiver}</span> <span> ${this.selectedTransaction.ltcReceiver} </span>
</div> </div>
<span class="title"> Transaction Fee </span> <span class="title"> ${translate("walletpage.wchange12")} </span>
<br /> <br />
<div> <div>
<span>${(this.selectedTransaction.feeAmount / 1e8).toFixed(8)} LTC</span> <span> ${(this.selectedTransaction.feeAmount / 1e8).toFixed(8)} LTC </span>
</div> </div>
<span class="title"> Total Amount </span> <span class="title"> ${translate("walletpage.wchange37")} </span>
<br /> <br />
<div> <div>
<span>${(this.selectedTransaction.totalAmount / 1e8).toFixed(8)} LTC</span> <span> ${(this.selectedTransaction.totalAmount / 1e8).toFixed(8)} LTC </span>
</div> </div>
<span class="title"> Time </span> <span class="title"> ${translate("walletpage.wchange14")} </span>
<br /> <br />
<div><span>${new Date(this.selectedTransaction.timestamp).toString()}</span></div> <div><span>${new Date(this.selectedTransaction.timestamp).toString()}</span></div>
<span class="title"> Transaction Hash </span> <span class="title"> ${translate("walletpage.wchange16")} </span>
<br /> <br />
<div> <div>
<span>${this.selectedTransaction.txHash}</span> <span>${this.selectedTransaction.txHash}</span>
@ -802,46 +808,46 @@ class MultiWallet extends LitElement {
dialogAction="cancel" dialogAction="cancel"
class="red" class="red"
> >
Close ${translate("general.close")}
</mwc-button> </mwc-button>
</mwc-dialog> </mwc-dialog>
<mwc-dialog id="showDogeTransactionDetailsDialog" scrimClickAction="${this.showDogeTransactionDetailsLoading ? '' : 'close'}"> <mwc-dialog id="showDogeTransactionDetailsDialog" scrimClickAction="${this.showDogeTransactionDetailsLoading ? '' : 'close'}">
<div style="text-align: center;"> <div style="text-align: center;">
<h1>Transaction Details</h1> <h1>${translate("walletpage.wchange5")}</h1>
<hr /> <hr />
</div> </div>
<div id="transactionList"> <div id="transactionList">
<span class="title"> Transaction Type </span> <span class="title"> ${translate("walletpage.wchange6")} </span>
<br /> <br />
<div> <div>
<span>PAYMENT</span> <span>${translate("walletpage.wchange40")}</span>
${this.selectedTransaction.dogeTxnFlow === 'OUT' ? html`<span class="color-out">OUT</span>` : html`<span class="color-in">IN</span>`} ${this.selectedTransaction.dogeTxnFlow === 'OUT' ? html`<span class="color-out">${translate("walletpage.wchange7")}</span>` : html`<span class="color-in">${translate("walletpage.wchange8")}</span>`}
</div> </div>
<span class="title"> Sender </span> <span class="title"> ${translate("walletpage.wchange9")} </span>
<br /> <br />
<div> <div>
<span>${this.selectedTransaction.dogeSender}</span> <span>${this.selectedTransaction.dogeSender}</span>
</div> </div>
<span class="title"> Receiver </span> <span class="title"> ${translate("walletpage.wchange10")} </span>
<br /> <br />
<div> <div>
<span>${this.selectedTransaction.dogeReceiver}</span> <span>${this.selectedTransaction.dogeReceiver}</span>
</div> </div>
<span class="title"> Transaction Fee </span> <span class="title"> ${translate("walletpage.wchange12")} </span>
<br /> <br />
<div> <div>
<span>${(this.selectedTransaction.feeAmount / 1e8).toFixed(8)} DOGE</span> <span>${(this.selectedTransaction.feeAmount / 1e8).toFixed(8)} DOGE</span>
</div> </div>
<span class="title"> Total Amount </span> <span class="title"> ${translate("walletpage.wchange37")} </span>
<br /> <br />
<div> <div>
<span>${(this.selectedTransaction.totalAmount / 1e8).toFixed(8)} DOGE</span> <span>${(this.selectedTransaction.totalAmount / 1e8).toFixed(8)} DOGE</span>
</div> </div>
<span class="title"> Time </span> <span class="title"> ${translate("walletpage.wchange14")} </span>
<br /> <br />
<div><span>${new Date(this.selectedTransaction.timestamp).toString()}</span></div> <div><span>${new Date(this.selectedTransaction.timestamp).toString()}</span></div>
<span class="title"> Transaction Hash </span> <span class="title"> ${translate("walletpage.wchange16")} </span>
<br /> <br />
<div> <div>
<span>${this.selectedTransaction.txHash}</span> <span>${this.selectedTransaction.txHash}</span>
@ -852,7 +858,7 @@ class MultiWallet extends LitElement {
dialogAction="cancel" dialogAction="cancel"
class="red" class="red"
> >
Close ${translate("general.close")}
</mwc-button> </mwc-button>
</mwc-dialog> </mwc-dialog>
@ -860,15 +866,15 @@ class MultiWallet extends LitElement {
<div class="send-coin-dialog"> <div class="send-coin-dialog">
<div style="text-align: center;"> <div style="text-align: center;">
<img src="/img/qort.png" width="32" height="32"> <img src="/img/qort.png" width="32" height="32">
<h2> Send QORT</h2> <h2> ${translate("walletpage.wchange17")} QORT</h2>
<hr /> <hr />
</div> </div>
<p> <p>
<span>From address:</span><br /> <span>${translate("walletpage.wchange18")}:</span><br />
<span style="font-weight: bold;">${this.getSelectedWalletAddress()}</span> <span style="font-weight: bold;">${this.getSelectedWalletAddress()}</span>
</p> </p>
<p> <p>
<span>Available balance:</span><br /> <span>${translate("walletpage.wchange19")}:</span><br />
<span style="font-weight: bold;">${this.balanceString}</span> <span style="font-weight: bold;">${this.balanceString}</span>
</p> </p>
<p> <p>
@ -877,7 +883,7 @@ class MultiWallet extends LitElement {
required required
@input="${(e) => { this._checkAmount(e) }}" @input="${(e) => { this._checkAmount(e) }}"
id="amountInput" id="amountInput"
label="Amount (QORT)" label="${translate("walletpage.wchange11")} (QORT)"
type="number" type="number"
auto-validate="false" auto-validate="false"
value="${this.amount}" value="${this.amount}"
@ -889,14 +895,14 @@ class MultiWallet extends LitElement {
style="width: 100%;" style="width: 100%;"
required required
id="recipient" id="recipient"
label="To (address or name)" label="${translate("walletpage.wchange20")}"
type="text" type="text"
value="${this.recipient}" value="${this.recipient}"
> >
</mwc-textfield> </mwc-textfield>
</p> </p>
<div style="margin-bottom: 0;"> <div style="margin-bottom: 0;">
<p style="margin-bottom: 0;">Current static fee: <span style="font-weight: bold;">0.001 QORT<span></p> <p style="margin-bottom: 0;">${translate("walletpage.wchange21")} <span style="font-weight: bold;">0.001 QORT<span></p>
</div> </div>
<p style="color: red;">${this.errorMessage}</p> <p style="color: red;">${this.errorMessage}</p>
<p style="color: green;">${this.successMessage}</p> <p style="color: green;">${this.successMessage}</p>
@ -905,7 +911,7 @@ class MultiWallet extends LitElement {
<div> <div>
<vaadin-button ?disabled="${this.btnDisable}" theme="primary medium" style="width: 100%;" @click=${() => this.sendQort()}> <vaadin-button ?disabled="${this.btnDisable}" theme="primary medium" style="width: 100%;" @click=${() => this.sendQort()}>
<vaadin-icon icon="vaadin:arrow-forward" slot="prefix"></vaadin-icon> <vaadin-icon icon="vaadin:arrow-forward" slot="prefix"></vaadin-icon>
Send QORT ${translate("walletpage.wchange17")} QORT
</vaadin-button> </vaadin-button>
</div> </div>
</div> </div>
@ -915,7 +921,7 @@ class MultiWallet extends LitElement {
dialogAction="cancel" dialogAction="cancel"
class="red" class="red"
> >
Close ${translate("general.close")}
</mwc-button> </mwc-button>
</mwc-dialog> </mwc-dialog>
@ -923,7 +929,7 @@ class MultiWallet extends LitElement {
<div class="send-coin-dialog"> <div class="send-coin-dialog">
<div style="text-align: center;"> <div style="text-align: center;">
<img src="/img/btc.png" width="32" height="32"> <img src="/img/btc.png" width="32" height="32">
<h2>Send BTC</h2> <h2>${translate("walletpage.wchange17")} BTC</h2>
<hr /> <hr />
</div> </div>
<p> <p>
@ -940,7 +946,7 @@ class MultiWallet extends LitElement {
required required
@input="${(e) => { this._checkAmount(e) }}" @input="${(e) => { this._checkAmount(e) }}"
id="btcAmountInput" id="btcAmountInput"
label="Amount (BTC)" label="${translate("walletpage.wchange11")} (BTC)"
type="number" type="number"
auto-validate="false" auto-validate="false"
value="${this.btcAmount}" value="${this.btcAmount}"
@ -959,7 +965,7 @@ class MultiWallet extends LitElement {
</mwc-textfield> </mwc-textfield>
</p> </p>
<div style="margin-bottom: 0;"> <div style="margin-bottom: 0;">
<p style="margin-bottom: 0;">Current fee per byte: <span style="font-weight: bold;">${(this.btcFeePerByte / 1e8).toFixed(8)} BTC</span><br>Low fees may result in slow or unconfirmed transactions.</p> <p style="margin-bottom: 0;">${translate("walletpage.wchange24")}: <span style="font-weight: bold;">${(this.btcFeePerByte / 1e8).toFixed(8)} BTC</span><br>${translate("walletpage.wchange25")}</p>
<paper-slider <paper-slider
class="blue" class="blue"
style="width: 100%;" style="width: 100%;"
@ -979,7 +985,7 @@ class MultiWallet extends LitElement {
<div> <div>
<vaadin-button ?disabled="${this.btnDisable}" theme="primary medium" style="width: 100%;" @click=${() => this.sendBtc()}> <vaadin-button ?disabled="${this.btnDisable}" theme="primary medium" style="width: 100%;" @click=${() => this.sendBtc()}>
<vaadin-icon icon="vaadin:arrow-forward" slot="prefix"></vaadin-icon> <vaadin-icon icon="vaadin:arrow-forward" slot="prefix"></vaadin-icon>
Send BTC ${translate("walletpage.wchange17")} BTC
</vaadin-button> </vaadin-button>
</div> </div>
</div> </div>
@ -989,7 +995,7 @@ class MultiWallet extends LitElement {
dialogAction="cancel" dialogAction="cancel"
class="red" class="red"
> >
Close ${translate("general.close")}
</mwc-button> </mwc-button>
</mwc-dialog> </mwc-dialog>
@ -997,15 +1003,15 @@ class MultiWallet extends LitElement {
<div class="send-coin-dialog"> <div class="send-coin-dialog">
<div style="text-align: center;"> <div style="text-align: center;">
<img src="/img/ltc.png" width="32" height="32"> <img src="/img/ltc.png" width="32" height="32">
<h2>Send LTC</h2> <h2>${translate("walletpage.wchange17")} LTC</h2>
<hr /> <hr />
</div> </div>
<p> <p>
<span>From address:</span><br /> <span>${translate("walletpage.wchange18")}:</span><br />
<span style="font-weight: bold;">${this.getSelectedWalletAddress()}</span> <span style="font-weight: bold;">${this.getSelectedWalletAddress()}</span>
</p> </p>
<p> <p>
<span>Available balance:</span><br /> <span>${translate("walletpage.wchange19")}:</span><br />
<span style="font-weight: bold;">${this.balanceString}</span> <span style="font-weight: bold;">${this.balanceString}</span>
</p> </p>
<p> <p>
@ -1014,7 +1020,7 @@ class MultiWallet extends LitElement {
required required
@input="${(e) => { this._checkAmount(e) }}" @input="${(e) => { this._checkAmount(e) }}"
id="ltcAmountInput" id="ltcAmountInput"
label="Amount (LTC)" label="${translate("walletpage.wchange11")} (LTC)"
type="number" type="number"
auto-validate="false" auto-validate="false"
value="${this.ltcAmount}" value="${this.ltcAmount}"
@ -1026,14 +1032,14 @@ class MultiWallet extends LitElement {
style="width: 100%;" style="width: 100%;"
required required
id="ltcRecipient" id="ltcRecipient"
label="To (address)" label="${translate("walletpage.wchange23")}"
type="text" type="text"
value="${this.ltcRecipient}" value="${this.ltcRecipient}"
> >
</mwc-textfield> </mwc-textfield>
</p> </p>
<div style="margin-bottom: 0;"> <div style="margin-bottom: 0;">
<p style="margin-bottom: 0;">Current fee per byte: <span style="font-weight: bold;">${(this.ltcFeePerByte / 1e8).toFixed(8)} LTC</span><br>Low fees may result in slow or unconfirmed transactions.</p> <p style="margin-bottom: 0;">${translate("walletpage.wchange24")}: <span style="font-weight: bold;">${(this.ltcFeePerByte / 1e8).toFixed(8)} LTC</span><br>${translate("walletpage.wchange25")}</p>
<paper-slider <paper-slider
class="blue" class="blue"
style="width: 100%;" style="width: 100%;"
@ -1053,7 +1059,7 @@ class MultiWallet extends LitElement {
<div> <div>
<vaadin-button ?disabled="${this.btnDisable}" theme="primary medium" style="width: 100%;" @click=${() => this.sendLtc()}> <vaadin-button ?disabled="${this.btnDisable}" theme="primary medium" style="width: 100%;" @click=${() => this.sendLtc()}>
<vaadin-icon icon="vaadin:arrow-forward" slot="prefix"></vaadin-icon> <vaadin-icon icon="vaadin:arrow-forward" slot="prefix"></vaadin-icon>
Send LTC ${translate("walletpage.wchange17")} LTC
</vaadin-button> </vaadin-button>
</div> </div>
</div> </div>
@ -1063,7 +1069,7 @@ class MultiWallet extends LitElement {
dialogAction="cancel" dialogAction="cancel"
class="red" class="red"
> >
Close ${translate("general.close")}
</mwc-button> </mwc-button>
</mwc-dialog> </mwc-dialog>
@ -1071,15 +1077,15 @@ class MultiWallet extends LitElement {
<div class="send-coin-dialog"> <div class="send-coin-dialog">
<div style="text-align: center;"> <div style="text-align: center;">
<img src="/img/doge.png" width="32" height="32"> <img src="/img/doge.png" width="32" height="32">
<h2>Send DOGE</h2> <h2>${translate("walletpage.wchange17")} DOGE</h2>
<hr /> <hr />
</div> </div>
<p> <p>
<span>From address:</span><br /> <span>${translate("walletpage.wchange18")}:</span><br />
<span style="font-weight: bold;">${this.getSelectedWalletAddress()}</span> <span style="font-weight: bold;">${this.getSelectedWalletAddress()}</span>
</p> </p>
<p> <p>
<span>Available balance:</span><br /> <span>${translate("walletpage.wchange19")}:</span><br />
<span style="font-weight: bold;">${this.balanceString}</span> <span style="font-weight: bold;">${this.balanceString}</span>
</p> </p>
<p> <p>
@ -1088,7 +1094,7 @@ class MultiWallet extends LitElement {
required required
@input="${(e) => { this._checkAmount(e) }}" @input="${(e) => { this._checkAmount(e) }}"
id="dogeAmountInput" id="dogeAmountInput"
label="Amount (DOGE)" label="${translate("walletpage.wchange11")} (DOGE)"
type="number" type="number"
auto-validate="false" auto-validate="false"
value="${this.dogeAmount}" value="${this.dogeAmount}"
@ -1100,7 +1106,7 @@ class MultiWallet extends LitElement {
style="width: 100%;" style="width: 100%;"
required required
id="dogeRecipient" id="dogeRecipient"
label="To (address)" label="${translate("walletpage.wchange23")}"
type="text" type="text"
value="${this.dogeRecipient}" value="${this.dogeRecipient}"
> >
@ -1108,7 +1114,7 @@ class MultiWallet extends LitElement {
</p> </p>
<div style="margin-bottom: 0;"> <div style="margin-bottom: 0;">
<p style="margin-bottom: 0;"> <p style="margin-bottom: 0;">
Current fee per byte: <span style="font-weight: bold;">${(this.dogeFeePerByte / 1e8).toFixed(8)} DOGE</span><br>Low fees may result in slow or unconfirmed transactions. ${translate("walletpage.wchange24")}: <span style="font-weight: bold;">${(this.dogeFeePerByte / 1e8).toFixed(8)} DOGE</span><br>L${translate("walletpage.wchange25")}
</p> </p>
<paper-slider <paper-slider
class="blue" class="blue"
@ -1129,7 +1135,7 @@ class MultiWallet extends LitElement {
<div> <div>
<vaadin-button ?disabled="${this.btnDisable}" theme="primary medium" style="width: 100%;" @click=${() => this.sendDoge()}> <vaadin-button ?disabled="${this.btnDisable}" theme="primary medium" style="width: 100%;" @click=${() => this.sendDoge()}>
<vaadin-icon icon="vaadin:arrow-forward" slot="prefix"></vaadin-icon> <vaadin-icon icon="vaadin:arrow-forward" slot="prefix"></vaadin-icon>
Send DOGE ${translate("walletpage.wchange17")} DOGE
</vaadin-button> </vaadin-button>
</div> </div>
</div> </div>
@ -1139,7 +1145,7 @@ class MultiWallet extends LitElement {
dialogAction="cancel" dialogAction="cancel"
class="red" class="red"
> >
Close ${translate("general.close")}
</mwc-button> </mwc-button>
</mwc-dialog> </mwc-dialog>
</div> </div>
@ -1154,6 +1160,12 @@ class MultiWallet extends LitElement {
this.changeTheme(); this.changeTheme();
}, 100) }, 100)
this.changeLanguage()
setInterval(() => {
this.changeLanguage()
}, 100)
setInterval(() => { setInterval(() => {
this.errorMessage = ''; this.errorMessage = '';
}, 5000) }, 5000)
@ -1374,6 +1386,42 @@ class MultiWallet extends LitElement {
}) })
} }
renderFetchText() {
return html`${translate("walletpage.wchange1")}`
}
renderFundsText() {
return html`${translate("walletpage.wchange26")}`
}
renderInvalidText() {
return html`${translate("walletpage.wchange27")}`
}
renderEmptyText() {
return html`${translate("walletpage.wchange28")}`
}
renderReceiverText() {
return html`${translate("walletpage.wchange29")}`
}
renderSuccessText() {
return html`${translate("walletpage.wchange30")}`
}
renderFailText() {
return html`${translate("walletpage.wchange31")}`
}
renderOutText() {
return html`${translate("walletpage.wchange7")}`
}
renderInText() {
return html`${translate("walletpage.wchange8")}`
}
selectWallet(event) { selectWallet(event) {
event.preventDefault() event.preventDefault()
@ -1401,7 +1449,7 @@ class MultiWallet extends LitElement {
e.target.focus() e.target.focus()
e.target.invalid = true e.target.invalid = true
e.target.validationMessage = 'Invalid Amount!' e.target.validationMessage = this.renderInvalidText()
} else { } else {
this.btnDisable = false this.btnDisable = false
} }
@ -1412,7 +1460,7 @@ class MultiWallet extends LitElement {
e.target.validityTransform = (newValue, nativeValidity) => { e.target.validityTransform = (newValue, nativeValidity) => {
if (newValue.includes('-') === true) { if (newValue.includes('-') === true) {
this.btnDisable = true this.btnDisable = true
target.validationMessage = 'Invalid Amount!' target.validationMessage = this.renderInvalidText()
return { return {
valid: false, valid: false,
@ -1422,7 +1470,7 @@ class MultiWallet extends LitElement {
let myAmount = newValue.split('.') let myAmount = newValue.split('.')
if (myAmount[1].length > 8) { if (myAmount[1].length > 8) {
this.btnDisable = true this.btnDisable = true
target.validationMessage = 'Invalid Amount!' target.validationMessage = this.renderInvalidText()
} else { } else {
return { return {
valid: true, valid: true,
@ -1459,21 +1507,21 @@ class MultiWallet extends LitElement {
if (parseFloat(amount) + parseFloat(0.001) > parseFloat(this.balance)) { if (parseFloat(amount) + parseFloat(0.001) > parseFloat(this.balance)) {
this.sendMoneyLoading = false this.sendMoneyLoading = false
this.btnDisable = false this.btnDisable = false
parentEpml.request('showSnackBar', 'Insufficient Funds!') parentEpml.request('showSnackBar', this.renderFundsText())
return false return false
} }
if (parseFloat(amount) <= 0) { if (parseFloat(amount) <= 0) {
this.sendMoneyLoading = false this.sendMoneyLoading = false
this.btnDisable = false this.btnDisable = false
parentEpml.request('showSnackBar', 'Invalid Amount!') parentEpml.request('showSnackBar', this.renderInvalidText())
return false return false
} }
if (recipient.length === 0) { if (recipient.length === 0) {
this.sendMoneyLoading = false this.sendMoneyLoading = false
this.btnDisable = false this.btnDisable = false
parentEpml.request('showSnackBar', 'Receiver cannot be empty!') parentEpml.request('showSnackBar', this.renderEmptyText())
return false return false
} }
@ -1525,8 +1573,8 @@ class MultiWallet extends LitElement {
let myTransaction = await makeTransactionRequest(myNameAddress, lastRef) let myTransaction = await makeTransactionRequest(myNameAddress, lastRef)
getTxnRequestResponse(myTransaction) getTxnRequestResponse(myTransaction)
} else { } else {
console.error('INVALID_RECEIVER') console.error(this.renderReceiverText())
this.errorMessage = 'INVALID_RECEIVER' this.errorMessage = this.renderReceiverText()
this.sendMoneyLoading = false this.sendMoneyLoading = false
this.btnDisable = false this.btnDisable = false
} }
@ -1562,7 +1610,7 @@ class MultiWallet extends LitElement {
this.errorMessage = '' this.errorMessage = ''
this.recipient = '' this.recipient = ''
this.amount = 0 this.amount = 0
this.successMessage = 'Transaction Successful!' this.successMessage = this.renderReceiverText()
this.sendMoneyLoading = false this.sendMoneyLoading = false
this.btnDisable = false this.btnDisable = false
} else { } else {
@ -1602,11 +1650,11 @@ class MultiWallet extends LitElement {
this.errorMessage = '' this.errorMessage = ''
this.btcRecipient = '' this.btcRecipient = ''
this.btcAmount = 0 this.btcAmount = 0
this.successMessage = 'Transaction Successful!' this.successMessage = this.renderSuccessText()
this.sendMoneyLoading = false this.sendMoneyLoading = false
this.btnDisable = false this.btnDisable = false
} else if (response === false) { } else if (response === false) {
this.errorMessage = 'Transaction Failed!' this.errorMessage = this.renderFailText()
this.sendMoneyLoading = false this.sendMoneyLoading = false
this.btnDisable = false this.btnDisable = false
throw new Error(txnResponse) throw new Error(txnResponse)
@ -1648,11 +1696,11 @@ class MultiWallet extends LitElement {
this.errorMessage = '' this.errorMessage = ''
this.ltcRecipient = '' this.ltcRecipient = ''
this.ltcAmount = 0 this.ltcAmount = 0
this.successMessage = 'Transaction Successful!' this.successMessage = this.renderSuccessText()
this.sendMoneyLoading = false this.sendMoneyLoading = false
this.btnDisable = false this.btnDisable = false
} else if (response === false) { } else if (response === false) {
this.errorMessage = 'Transaction Failed!' this.errorMessage = this.renderFailText()
this.sendMoneyLoading = false this.sendMoneyLoading = false
this.btnDisable = false this.btnDisable = false
throw new Error(txnResponse) throw new Error(txnResponse)
@ -1694,11 +1742,11 @@ class MultiWallet extends LitElement {
this.errorMessage = '' this.errorMessage = ''
this.dogeRecipient = '' this.dogeRecipient = ''
this.dogeAmount = 0 this.dogeAmount = 0
this.successMessage = 'Transaction Successful!' this.successMessage = this.renderSuccessText()
this.sendMoneyLoading = false this.sendMoneyLoading = false
this.btnDisable = false this.btnDisable = false
} else if (response === false) { } else if (response === false) {
this.errorMessage = 'Transaction Failed!' this.errorMessage = this.renderFailText()
this.sendMoneyLoading = false this.sendMoneyLoading = false
this.btnDisable = false this.btnDisable = false
throw new Error(txnResponse) throw new Error(txnResponse)
@ -1736,7 +1784,7 @@ class MultiWallet extends LitElement {
} }
async fetchWalletDetails(coin) { async fetchWalletDetails(coin) {
this.balanceString = "Fetching balance ..." this.balanceString = this.renderFetchText()
switch (coin) { switch (coin) {
case 'qort': case 'qort':
parentEpml.request('apiCall', { parentEpml.request('apiCall', {
@ -1744,7 +1792,7 @@ class MultiWallet extends LitElement {
}) })
.then((res) => { .then((res) => {
if (isNaN(Number(res))) { if (isNaN(Number(res))) {
parentEpml.request('showSnackBar', `Failed to Fetch QORT Balance. Try again!`) parentEpml.request('showSnackBar', `${translate("walletpage.wchange32")}`)
} else { } else {
if (this._selectedWallet == coin) { if (this._selectedWallet == coin) {
this.wallets.get(coin).balance = Number(res).toFixed(8) this.wallets.get(coin).balance = Number(res).toFixed(8)
@ -1771,7 +1819,7 @@ class MultiWallet extends LitElement {
}) })
.then((res) => { .then((res) => {
if (isNaN(Number(res))) { if (isNaN(Number(res))) {
parentEpml.request('showSnackBar', `Failed to Fetch ${coin.toLocaleUpperCase()} Balance. Try again!`) parentEpml.request('showSnackBar', `${translate("walletpage.wchange33")} ${coin.toLocaleUpperCase()} ${translate("walletpage.wchange34")}!`)
} else { } else {
if (this._selectedWallet == coin) { if (this._selectedWallet == coin) {
this.wallets.get(this._selectedWallet).balance = (Number(res) / 1e8).toFixed(8) this.wallets.get(this._selectedWallet).balance = (Number(res) / 1e8).toFixed(8)
@ -1804,13 +1852,13 @@ class MultiWallet extends LitElement {
renderSendButton() { renderSendButton() {
if ( this._selectedWallet === "qort" ) { if ( this._selectedWallet === "qort" ) {
return html`<vaadin-button theme="primary large" style="width: 75%;" @click=${() => this.openSendQort()}><vaadin-icon icon="vaadin:coin-piles" slot="prefix"></vaadin-icon> Send QORT</vaadin-button>` return html`<vaadin-button theme="primary large" style="width: 75%;" @click=${() => this.openSendQort()}><vaadin-icon icon="vaadin:coin-piles" slot="prefix"></vaadin-icon> ${translate("walletpage.wchange17")} QORT</vaadin-button>`
} else if ( this._selectedWallet === "btc" ) { } else if ( this._selectedWallet === "btc" ) {
return html`<vaadin-button theme="primary large" style="width: 75%;" @click=${() => this.openSendBtc()}><vaadin-icon icon="vaadin:coin-piles" slot="prefix"></vaadin-icon> Send BTC</vaadin-button>` return html`<vaadin-button theme="primary large" style="width: 75%;" @click=${() => this.openSendBtc()}><vaadin-icon icon="vaadin:coin-piles" slot="prefix"></vaadin-icon> ${translate("walletpage.wchange17")} BTC</vaadin-button>`
} else if ( this._selectedWallet === "ltc" ) { } else if ( this._selectedWallet === "ltc" ) {
return html`<vaadin-button theme="primary large" style="width: 75%;" @click=${() => this.openSendLtc()}><vaadin-icon icon="vaadin:coin-piles" slot="prefix"></vaadin-icon> Send LTC</vaadin-button>` return html`<vaadin-button theme="primary large" style="width: 75%;" @click=${() => this.openSendLtc()}><vaadin-icon icon="vaadin:coin-piles" slot="prefix"></vaadin-icon> ${translate("walletpage.wchange17")} LTC</vaadin-button>`
} else if ( this._selectedWallet === "doge" ) { } else if ( this._selectedWallet === "doge" ) {
return html`<vaadin-button theme="primary large" style="width: 75%;" @click=${() => this.openSendDoge()}><vaadin-icon icon="vaadin:coin-piles" slot="prefix"></vaadin-icon> Send DOGE</vaadin-button>` return html`<vaadin-button theme="primary large" style="width: 75%;" @click=${() => this.openSendDoge()}><vaadin-icon icon="vaadin:coin-piles" slot="prefix"></vaadin-icon> ${translate("walletpage.wchange17")} DOGE</vaadin-button>`
} else { } else {
return html`` return html``
} }
@ -1842,6 +1890,17 @@ class MultiWallet extends LitElement {
document.querySelector('html').setAttribute('theme', this.theme); document.querySelector('html').setAttribute('theme', this.theme);
} }
changeLanguage() {
const checkLanguage = localStorage.getItem('qortalLanguage')
if (checkLanguage === null || checkLanguage.length === 0) {
localStorage.setItem('qortalLanguage', 'us')
use('us')
} else {
use(checkLanguage)
}
}
getSelectedWalletAddress() { getSelectedWalletAddress() {
return this._selectedWallet === 'qort' return this._selectedWallet === 'qort'
? this.wallets.get(this._selectedWallet).wallet.address ? this.wallets.get(this._selectedWallet).wallet.address
@ -1915,20 +1974,20 @@ class MultiWallet extends LitElement {
} }
return html` return html`
<div style="padding-left:12px;" ?hidden="${!this.isEmptyArray(transactions)}"><span style="color: var(--black);">Address has no transactions yet.</span></div> <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 theme="large" id="${coin}TransactionsGrid" ?hidden="${this.isEmptyArray(this.wallets.get(this._selectedWallet).transactions)}" page-size="25" all-rows-visible>
<vaadin-grid-column <vaadin-grid-column
auto-width auto-width
header="Status" header="${translate("walletpage.wchange41")}"
.renderer=${(root, column, data) => { .renderer=${(root, column, data) => {
if (!currentBlockHeight) { if (!currentBlockHeight) {
return render(html``, root) return render(html``, root)
} }
const confirmed = data.item.confirmations >= requiredConfirmations const confirmed = data.item.confirmations >= requiredConfirmations
if (confirmed) { if (confirmed) {
render(html`<mwc-icon title="${data.item.confirmations} Confirmations" style="color: #00C851">check</mwc-icon>`, root) render(html`<mwc-icon title="${data.item.confirmations} ${translate("walletpage.wchange42")}" style="color: #00C851">check</mwc-icon>`, root)
} else { } else {
render(html`<mwc-icon title="${data.item.confirmations || 0}/${requiredConfirmations} Confirmations" style="color: #777">schedule</mwc-icon>`, root) render(html`<mwc-icon title="${data.item.confirmations || 0}/${requiredConfirmations} ${translate("walletpage.wchange42")}" style="color: #777">schedule</mwc-icon>`, root)
} }
}} }}
> >
@ -1936,20 +1995,20 @@ class MultiWallet extends LitElement {
<vaadin-grid-column <vaadin-grid-column
auto-width auto-width
resizable resizable
header="Type" header="${translate("walletpage.wchange35")}"
.renderer=${(root, column, data) => { .renderer=${(root, column, data) => {
render(html` ${data.item.type} ${data.item.creatorAddress === this.wallets.get('qort').wallet.address ? html`<span class="color-out">OUT</span>` : html`<span class="color-in">IN</span>`} `, root) render(html` ${data.item.type} ${data.item.creatorAddress === this.wallets.get('qort').wallet.address ? 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>
<vaadin-grid-column auto-width resizable header="Sender" path="creatorAddress"></vaadin-grid-column> <vaadin-grid-column auto-width resizable header="${translate("walletpage.wchange9")}" path="creatorAddress"></vaadin-grid-column>
<vaadin-grid-column auto-width resizable header="Receiver" path="recipient"></vaadin-grid-column> <vaadin-grid-column auto-width resizable header="${translate("walletpage.wchange10")}" path="recipient"></vaadin-grid-column>
<vaadin-grid-column auto-width resizable path="fee"></vaadin-grid-column> <vaadin-grid-column auto-width resizable header="${translate("walletpage.wchange36")}" path="fee"></vaadin-grid-column>
<vaadin-grid-column auto-width resizable path="amount"></vaadin-grid-column> <vaadin-grid-column auto-width resizable header="${translate("walletpage.wchange11")}" path="amount"></vaadin-grid-column>
<vaadin-grid-column <vaadin-grid-column
auto-width auto-width
resizable resizable
header="Time" header="${translate("walletpage.wchange14")}"
.renderer=${(root, column, data) => { .renderer=${(root, column, data) => {
const time = new Date(data.item.timestamp) const time = new Date(data.item.timestamp)
render(html` <time-ago datetime=${time.toISOString()}> </time-ago> `, root) render(html` <time-ago datetime=${time.toISOString()}> </time-ago> `, root)
@ -1963,11 +2022,11 @@ class MultiWallet extends LitElement {
renderBtcTransactions(transactions, coin) { renderBtcTransactions(transactions, coin) {
return html` return html`
<div style="padding-left:12px;" ?hidden="${!this.isEmptyArray(transactions)}"><span style="color: var(--black);">Address has no transactions yet.</span></div> <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 theme="large" id="${coin}TransactionsGrid" ?hidden="${this.isEmptyArray(this.wallets.get(this._selectedWallet).transactions)}" page-size="25" all-rows-visible>
<vaadin-grid-column <vaadin-grid-column
auto-width auto-width
header="Status" header="${translate("walletpage.wchange41")}"
.renderer=${(root, column, data) => { .renderer=${(root, column, data) => {
render(html`<mwc-icon style="color: #00C851">check</mwc-icon>`, root) render(html`<mwc-icon style="color: #00C851">check</mwc-icon>`, root)
}} }}
@ -1976,16 +2035,16 @@ class MultiWallet extends LitElement {
<vaadin-grid-column <vaadin-grid-column
auto-width auto-width
resizable resizable
header="Type" header="${translate("walletpage.wchange35")}"
.renderer=${(root, column, data) => { .renderer=${(root, column, data) => {
render(html` PAYMENT ${data.item.inputs[0].address === this.wallets.get(this._selectedWallet).wallet.address ? html`<span class="color-out">OUT</span>` : html`<span class="color-in">IN</span>`} `, root) render(html` ${translate("walletpage.wchange40")} ${data.item.inputs[0].address === this.wallets.get(this._selectedWallet).wallet.address ? 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>
<vaadin-grid-column <vaadin-grid-column
auto-width auto-width
resizable resizable
header="Sender" header="${translate("walletpage.wchange9")}"
.renderer=${(root, column, data) => { .renderer=${(root, column, data) => {
render(html`${data.item.inputs[0].address}`, root) render(html`${data.item.inputs[0].address}`, root)
}} }}
@ -1994,17 +2053,17 @@ class MultiWallet extends LitElement {
<vaadin-grid-column <vaadin-grid-column
auto-width auto-width
resizable resizable
header="Receiver" header="${translate("walletpage.wchange10")}"
.renderer=${(root, column, data) => { .renderer=${(root, column, data) => {
render(html`${data.item.outputs[0].address}`, root) render(html`${data.item.outputs[0].address}`, root)
}} }}
> >
</vaadin-grid-column> </vaadin-grid-column>
<vaadin-grid-column auto-width resizable header="Transaction Hash" path="txHash"></vaadin-grid-column> <vaadin-grid-column auto-width resizable header="${translate("walletpage.wchange16")}" path="txHash"></vaadin-grid-column>
<vaadin-grid-column <vaadin-grid-column
auto-width auto-width
resizable resizable
header="Total Amount" header="${translate("walletpage.wchange37")}"
.renderer=${(root, column, data) => { .renderer=${(root, column, data) => {
const amount = (Number(data.item.totalAmount) / 1e8).toFixed(8) const amount = (Number(data.item.totalAmount) / 1e8).toFixed(8)
render(html`${amount}`, root) render(html`${amount}`, root)
@ -2014,7 +2073,7 @@ class MultiWallet extends LitElement {
<vaadin-grid-column <vaadin-grid-column
auto-width auto-width
resizable resizable
header="Time" header="${translate("walletpage.wchange14")}"
.renderer=${(root, column, data) => { .renderer=${(root, column, data) => {
const time = new Date(data.item.timestamp * 1000) const time = new Date(data.item.timestamp * 1000)
render(html` <time-ago datetime=${time.toISOString()}> </time-ago> `, root) render(html` <time-ago datetime=${time.toISOString()}> </time-ago> `, root)
@ -2028,11 +2087,11 @@ class MultiWallet extends LitElement {
renderLtcTransactions(transactions, coin) { renderLtcTransactions(transactions, coin) {
return html` return html`
<div style="padding-left:12px;" ?hidden="${!this.isEmptyArray(transactions)}"><span style="color: var(--black);">Address has no transactions yet.</span></div> <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 theme="large" id="${coin}TransactionsGrid" ?hidden="${this.isEmptyArray(this.wallets.get(this._selectedWallet).transactions)}" page-size="25" all-rows-visible>
<vaadin-grid-column <vaadin-grid-column
auto-width auto-width
header="Status" header="${translate("walletpage.wchange41")}"
.renderer=${(root, column, data) => { .renderer=${(root, column, data) => {
render(html`<mwc-icon style="color: #00C851">check</mwc-icon>`, root) render(html`<mwc-icon style="color: #00C851">check</mwc-icon>`, root)
}} }}
@ -2041,16 +2100,16 @@ class MultiWallet extends LitElement {
<vaadin-grid-column <vaadin-grid-column
auto-width auto-width
resizable resizable
header="Type" header="${translate("walletpage.wchange35")}"
.renderer=${(root, column, data) => { .renderer=${(root, column, data) => {
render(html` PAYMENT ${data.item.inputs[0].address === this.wallets.get(this._selectedWallet).wallet.address ? html`<span class="color-out">OUT</span>` : html`<span class="color-in">IN</span>`} `, root) render(html` ${translate("walletpage.wchange40")} ${data.item.inputs[0].address === this.wallets.get(this._selectedWallet).wallet.address ? 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>
<vaadin-grid-column <vaadin-grid-column
auto-width auto-width
resizable resizable
header="Sender" header="${translate("walletpage.wchange9")}"
.renderer=${(root, column, data) => { .renderer=${(root, column, data) => {
render(html`${data.item.inputs[0].address}`, root) render(html`${data.item.inputs[0].address}`, root)
}} }}
@ -2059,17 +2118,17 @@ class MultiWallet extends LitElement {
<vaadin-grid-column <vaadin-grid-column
auto-width auto-width
resizable resizable
header="Receiver" header="${translate("walletpage.wchange10")}"
.renderer=${(root, column, data) => { .renderer=${(root, column, data) => {
render(html`${data.item.outputs[0].address}`, root) render(html`${data.item.outputs[0].address}`, root)
}} }}
> >
</vaadin-grid-column> </vaadin-grid-column>
<vaadin-grid-column auto-width resizable header="Transaction Hash" path="txHash"></vaadin-grid-column> <vaadin-grid-column auto-width resizable header="${translate("walletpage.wchange16")}" path="txHash"></vaadin-grid-column>
<vaadin-grid-column <vaadin-grid-column
auto-width auto-width
resizable resizable
header="Total Amount" header="${translate("walletpage.wchange37")}"
.renderer=${(root, column, data) => { .renderer=${(root, column, data) => {
const amount = (Number(data.item.totalAmount) / 1e8).toFixed(8) const amount = (Number(data.item.totalAmount) / 1e8).toFixed(8)
render(html`${amount}`, root) render(html`${amount}`, root)
@ -2079,7 +2138,7 @@ class MultiWallet extends LitElement {
<vaadin-grid-column <vaadin-grid-column
auto-width auto-width
resizable resizable
header="Time" header="${translate("walletpage.wchange14")}"
.renderer=${(root, column, data) => { .renderer=${(root, column, data) => {
const time = new Date(data.item.timestamp * 1000) const time = new Date(data.item.timestamp * 1000)
render(html` <time-ago datetime=${time.toISOString()}> </time-ago> `, root) render(html` <time-ago datetime=${time.toISOString()}> </time-ago> `, root)
@ -2093,11 +2152,11 @@ class MultiWallet extends LitElement {
renderDogeTransactions(transactions, coin) { renderDogeTransactions(transactions, coin) {
return html` return html`
<div style="padding-left:12px;" ?hidden="${!this.isEmptyArray(transactions)}"><span style="color: var(--black);">Address has no transactions yet.</span></div> <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 theme="large" id="${coin}TransactionsGrid" ?hidden="${this.isEmptyArray(this.wallets.get(this._selectedWallet).transactions)}" page-size="25" all-rows-visible>
<vaadin-grid-column <vaadin-grid-column
auto-width auto-width
header="Status" header="${translate("walletpage.wchange41")}"
.renderer=${(root, column, data) => { .renderer=${(root, column, data) => {
render(html`<mwc-icon style="color: #00C851">check</mwc-icon>`, root) render(html`<mwc-icon style="color: #00C851">check</mwc-icon>`, root)
}} }}
@ -2106,16 +2165,16 @@ class MultiWallet extends LitElement {
<vaadin-grid-column <vaadin-grid-column
auto-width auto-width
resizable resizable
header="Type" header="${translate("walletpage.wchange35")}"
.renderer=${(root, column, data) => { .renderer=${(root, column, data) => {
render(html` PAYMENT ${data.item.inputs[0].address === this.wallets.get(this._selectedWallet).wallet.address ? html`<span class="color-out">OUT</span>` : html`<span class="color-in">IN</span>`} `, root) render(html` ${translate("walletpage.wchange40")} ${data.item.inputs[0].address === this.wallets.get(this._selectedWallet).wallet.address ? 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>
<vaadin-grid-column <vaadin-grid-column
auto-width auto-width
resizable resizable
header="Sender" header="${translate("walletpage.wchange9")}"
.renderer=${(root, column, data) => { .renderer=${(root, column, data) => {
render(html`${data.item.inputs[0].address}`, root) render(html`${data.item.inputs[0].address}`, root)
}} }}
@ -2124,17 +2183,17 @@ class MultiWallet extends LitElement {
<vaadin-grid-column <vaadin-grid-column
auto-width auto-width
resizable resizable
header="Receiver" header="${translate("walletpage.wchange10")}"
.renderer=${(root, column, data) => { .renderer=${(root, column, data) => {
render(html`${data.item.outputs[0].address}`, root) render(html`${data.item.outputs[0].address}`, root)
}} }}
> >
</vaadin-grid-column> </vaadin-grid-column>
<vaadin-grid-column auto-width resizable header="Transaction Hash" path="txHash"></vaadin-grid-column> <vaadin-grid-column auto-width resizable header="${translate("walletpage.wchange16")}" path="txHash"></vaadin-grid-column>
<vaadin-grid-column <vaadin-grid-column
auto-width auto-width
resizable resizable
header="Total Amount" header="${translate("walletpage.wchange37")}"
.renderer=${(root, column, data) => { .renderer=${(root, column, data) => {
const amount = (Number(data.item.totalAmount) / 1e8).toFixed(8) const amount = (Number(data.item.totalAmount) / 1e8).toFixed(8)
render(html`${amount}`, root) render(html`${amount}`, root)
@ -2144,7 +2203,7 @@ class MultiWallet extends LitElement {
<vaadin-grid-column <vaadin-grid-column
auto-width auto-width
resizable resizable
header="Time" header="${translate("walletpage.wchange14")}"
.renderer=${(root, column, data) => { .renderer=${(root, column, data) => {
const time = new Date(data.item.timestamp * 1000) const time = new Date(data.item.timestamp * 1000)
render(html` <time-ago datetime=${time.toISOString()}> </time-ago> `, root) render(html` <time-ago datetime=${time.toISOString()}> </time-ago> `, root)