diff --git a/core/language/de.json b/core/language/de.json index 6e256df8..62db88aa 100644 --- a/core/language/de.json +++ b/core/language/de.json @@ -898,7 +898,9 @@ "nchange29": "Prägekonto erfolgreich entfernt!", "nchange30": "Fehler beim Entfernen des Prägekontos!", "nchange31": "Knoten stoppen", - "nchange32": "Stoppanforderung erfolgreich gesendet!" + "nchange32": "Stoppanforderung erfolgreich gesendet!", + "nchange33": "Knoten neu starten", + "nchange34": "Neustartanforderung erfolgreich gesendet!" }, "transpage": { "tchange1": "Transaktionsanfrage", diff --git a/core/language/es.json b/core/language/es.json index 8004ae76..d87e1c82 100644 --- a/core/language/es.json +++ b/core/language/es.json @@ -898,7 +898,9 @@ "nchange29": "Eliminación exitosa de la cuenta de acuñación!", "nchange30": "Fallo en la eliminación de la cuenta de acuñación!", "nchange31": "Detener Nodo", - "nchange32": "Solicitud de detención enviada con éxito!" + "nchange32": "Solicitud de detención enviada con éxito!", + "nchange33": "Reiniciar Nodo", + "nchange34": "Solicitud de reinicio enviada con éxito!" }, "transpage": { "tchange1": "Solicitud de transacción", diff --git a/core/language/fr.json b/core/language/fr.json index 3969e9f2..e2fd1c46 100644 --- a/core/language/fr.json +++ b/core/language/fr.json @@ -898,7 +898,9 @@ "nchange29": "Suppression réussie du compte de frappe!", "nchange30": "Echec de la suppression du compte de frappe!", "nchange31": "Arreter le noeud", - "nchange32": "Demande d’arrêt envoyée avec succès!" + "nchange32": "Demande d’arrêt envoyée avec succès!", + "nchange33": "Redémarrer le noeud", + "nchange34": "Demande de redémarrage envoyée avec succès!" }, "transpage": { "tchange1": "Demande de transaction", diff --git a/core/language/hindi.json b/core/language/hindi.json index 7fcb7f0c..d7441070 100644 --- a/core/language/hindi.json +++ b/core/language/hindi.json @@ -899,7 +899,9 @@ "nchange29": "मिंटिंग अकाउंट को सफलतापूर्वक हटाया गया!", "nchange30": "खनन खाता हटाने में विफल!", "nchange31": "स्टॉप नोड", - "nchange32": "स्टॉप अनुरोध सफलतापूर्वक भेजा गया!" + "nchange32": "स्टॉप अनुरोध सफलतापूर्वक भेजा गया!", + "nchange33": "नोड फिर से चालू करें", + "nchange34": "रीस्टार्ट अनुरोध सफलतापूर्वक भेजा गया!" }, "transpage": { "tchange1": "लेनदेन अनुरोध", diff --git a/core/language/hr.json b/core/language/hr.json index b555bbeb..f5a554aa 100644 --- a/core/language/hr.json +++ b/core/language/hr.json @@ -898,7 +898,9 @@ "nchange29": "Uspješno uklonjen minter račun!", "nchange30": "Neuspješno uklanjanje minter računa!", "nchange31": "Zaustavi čvor", - "nchange32": "Uspješno poslan zahtjev za zaustavljenje!" + "nchange32": "Uspješno poslan zahtjev za zaustavljenje!", + "nchange33": "Ponovo pokreni čvor", + "nchange34": "Uspješno poslan zahtjev za ponovnim pokretanjem!" }, "transpage": { "tchange1": "Zahtjev za transakciju", diff --git a/core/language/hu.json b/core/language/hu.json index 59b03c50..c1093093 100644 --- a/core/language/hu.json +++ b/core/language/hu.json @@ -898,7 +898,9 @@ "nchange29": "Sikerült eltávolítani a verési fiókot!", "nchange30": "Nem sikerült eltávolítani a verési fiókot!", "nchange31": "Csomópont Leállítás", - "nchange32": "Sikeresen Elküldött Stop Kérés!" + "nchange32": "Sikeresen Elküldött Stop Kérés!", + "nchange33": "Csomópont Újraindítása", + "nchange34": "Sikeresen Elküldött Újraindítási Kérés!" }, "transpage": { "tchange1": "Tranzakciós Kérelem", diff --git a/core/language/it.json b/core/language/it.json index 625065d4..69c4592a 100644 --- a/core/language/it.json +++ b/core/language/it.json @@ -898,7 +898,9 @@ "nchange29": "Conto di minting rimosso con successo!", "nchange30": "Impossibile rimuovere l'account di minting!", "nchange31": "Arresta nodo", - "nchange32": "Richiesta di arresto inviata con successo!" + "nchange32": "Richiesta di arresto inviata con successo!", + "nchange33": "Riavvia nodo", + "nchange34": "Richiesta di riavvio inviata con successo!" }, "transpage": { "tchange1": "Richiesta di transazione", diff --git a/core/language/jp.json b/core/language/jp.json index a082039c..ef8c365a 100644 --- a/core/language/jp.json +++ b/core/language/jp.json @@ -984,7 +984,9 @@ "exp18": "入出金", "exp19": "送付済", "exp20": "受取済", - "exp21": "取引" + "exp21": "取引", + "exp22": "最後の 5 回の支払い", + "exp23": "すべての支払いを表示" }, "managegroup": { "mg1": "グループメンバー", @@ -1066,7 +1068,7 @@ "inf14": "を右記の通貨で", "inf15": "アクティブな自動購入注文", "inf16": "自動購入", - "inf17": "ライトテーマに切り替える", - "inf18": "ダークテーマに切り替える" + "inf17": "ライトモードに切り替える", + "inf18": "ダークモードに切り替える" } } diff --git a/core/language/ko.json b/core/language/ko.json index 3cb34c4c..a5ba6855 100644 --- a/core/language/ko.json +++ b/core/language/ko.json @@ -898,7 +898,9 @@ "nchange29": "민팅 계정이 제거되었습니다!", "nchange30": "민팅 계정을 제거하지 못했습니다!", "nchange31": "노드 중지", - "nchange32": "중지 요청을 성공적으로 전송했습니다.!" + "nchange32": "중지 요청을 성공적으로 전송했습니다.!", + "nchange33": "노드 재시작", + "nchange34": "다시 시작 요청을 성공적으로 보냈습니다!" }, "transpage": { "tchange1": "거래요청", diff --git a/core/language/no.json b/core/language/no.json index bb5a1db8..d0ad6634 100644 --- a/core/language/no.json +++ b/core/language/no.json @@ -898,7 +898,9 @@ "nchange29": "Mintekontoen ble fjernet!", "nchange30": "Kunne ikke fjerne mintekontoen!", "nchange31": "Stopp noden", - "nchange32": "Stoppforespørsel sendt!" + "nchange32": "Stoppforespørsel sendt!", + "nchange33": "Omstart noden", + "nchange34": "Omstartsforespørsel sendt!" }, "transpage": { "tchange1": "Transaksjonsforespørsel", diff --git a/core/language/pl.json b/core/language/pl.json index 4fb13215..7367c370 100644 --- a/core/language/pl.json +++ b/core/language/pl.json @@ -898,7 +898,9 @@ "nchange29": "Pomyślnie usunięto konto mintowania!", "nchange30": "Nie udało się usunąć konta mintowania!", "nchange31": "Zatrzymaj węzeł", - "nchange32": "Pomyślnie wysłane żądanie zatrzymania!" + "nchange32": "Pomyślnie wysłane żądanie zatrzymania!", + "nchange33": "Uruchom ponownie węzeł", + "nchange34": "Pomyślnie wysłane żądanie ponownego uruchomienia!" }, "transpage": { "tchange1": "Żądanie transakcji", diff --git a/core/language/pt.json b/core/language/pt.json index 1dfdac72..b4907fa6 100644 --- a/core/language/pt.json +++ b/core/language/pt.json @@ -898,7 +898,9 @@ "nchange29": "Conta de Mineração removida com sucesso!", "nchange30": "Falha em remover a conta de mineração", "nchange31": "Parar Nódulo", - "nchange32": "Pedido de parada enviado com sucesso!" + "nchange32": "Pedido de parada enviado com sucesso!", + "nchange33": "Reiniciar Nódulo", + "nchange34": "Pedido de reinicialização enviado com sucesso!" }, "transpage": { "tchange1": "Pedido de transação", diff --git a/core/language/ro.json b/core/language/ro.json index 8068ad2b..39480b7c 100644 --- a/core/language/ro.json +++ b/core/language/ro.json @@ -898,7 +898,9 @@ "nchange29": "S-a eliminat cu succes contul de producator de moneda (minting)!", "nchange30": "Nu a reusit eliminare contulului de recompensare (minting)!", "nchange31": "Opreste Nodul", - "nchange32": "Cerere de Oprire Trimisa cu Succes!" + "nchange32": "Cerere de Oprire Trimisa cu Succes!", + "nchange33": "Reporniți Nodul", + "nchange34": "Cerere de Repornire a Fost Trimisă cu Succes!" }, "transpage": { "tchange1": "Cerere de tranzactionare", diff --git a/core/language/rs.json b/core/language/rs.json index 7c5c0aaa..a799b1f3 100644 --- a/core/language/rs.json +++ b/core/language/rs.json @@ -898,7 +898,9 @@ "nchange29": "Minting nalog uspešno uklonjen!", "nchange30": "Minting nalog neuspešno uklonjen!", "nchange31": "Zaustavite čvor", - "nchange32": "Zahtev za zaustavljanje uspešno poslat!" + "nchange32": "Zahtev za zaustavljanje uspešno poslat!", + "nchange33": "Ponovo pokreni čvor", + "nchange34": "Zahtev za ponovno pokretanje uspešno poslat!" }, "transpage": { "tchange1": "Zahtev za transakcijom", diff --git a/core/language/ru.json b/core/language/ru.json index 454f1653..b57f31c3 100644 --- a/core/language/ru.json +++ b/core/language/ru.json @@ -898,7 +898,9 @@ "nchange29": "Учетная запись Minting успешно удалена!", "nchange30": "Не удалось удалить учетную запись Minting!", "nchange31": "Остановить узел", - "nchange32": "Запрос на остановку успешно отправлен!" + "nchange32": "Запрос на остановку успешно отправлен!", + "nchange33": "Перезапустить узел", + "nchange34": "Запрос на перезапуск успешно отправлен!" }, "transpage": { "tchange1": "Запрос транзакции", diff --git a/core/language/us.json b/core/language/us.json index 00ea1133..5ff4791a 100644 --- a/core/language/us.json +++ b/core/language/us.json @@ -899,7 +899,9 @@ "nchange29": "Successfully Removed Minting Account!", "nchange30": "Failed to Remove Minting Account!", "nchange31": "Stop Node", - "nchange32": "Successfully Sent Stop Request!" + "nchange32": "Successfully Sent Stop Request!", + "nchange33": "Restart Node", + "nchange34": "Successfully Sent Restart Request!" }, "transpage": { "tchange1": "Transaction request", diff --git a/core/language/zhc.json b/core/language/zhc.json index 5348b834..2dd9a10b 100644 --- a/core/language/zhc.json +++ b/core/language/zhc.json @@ -898,7 +898,9 @@ "nchange29": "成功从此节点中移除铸币账号!", "nchange30": "未能从此节点中移除铸币账号!", "nchange31": "关闭节点", - "nchange32": "成功发送关闭节点请求!" + "nchange32": "成功发送关闭节点请求!", + "nchange33": "重启节点", + "nchange34": "成功发送重启节点请求!" }, "transpage": { "tchange1": "请求交易", diff --git a/core/language/zht.json b/core/language/zht.json index 597b7a97..92b0e2c0 100644 --- a/core/language/zht.json +++ b/core/language/zht.json @@ -898,7 +898,9 @@ "nchange29": "成功從此節點中移除鑄幣賬號!", "nchange30": "未能從此節點中移除鑄幣賬號!", "nchange31": "關閉節點", - "nchange32": "成功發送關閉節點請求!" + "nchange32": "成功發送關閉節點請求!", + "nchange33": "重啟節點", + "nchange34": "成功發送重啟節點請求!" }, "transpage": { "tchange1": "請求交易", diff --git a/plugins/plugins/core/components/TraderInfoView.js b/plugins/plugins/core/components/TraderInfoView.js new file mode 100644 index 00000000..bde38f3d --- /dev/null +++ b/plugins/plugins/core/components/TraderInfoView.js @@ -0,0 +1,1968 @@ +import { LitElement, html, css } from 'lit' +import { render } from 'lit/html.js' +import { Epml } from '../../../epml.js' +import { get, translate, translateUnsafeHTML } from 'lit-translate' + +import '@polymer/paper-dialog/paper-dialog.js' +import '@material/mwc-button' +import '@material/mwc-icon' +import '@vaadin/grid' +import '@vaadin/grid/vaadin-grid-sorter' + +const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) + +class TraderInfoView extends LitElement { + static get properties() { + return { + theme: { type: String, reflect: true }, + isLoadingBoughtTradesBTC: { type: Boolean }, + isLoadingBoughtTradesLTC: { type: Boolean }, + isLoadingBoughtTradesDOGE: { type: Boolean }, + isLoadingBoughtTradesDGB: { type: Boolean }, + isLoadingBoughtTradesRVN: { type: Boolean }, + isLoadingBoughtTradesARRR: { type: Boolean }, + isLoadingSoldTradesBTC: { type: Boolean }, + isLoadingSoldTradesLTC: { type: Boolean }, + isLoadingSoldTradesDOGE: { type: Boolean }, + isLoadingSoldTradesDGB: { type: Boolean }, + isLoadingSoldTradesRVN: { type: Boolean }, + isLoadingSoldTradesARRR: { type: Boolean }, + isLoadingCompleteInfo: { type: Boolean }, + infoAccountName: { type: String }, + imageUrl: { type: String }, + addressResult: { type: Array }, + nameAddressResult: { type: Array }, + displayAddress: { type: String }, + displayLevel: { type: String }, + displayBalance: { type: Number }, + explorerBoughtBTCTrades: { type: Array }, + explorerBoughtLTCTrades: { type: Array }, + explorerBoughtDOGETrades: { type: Array }, + explorerBoughtDGBTrades: { type: Array }, + explorerBoughtRVNTrades: { type: Array }, + explorerBoughtARRRTrades: { type: Array }, + explorerSoldBTCTrades: { type: Array }, + explorerSoldLTCTrades: { type: Array }, + explorerSoldDOGETrades: { type: Array }, + explorerSoldDGBTrades: { type: Array }, + explorerSoldRVNTrades: { type: Array }, + explorerSoldARRRTrades: { type: Array }, + allPayments: { type: Array }, + slicedArray: { type: Array }, + allReceivedPayments: { type: Array }, + allSendPayments: { type: Array }, + actualBlockheight: { type: Number }, + reduceBlockheight: { type: Number }, + startMintBlockheight: { type: Number }, + startMintTime: { type: String }, + startMintBlock: { type: Array }, + totalSent: { type: Number }, + totalReceived: { type: Number }, + txtimestamp: { type: String }, + txcreatorAddress: { type: String }, + txrecipient: { type: String }, + txamount: { type: String }, + txfee: { type: String }, + txblockHeight: { type: String } + } + } + + static get styles() { + return css` + * { + --mdc-theme-primary: rgb(3, 169, 244); + --mdc-theme-secondary: var(--mdc-theme-primary); + --mdc-theme-surface: var(--white); + --mdc-dialog-content-ink-color: var(--black); + box-sizing: border-box; + } + + h2 { + margin: 10px 0; + } + + h3 { + margin-top: -80px; + color: #03a9f4; + font-size: 18px; + } + + h4 { + margin: 5px 0; + } + + p { + margin-top: 5px; + font-size: 14px; + line-height: 16px; + } + + ul { + list-style: none; + display: flex; + } + + ul li { + margin: 15px auto; + font-size: 15px; + font-weight: 600; + color: #03a9f4; + } + + .btn-info { + color: #03a9f4; + --mdc-icon-size: 16px; + padding-top: 3px; + } + + .data-info{ + margin-top: 10px; + margin-right: 25px; + } + + .data-items { + font-weight: 600; + color: var(--black); + display: block; + text-align: center; + } + + .title { + font-weight: 600; + font-size: 12px; + line-height: 32px; + opacity: 0.66; + } + + #transactionList { + color: var(--black); + padding: 15px; + } + + .color-in { + color: #02977e; + background-color: rgba(0, 201, 167, 0.2); + font-weight: 700; + font-size: 0.60938rem; + border-radius: 0.25rem !important; + padding: 0.2rem 0.5rem; + margin-left: 4px; + } + + .color-out { + color: #b47d00; + background-color: rgba(219, 154, 4, 0.2); + font-weight: 700; + font-size: 0.60938rem; + border-radius: 0.25rem !important; + padding: 0.2rem 0.5rem; + margin-left: 4px; + } + + .card-body { + background-color: var(--white); + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + min-height: 100vh; + margin: 0; + } + + .card-container { + background-color: var(--white); + border-radius: 5px; + color: var(--black); + padding-top: 30px; + position: relative; + width: 350px; + max-width: 100%; + text-align: center; + } + + .card-container-button { + background-color: var(--white); + border-radius: 5px; + color: var(--black); + padding-top: 30px; + position: relative; + width: 500px; + max-width: 100%; + text-align: center; + } + + .card-explorer-container { + background-color: var(--white); + border-radius: 5px; + color: var(--black); + padding-top: 10px; + position: relative; + width: 900px; + max-width: 100%; + text-align: center; + } + + .card-container .level { + color: #ffffff; + background-color: #03a9f4; + border-radius: 3px; + font-size: 14px; + font-weight: bold; + padding: 3px 7px; + position: absolute; + top: 30px; + left: 30px; + } + + .card-container .founder { + color: #ffffff; + background-color: #03a9f4; + border-radius: 3px; + font-size: 14px; + font-weight: bold; + padding: 3px 7px; + position: absolute; + top: 30px; + right: 30px; + } + + .card-container .round { + width: 96px; + height: 96px; + border: 1px solid #03a9f4; + border-radius: 50%; + padding: 2px; + } + + .card-container .badge { + width: 200px; + height: 135px; + border: 1px solid transparent; + border-radius: 10%; + padding: 2px; + } + + .userdata { + background-color: #1F1A36; + text-align: left; + padding: 15px; + margin-top: 30px; + } + + .userdata ul { + list-style-type: none; + margin: 0; + padding: 0; + } + + .userdata ul li { + border: 1px solid #2D2747; + border-radius: 2px; + display: inline-block; + font-size: 12px; + margin: 0 7px 7px 0; + padding: 7px; + } + + .decline { + --mdc-theme-primary: var(--mdc-theme-error) + } + + .warning { + --mdc-theme-primary: #f0ad4e; + } + + .green { + --mdc-theme-primary: #198754; + } + + .buttons { + display: inline; + float: right; + margin-bottom: 5px; + } + + .paybutton { + display: inline; + float: left; + margin-bottom: 5px; + } + + .loadingContainer { + height: 100%; + width: 100%; + } + + .loading, + .loading:after { + border-radius: 50%; + width: 5em; + height: 5em; + } + + .loading { + margin: 10px auto; + border-width: .6em; + border-style: solid; + border-color: rgba(3, 169, 244, 0.2) rgba(3, 169, 244, 0.2) rgba(3, 169, 244, 0.2) rgb(3, 169, 244); + font-size: 10px; + position: relative; + text-indent: -9999em; + transform: translateZ(0px); + animation: 1.1s linear 0s infinite normal none running loadingAnimation; + } + + .explorer-trades { + text-align: center; + } + + .box { + margin: 0; + padding: 0; + display: flex; + flex-flow: column; + height: 100%; + } + + .box-info { + margin: 0; + padding: 0; + display: flex; + flex-flow: column; + height: 250px; + } + + .box-info-full { + margin: 0; + padding: 0; + display: flex; + flex-flow: column; + height: 450px; + width: 450px; + } + + header { + display: flex; + flex: 0 1 auto; + align-items: center; + justify-content: center; + padding: 0px 10px; + font-size: 16px; + color: var(--black); + background-color: var(--tradehead); + border-left: 1px solid var(--tradeborder); + border-top: 1px solid var(--tradeborder); + border-right: 1px solid var(--tradeborder); + min-height: 40px; + } + + .border-wrapper { + border: 1px var(--tradeborder) solid; + overflow: hidden; + } + + + #first-explorer-section { + display: grid; + grid-template-columns: 1fr 1fr; + grid-auto-rows: max(250px); + column-gap: 0.5em; + row-gap: 0.4em; + justify-items: stretch; + align-items: stretch; + margin-bottom: 10px; + } + + #second-explorer-section { + display: grid; + grid-template-columns: 1fr 1fr; + grid-auto-rows: max(250px); + column-gap: 0.5em; + row-gap: 0.4em; + justify-items: stretch; + align-items: stretch; + margin-bottom: 10px; + } + + #third-explorer-section { + display: grid; + grid-template-columns: 1fr 1fr; + grid-auto-rows: max(250px); + column-gap: 0.5em; + row-gap: 0.4em; + justify-items: stretch; + align-items: stretch; + margin-bottom: 10px; + } + + #first-explorer-section > div { + } + + #second-explorer-section > div { + } + + #third-explorer-section > div { + } + + @-webkit-keyframes loadingAnimation { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } + } + + @keyframes loadingAnimation { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } + } + + .full-info { + display: flex; + justify-content: center; + align-items: center; + min-height: 100vh; + background: #1da1f2; + } + + .full-info-wrapper { + width: 100%; + min-width: 600px; + max-width: 600px; + text-align: center; + background: var(--white); + border: 1px solid var(--black); + border-radius: 15px; + padding: 25px; + box-shadow: 0px 10px 15px rgba(0, 0, 0, 0.1); + } + + .full-info-logo { + width: 120px; + height: 120px; + background: var(--white); + border: 1px solid var(--black); + border-radius: 50%; + position: relative; + top: -110px; + left: 210px; + } + + .round-fullinfo { + position: relative; + width: 120px; + height: 120px; + border-radius: 50%; + right: 25px; + top: -1px; + } + + ` + } + + constructor() { + super() + this.infoAccountName = '' + this.imageUrl = '' + this.addressResult = [] + this.nameAddressResult = [] + this.displayAddress = '' + this.displayLevel = '' + this.displayBalance = 0 + this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light' + this.isLoadingBoughtTradesBTC = false + this.isLoadingBoughtTradesLTC = false + this.isLoadingBoughtTradesDOGE = false + this.isLoadingBoughtTradesDGB = false + this.isLoadingBoughtTradesRVN = false + this.isLoadingBoughtTradesARRR = false + this.isLoadingSoldTradesBTC = false + this.isLoadingSoldTradesLTC = false + this.isLoadingSoldTradesDOGE = false + this.isLoadingSoldTradesDGB = false + this.isLoadingSoldTradesRVN = false + this.isLoadingSoldTradesARRR = false + this.isLoadingCompleteInfo = false + this.explorerBoughtBTCTrades = [] + this.explorerBoughtLTCTrades = [] + this.explorerBoughtDOGETrades = [] + this.explorerBoughtDGBTrades = [] + this.explorerBoughtRVNTrades = [] + this.explorerBoughtARRRTrades = [] + this.explorerSoldBTCTrades = [] + this.explorerSoldLTCTrades = [] + this.explorerSoldDOGETrades = [] + this.explorerSoldDGBTrades = [] + this.explorerSoldRVNTrades = [] + this.explorerSoldARRRTrades = [] + this.allPayments = [] + this.slicedArray = [] + this.allReceivedPayments = [] + this.allSendPayments = [] + this.actualBlockheight = 0 + this.reduceBlockheight = 0 + this.startMintBlockheight = 0 + this.startMintTime = '' + this.startMintBlock = [] + this.totalSent = 0 + this.totalReceived = 0 + this.txtimestamp = '' + this.txcreatorAddress = '' + this.txrecipient = '' + this.txamount = '' + this.txfee = '' + this.txblockHeight = '' + } + + boughtBTCTemplate() { + return html` +
+
+
${translate("explorerpage.exp10")} (BTC)
+
+
${translate("login.loading")}
+ + { + const dateString = new Date(data.item.timestamp).toLocaleDateString() + render(html`${dateString}`, root) + }} + > + + { + const price = this.round(parseFloat(data.item.foreignAmount) / parseFloat(data.item.qortAmount)) + render(html`${price}`, root) + }} + > + + + + +
+ ${this.isEmptyArray(this.explorerBoughtBTCTrades) ? html` + ${translate("explorerpage.exp12")} + `: ''} +
+
+
+
+ ` + } + + boughtLTCTemplate() { + return html` +
+
+
${translate("explorerpage.exp10")} (LTC)
+
+
${translate("login.loading")}
+ + { + const dateString = new Date(data.item.timestamp).toLocaleDateString() + render(html`${dateString}`, root) + }} + > + + { + const price = this.round(parseFloat(data.item.foreignAmount) / parseFloat(data.item.qortAmount)) + render(html`${price}`, root) + }} + > + + + + +
+ ${this.isEmptyArray(this.explorerBoughtLTCTrades) ? html` + ${translate("explorerpage.exp12")} + `: ''} +
+
+
+
+ ` + } + + boughtDOGETemplate() { + return html` +
+
+
${translate("explorerpage.exp10")} (DOGE)
+
+
${translate("login.loading")}
+ + { + const dateString = new Date(data.item.timestamp).toLocaleDateString() + render(html`${dateString}`, root) + }} + > + + { + const price = this.round(parseFloat(data.item.foreignAmount) / parseFloat(data.item.qortAmount)) + render(html`${price}`, root) + }} + > + + + + +
+ ${this.isEmptyArray(this.explorerBoughtDOGETrades) ? html` + ${translate("explorerpage.exp12")} + `: ''} +
+
+
+
+ ` + } + + boughtDGBTemplate() { + return html` +
+
+
${translate("explorerpage.exp10")} (DGB)
+
+
${translate("login.loading")}
+ + { + const dateString = new Date(data.item.timestamp).toLocaleDateString() + render(html`${dateString}`, root) + }} + > + + { + const price = this.round(parseFloat(data.item.foreignAmount) / parseFloat(data.item.qortAmount)) + render(html`${price}`, root) + }} + > + + + + +
+ ${this.isEmptyArray(this.explorerBoughtDGBTrades) ? html` + ${translate("explorerpage.exp12")} + `: ''} +
+
+
+
+ ` + } + + boughtRVNTemplate() { + return html` +
+
+
${translate("explorerpage.exp10")} (RVN)
+
+
${translate("login.loading")}
+ + { + const dateString = new Date(data.item.timestamp).toLocaleDateString() + render(html`${dateString}`, root) + }} + > + + { + const price = this.round(parseFloat(data.item.foreignAmount) / parseFloat(data.item.qortAmount)) + render(html`${price}`, root) + }} + > + + + + +
+ ${this.isEmptyArray(this.explorerBoughtRVNTrades) ? html` + ${translate("explorerpage.exp12")} + `: ''} +
+
+
+
+ ` + } + + boughtARRRTemplate() { + return html` +
+
+
${translate("explorerpage.exp10")} (ARRR)
+
+
${translate("login.loading")}
+ + { + const dateString = new Date(data.item.timestamp).toLocaleDateString() + render(html`${dateString}`, root) + }} + > + + { + const price = this.round(parseFloat(data.item.foreignAmount) / parseFloat(data.item.qortAmount)) + render(html`${price}`, root) + }} + > + + + + +
+ ${this.isEmptyArray(this.explorerBoughtARRRTrades) ? html` + ${translate("explorerpage.exp12")} + `: ''} +
+
+
+
+ ` + } + + soldBTCTemplate() { + return html` +
+
+
${translate("explorerpage.exp11")} (BTC)
+
+
${translate("login.loading")}
+ + { + const dateString = new Date(data.item.timestamp).toLocaleDateString() + render(html`${dateString}`, root) + }} + > + + { + const price = this.round(parseFloat(data.item.foreignAmount) / parseFloat(data.item.qortAmount)) + render(html`${price}`, root) + }} + > + + + + +
+ ${this.isEmptyArray(this.explorerSoldBTCTrades) ? html` + ${translate("explorerpage.exp13")} + `: ''} +
+
+
+
+ ` + } + + soldLTCTemplate() { + return html` +
+
+
${translate("explorerpage.exp11")} (LTC)
+
+
${translate("login.loading")}
+ + { + const dateString = new Date(data.item.timestamp).toLocaleDateString() + render(html`${dateString}`, root) + }} + > + + { + const price = this.round(parseFloat(data.item.foreignAmount) / parseFloat(data.item.qortAmount)) + render(html`${price}`, root) + }} + > + + + + +
+ ${this.isEmptyArray(this.explorerSoldLTCTrades) ? html` + ${translate("explorerpage.exp13")} + `: ''} +
+
+
+
+ ` + } + + soldDOGETemplate() { + return html` +
+
+
${translate("explorerpage.exp11")} (DOGE)
+
+
${translate("login.loading")}
+ + { + const dateString = new Date(data.item.timestamp).toLocaleDateString() + render(html`${dateString}`, root) + }} + > + + { + const price = this.round(parseFloat(data.item.foreignAmount) / parseFloat(data.item.qortAmount)) + render(html`${price}`, root) + }} + > + + + + +
+ ${this.isEmptyArray(this.explorerSoldDOGETrades) ? html` + ${translate("explorerpage.exp13")} + `: ''} +
+
+
+
+ ` + } + + soldDGBTemplate() { + return html` +
+
+
${translate("explorerpage.exp11")} (DGB)
+
+
${translate("login.loading")}
+ + { + const dateString = new Date(data.item.timestamp).toLocaleDateString() + render(html`${dateString}`, root) + }} + > + + { + const price = this.round(parseFloat(data.item.foreignAmount) / parseFloat(data.item.qortAmount)) + render(html`${price}`, root) + }} + > + + + + +
+ ${this.isEmptyArray(this.explorerSoldDGBTrades) ? html` + ${translate("explorerpage.exp13")} + `: ''} +
+
+
+
+ ` + } + + soldRVNTemplate() { + return html` +
+
+
${translate("explorerpage.exp11")} (RVN)
+
+
${translate("login.loading")}
+ + { + const dateString = new Date(data.item.timestamp).toLocaleDateString() + render(html`${dateString}`, root) + }} + > + + { + const price = this.round(parseFloat(data.item.foreignAmount) / parseFloat(data.item.qortAmount)) + render(html`${price}`, root) + }} + > + + + + +
+ ${this.isEmptyArray(this.explorerSoldRVNTrades) ? html` + ${translate("explorerpage.exp13")} + `: ''} +
+
+
+
+ ` + } + + soldARRRTemplate() { + return html` +
+
+
${translate("explorerpage.exp11")} (ARRR)
+
+
${translate("login.loading")}
+ + { + const dateString = new Date(data.item.timestamp).toLocaleDateString() + render(html`${dateString}`, root) + }} + > + + { + const price = this.round(parseFloat(data.item.foreignAmount) / parseFloat(data.item.qortAmount)) + render(html`${price}`, root) + }} + > + + + + +
+ ${this.isEmptyArray(this.explorerSoldARRRTrades) ? html` + ${translate("explorerpage.exp13")} + `: ''} +
+
+
+
+ ` + } + + render() { + return html` + + +

${this.infoAccountName}

+

${this.displayAddress}

+
${translate("login.loading")}
+
+ +
+
+ +
+
+
+
${translate("explorerpage.exp22")}
+
+
${translate("login.loading")}
+ + { + render(html`${translate("walletpage.wchange40")} ${data.item.creatorAddress === this.displayAddress ? html`${translate("walletpage.wchange7")}` : html`${translate("walletpage.wchange8")}`} `, root) + }} + > + + + { + const dateString = new Date(data.item.timestamp).toLocaleDateString() + render(html`${dateString}`, root) + }} + > + + { + render(html`info`, root) + }} + > + + + ${this.isEmptyArray(this.slicedArray) ? html` + ${translate("walletpage.wchange38")} + `: ''} +
+
+
+
+ + this.showAllPayments()}>${translate("explorerpage.exp23")} + + + this.openTrades()}>${translate("explorerpage.exp21")} + this.closeCompleteInfoDialog()} dialog-dismiss>${translate("general.close")} + +
+
+ + +
+

${translate("explorerpage.exp17")}

+
+
+
+
+
${translate("explorerpage.exp17")}
+
+
${translate("login.loading")}
+ + { + render(html`${translate("walletpage.wchange40")} ${data.item.creatorAddress === this.displayAddress ? html`${translate("walletpage.wchange7")}` : html`${translate("walletpage.wchange8")}`} `, root) + }} + > + + + { + const dateString = new Date(data.item.timestamp).toLocaleDateString() + render(html`${dateString}`, root) + }} + > + + { + render(html`info`, root) + }} + > + + + ${this.isEmptyArray(this.allPayments) ? html` + ${translate("walletpage.wchange38")} + `: ''} +
+
+
+
+ + this.closeShowAllPaymentsDialog()} dialog-dismiss>${translate("general.close")} + +
+
+ + +
+ +

${translate("explorerpage.exp4")}

+

${translate("explorerpage.exp5")}

+
+
+ this.closeErrorDialog()} dialog-dismiss>${translate("general.close")} +
+
+ + +
+ this.openUserBoughtDialog()}>

+ this.openUserSoldDialog()}>

+
+
+ this.closeTrades()} dialog-dismiss>${translate("general.close")} +
+
+ + +
+
+ ${this.boughtBTCTemplate()} + ${this.boughtLTCTemplate()} +
+
+ ${this.boughtDOGETemplate()} + ${this.boughtDGBTemplate()} +
+
+ ${this.boughtRVNTemplate()} + ${this.boughtARRRTemplate()} +
+
+
+ this.closeBoughtDialog()} dialog-dismiss>${translate("general.close")} +
+
+ + +
+
+ ${this.soldBTCTemplate()} + ${this.soldLTCTemplate()} +
+
+ ${this.soldDOGETemplate()} + ${this.soldDGBTemplate()} +
+
+ ${this.soldRVNTemplate()} + ${this.soldARRRTemplate()} +
+
+
+ this.closeSoldDialog()} dialog-dismiss>${translate("general.close")} +
+
+ + +
+

${translate("walletpage.wchange5")}

+
+
+
+ ${translate("walletpage.wchange6")} +
+
+ ${translate("walletpage.wchange40")} ${this.txcreatorAddress === this.displayAddress ? html`${translate("walletpage.wchange7")}` : html`${translate("walletpage.wchange8")}`} +
+ + ${translate("walletpage.wchange9")} +
+
${this.txcreatorAddress}
+ + ${translate("walletpage.wchange10")} +
+
${this.txrecipient}
+ + ${translate("walletpage.wchange12")} +
+
${this.txfee} QORT
+ + ${translate("walletpage.wchange37")} +
+
${this.txamount} QORT
+ + ${translate("walletpage.wchange13")} +
+
${this.txblockHeight}
+ + ${translate("walletpage.wchange14")} +
+
${new Date(this.txtimestamp).toString()}
+
+
+ this.closeSoldDialog()} dialog-dismiss>${translate("general.close")} +
+
+ + ` + } + + openTraderInfo(traderData) { + if (traderData.startsWith('Q') && traderData.length == 34) { + this.getAddressUserResult(traderData) + } else { + this.getNameUserResult(traderData) + } + } + + async getAddressUserResult(resultAddress) { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port + const addressUrl = `${nodeUrl}/addresses/${resultAddress}` + + await fetch(addressUrl).then(res => { + if (res.status === 400) { + this.shadowRoot.getElementById('userErrorDialog').open() + } else { + this.getAllWithAddress(resultAddress) + } + }) + } + + async getNameUserResult(resultName) { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port + const nameUrl = `${nodeUrl}/names/${resultName}` + + await fetch(nameUrl).then(res => { + if (res.status === 404) { + this.shadowRoot.getElementById('userErrorDialog').open() + } else { + this.getAddressFromName(resultName) + } + }) + } + + async getAddressFromName(fromName) { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port + const fromNameUrl = `${nodeUrl}/names/${fromName}` + + const qortalNameInfo = await fetch(fromNameUrl).then(response => { + return response.json() + }) + + this.nameAddressResult = qortalNameInfo + const nameAddress = this.nameAddressResult.owner + this.getAllWithAddress(nameAddress) + } + + async getAllWithAddress(myAddress) { + await this.getAddressUserInfo(myAddress) + await this.getAddressUserAvatar(myAddress) + await this.getAddressUserBalance(myAddress) + this.displayAddress = this.addressResult.address + this.displayLevel = this.addressResult.level + this.isLoadingCompleteInfo = true + this.shadowRoot.getElementById('userFullInfoDialog').open() + await this.getStartMint() + await this.getPaymentsGridItems() + this.isLoadingCompleteInfo = false + } + + async getAddressUserInfo(infoAddress) { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port + const infoAddressUrl = `${nodeUrl}/addresses/${infoAddress}` + + const qortalAddressInfo = await fetch(infoAddressUrl).then(response => { + return response.json() + }) + + this.addressResult = qortalAddressInfo + } + + async getAddressUserAvatar(avatarAddress) { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port + const nameUrl = `${nodeUrl}/names/address/${avatarAddress}?limit=0&reverse=true` + + await fetch(nameUrl).then(res => { + return res.json() + }).then(jsonRes => { + if(jsonRes.length) { + jsonRes.map (item => { + this.infoAccountName = item.name + this.imageName = item.name + }) + } else { + this.infoAccountName = get("chatpage.cchange15") + this.imageName = avatarAddress + } + }) + + const myImageUrl = `${nodeUrl}/arbitrary/THUMBNAIL/${this.imageName}/qortal_avatar?async=true&apiKey=${this.getApiKey()}` + this.imageUrl = myImageUrl + } + + async getAddressUserBalance(balanceAddress) { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port + const balanceAddressUrl = `${nodeUrl}/addresses/balance/${balanceAddress}` + + const qortalBalanceInfo = await fetch(balanceAddressUrl).then(res => { + return res.json() + }) + + this.displayBalance = qortalBalanceInfo.toFixed(4) + } + + async getStartMint() { + this.actualBlockheight = 0 + this.reduceBlockheight = 0 + this.startMintBlockheight = 0 + this.startMintTime = '' + this.startMintBlock = [] + const checkBlocks = this.addressResult.blocksMinted + this.addressResult.blocksMintedAdjustment + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port + + if (checkBlocks === 0) { + let noMinterString = get("explorerpage.exp16") + this.startMintTime = noMinterString + } else { + const blockheightUrl = `${nodeUrl}/blocks/height` + + const currentBlockheight = await fetch(blockheightUrl).then(response => { + return response.json() + }) + + this.actualBlockheight = currentBlockheight + this.reduceBlockheight = this.addressResult.blocksMinted + this.addressResult.blocksMintedAdjustment + this.startMintBlockheight = (this.actualBlockheight - this.reduceBlockheight) + const startMintUrl = `${nodeUrl}/blocks/byheight/${this.startMintBlockheight}?includeOnlineSignatures=false` + + const startMintBlock = await fetch(startMintUrl).then(response => { + return response.json() + }) + + this.startMintBlock = startMintBlock + + const mintString = new Date(this.startMintBlock.timestamp).toLocaleDateString() + this.startMintTime = mintString + } + } + + avatarImage() { + return html`` + } + + avatarFullImage() { + return html`` + } + + founderBadge() { + if (this.addressResult.flags === 1) { + return html`${translate("explorerpage.exp6")}` + } else { + return html`` + } + } + + founderStatus() { + if (this.addressResult.flags === 1) { + return html`${translate("general.yes")}` + } else { + return html`${translate("general.no")}` + } + } + + async getPaymentsGridItems() { + this.allPayments = [] + this.slicedArray = [] + this.allReceivedPayments = [] + this.allSendPayments = [] + this.totalSent = 0 + this.totalReceived = 0 + const paymentsAddress = this.displayAddress + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port + const paymentsUrl = `${nodeUrl}/transactions/address/${paymentsAddress}?limit=0&reverse=true` + + const paymentsAll = await fetch(paymentsUrl).then(response => { + return response.json() + }) + + this.allPayments = paymentsAll.map(item => { + const searchType = item.type + if (searchType == "PAYMENT") { + return { + timestamp: item.timestamp, + creatorAddress: item.creatorAddress, + recipient: item.recipient, + amount: item.amount, + fee: item.fee, + blockHeight: item.blockHeight + } + } + }).filter(item => !!item) + + this.slicedArray = this.allPayments.slice(0, 5) + + this.allSendPayments = this.allPayments.map(item => { + const searchSendAddress = item.creatorAddress + if (searchSendAddress == paymentsAddress) { + return { + timestamp: item.timestamp, + creatorAddress: item.creatorAddress, + recipient: item.recipient, + amount: item.amount + + } + } + }).filter(item => !!item) + + this.allSendPayments.map(item => { + this.totalSent += parseFloat(item.amount) + }) + + this.allReceivedPayments = this.allPayments.map(item => { + const searchReceivedAddress = item.recipient + if (searchReceivedAddress == paymentsAddress) { + return { + timestamp: item.timestamp, + creatorAddress: item.creatorAddress, + recipient: item.recipient, + amount: item.amount + + } + } + }).filter(item => !!item) + + this.allReceivedPayments.map(item => { + this.totalReceived += parseFloat(item.amount) + }) + } + + showPaymentDetails(paymentsData) { + this.txtimestamp = '' + this.txcreatorAddress = '' + this.txrecipient = '' + this.txamount = '' + this.txfee = '' + this.txblockHeight = '' + this.txtimestamp = paymentsData.item.timestamp + this.txcreatorAddress = paymentsData.item.creatorAddress + this.txrecipient = paymentsData.item.recipient + this.txamount = paymentsData.item.amount + this.txfee = paymentsData.item.fee + this.txblockHeight = paymentsData.item.blockHeight + this.shadowRoot.getElementById('showTxDetailsDialog').open() + } + + showAllPayments() { + this.shadowRoot.getElementById('showAllPaymentsDialog').open() + } + + async getBoughtBTCGridItems() { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port + const tradesBoughtBTCUrl = `${nodeUrl}/crosschain/trades?foreignBlockchain=BITCOIN&minimumTimestamp=1597310000000&limit=0&reverse=true` + const myBTCAddress = this.displayAddress + + const boughtBTCTradesAll = await fetch(tradesBoughtBTCUrl).then(response => { + return response.json() + }) + + this.explorerBoughtBTCTrades = boughtBTCTradesAll.map(item => { + const searchAddress = item.buyerReceivingAddress + if (searchAddress == myBTCAddress) { + return { + timestamp: item.tradeTimestamp, + foreignAmount: item.foreignAmount, + qortAmount: item.qortAmount + } + } + }).filter(item => !!item) + } + + async getBoughtLTCGridItems() { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port + const tradesBoughtLTCUrl = `${nodeUrl}/crosschain/trades?foreignBlockchain=LITECOIN&minimumTimestamp=1597310000000&limit=0&reverse=true` + const myLTCAddress = this.displayAddress + + const boughtLTCTradesAll = await fetch(tradesBoughtLTCUrl).then(response => { + return response.json() + }) + + this.explorerBoughtLTCTrades = boughtLTCTradesAll.map(item => { + const searchAddress = item.buyerReceivingAddress + if (searchAddress == myLTCAddress) { + return { + timestamp: item.tradeTimestamp, + foreignAmount: item.foreignAmount, + qortAmount: item.qortAmount + } + } + }).filter(item => !!item) + } + + async getBoughtDOGEGridItems() { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port + const tradesBoughtDOGEUrl = `${nodeUrl}/crosschain/trades?foreignBlockchain=DOGECOIN&minimumTimestamp=1597310000000&limit=0&reverse=true` + const myDOGEAddress = this.displayAddress + + const boughtDOGETradesAll = await fetch(tradesBoughtDOGEUrl).then(response => { + return response.json() + }) + + this.explorerBoughtDOGETrades = boughtDOGETradesAll.map(item => { + const searchAddress = item.buyerReceivingAddress + if (searchAddress == myDOGEAddress) { + return { + timestamp: item.tradeTimestamp, + foreignAmount: item.foreignAmount, + qortAmount: item.qortAmount + } + } + }).filter(item => !!item) + } + + async getBoughtDGBGridItems() { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port + const tradesBoughtDGBUrl = `${nodeUrl}/crosschain/trades?foreignBlockchain=DIGIBYTE&minimumTimestamp=1597310000000&limit=0&reverse=true` + const myDGBAddress = this.displayAddress + + const boughtDGBTradesAll = await fetch(tradesBoughtDGBUrl).then(response => { + return response.json() + }) + + this.explorerBoughtDGBTrades = boughtDGBTradesAll.map(item => { + const searchAddress = item.buyerReceivingAddress + if (searchAddress == myDGBAddress) { + return { + timestamp: item.tradeTimestamp, + foreignAmount: item.foreignAmount, + qortAmount: item.qortAmount + } + } + }).filter(item => !!item) + } + + async getBoughtRVNGridItems() { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port + const tradesBoughtRVNUrl = `${nodeUrl}/crosschain/trades?foreignBlockchain=RAVENCOIN&minimumTimestamp=1597310000000&limit=0&reverse=true` + const myRVNAddress = this.displayAddress + + const boughtRVNTradesAll = await fetch(tradesBoughtRVNUrl).then(response => { + return response.json() + }) + + this.explorerBoughtRVNTrades = boughtRVNTradesAll.map(item => { + const searchAddress = item.buyerReceivingAddress + if (searchAddress == myRVNAddress) { + return { + timestamp: item.tradeTimestamp, + foreignAmount: item.foreignAmount, + qortAmount: item.qortAmount + } + } + }).filter(item => !!item) + } + + async getBoughtARRRGridItems() { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port + const tradesBoughtARRRUrl = `${nodeUrl}/crosschain/trades?foreignBlockchain=PIRATECHAIN&minimumTimestamp=1597310000000&limit=0&reverse=true` + const myARRRAddress = this.displayAddress + + const boughtARRRTradesAll = await fetch(tradesBoughtARRRUrl).then(response => { + return response.json() + }) + + this.explorerBoughtARRRTrades = boughtARRRTradesAll.map(item => { + const searchAddress = item.buyerReceivingAddress + if (searchAddress == myARRRAddress) { + return { + timestamp: item.tradeTimestamp, + foreignAmount: item.foreignAmount, + qortAmount: item.qortAmount + } + } + }).filter(item => !!item) + } + + async getSoldBTCGridItems() { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port + const tradesSoldBTCUrl = `${nodeUrl}/crosschain/trades?foreignBlockchain=BITCOIN&minimumTimestamp=1597310000000&limit=0&reverse=true` + const myBTCAddress = this.displayAddress + + const soldBTCTradesAll = await fetch(tradesSoldBTCUrl).then(response => { + return response.json() + }) + + this.explorerSoldBTCTrades = soldBTCTradesAll.map(item => { + const searchAddress = item.sellerAddress + if (searchAddress == myBTCAddress) { + return { + timestamp: item.tradeTimestamp, + foreignAmount: item.foreignAmount, + qortAmount: item.qortAmount + } + } + }).filter(item => !!item) + } + + async getSoldLTCGridItems() { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port + const tradesSoldLTCUrl = `${nodeUrl}/crosschain/trades?foreignBlockchain=LITECOIN&minimumTimestamp=1597310000000&limit=0&reverse=true` + const myLTCAddress = this.displayAddress + + const soldLTCTradesAll = await fetch(tradesSoldLTCUrl).then(response => { + return response.json() + }) + + this.explorerSoldLTCTrades = soldLTCTradesAll.map(item => { + const searchAddress = item.sellerAddress + if (searchAddress == myLTCAddress) { + return { + timestamp: item.tradeTimestamp, + foreignAmount: item.foreignAmount, + qortAmount: item.qortAmount + } + } + }).filter(item => !!item) + } + + async getSoldDOGEGridItems() { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port + const tradesSoldDOGEUrl = `${nodeUrl}/crosschain/trades?foreignBlockchain=DOGECOIN&minimumTimestamp=1597310000000&limit=0&reverse=true` + const myDOGEAddress = this.displayAddress + + const soldDOGETradesAll = await fetch(tradesSoldDOGEUrl).then(response => { + return response.json() + }) + + this.explorerSoldDOGETrades = soldDOGETradesAll.map(item => { + const searchAddress = item.sellerAddress + if (searchAddress == myDOGEAddress) { + return { + timestamp: item.tradeTimestamp, + foreignAmount: item.foreignAmount, + qortAmount: item.qortAmount + } + } + }).filter(item => !!item) + } + + async getSoldDGBGridItems() { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port + const tradesSoldDGBUrl = `${nodeUrl}/crosschain/trades?foreignBlockchain=DIGIBYTE&minimumTimestamp=1597310000000&limit=0&reverse=true` + const myDGBAddress = this.displayAddress + + const soldDGBTradesAll = await fetch(tradesSoldDGBUrl).then(response => { + return response.json() + }) + + this.explorerSoldDGBTrades = soldDGBTradesAll.map(item => { + const searchAddress = item.sellerAddress + if (searchAddress == myDGBAddress) { + return { + timestamp: item.tradeTimestamp, + foreignAmount: item.foreignAmount, + qortAmount: item.qortAmount + } + } + }).filter(item => !!item) + } + + async getSoldRVNGridItems() { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port + const tradesSoldRVNUrl = `${nodeUrl}/crosschain/trades?foreignBlockchain=RAVENCOIN&minimumTimestamp=1597310000000&limit=0&reverse=true` + const myRVNAddress = this.displayAddress + + const soldRVNTradesAll = await fetch(tradesSoldRVNUrl).then(response => { + return response.json() + }) + + this.explorerSoldRVNTrades = soldRVNTradesAll.map(item => { + const searchAddress = item.sellerAddress + if (searchAddress == myRVNAddress) { + return { + timestamp: item.tradeTimestamp, + foreignAmount: item.foreignAmount, + qortAmount: item.qortAmount + } + } + }).filter(item => !!item) + } + + async getSoldARRRGridItems() { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port + const tradesSoldARRRUrl = `${nodeUrl}/crosschain/trades?foreignBlockchain=PIRATECHAIN&minimumTimestamp=1597310000000&limit=0&reverse=true` + const myARRRAddress = this.displayAddress + + const soldARRRTradesAll = await fetch(tradesSoldARRRUrl).then(response => { + return response.json() + }) + + this.explorerSoldARRRTrades = soldARRRTradesAll.map(item => { + const searchAddress = item.sellerAddress + if (searchAddress == myARRRAddress) { + return { + timestamp: item.tradeTimestamp, + foreignAmount: item.foreignAmount, + qortAmount: item.qortAmount + } + } + }).filter(item => !!item) + } + + openTrades() { + this.shadowRoot.getElementById('userTrades').open() + this.shadowRoot.getElementById('userFullInfoDialog').close() + } + + async openUserBoughtDialog() { + this.shadowRoot.getElementById('userBoughtDialog').open() + this.explorerBoughtBTCTrades = [] + this.explorerBoughtLTCTrades = [] + this.explorerBoughtDOGETrades = [] + this.explorerBoughtDGBTrades = [] + this.explorerBoughtRVNTrades = [] + this.explorerBoughtARRRTrades = [] + this.isLoadingBoughtTradesBTC = true + this.isLoadingBoughtTradesLTC = true + this.isLoadingBoughtTradesDOGE = true + this.isLoadingBoughtTradesDGB = true + this.isLoadingBoughtTradesRVN = true + this.isLoadingBoughtTradesARRR = true + await this.getBoughtBTCGridItems() + this.isLoadingBoughtTradesBTC = false + await this.getBoughtLTCGridItems() + this.isLoadingBoughtTradesLTC = false + await this.getBoughtDOGEGridItems() + this.isLoadingBoughtTradesDOGE = false + await this.getBoughtDGBGridItems() + this.isLoadingBoughtTradesDGB = false + await this.getBoughtRVNGridItems() + this.isLoadingBoughtTradesRVN = false + await this.getBoughtARRRGridItems() + this.isLoadingBoughtTradesARRR = false + } + + async openUserSoldDialog() { + this.shadowRoot.getElementById('userSoldDialog').open() + this.explorerSoldBTCTrades = [] + this.explorerSoldLTCTrades = [] + this.explorerSoldDOGETrades = [] + this.explorerSoldDGBTrades = [] + this.explorerSoldRVNTrades = [] + this.explorerSoldARRRTrades = [] + this.isLoadingSoldTradesBTC = true + this.isLoadingSoldTradesLTC = true + this.isLoadingSoldTradesDOGE = true + this.isLoadingSoldTradesDGB = true + this.isLoadingSoldTradesRVN = true + this.isLoadingSoldTradesARRR = true + await this.getSoldBTCGridItems() + this.isLoadingSoldTradesBTC = false + await this.getSoldLTCGridItems() + this.isLoadingSoldTradesLTC = false + await this.getSoldDOGEGridItems() + this.isLoadingSoldTradesDOGE = false + await this.getSoldDGBGridItems() + this.isLoadingSoldTradesDGB = false + await this.getSoldRVNGridItems() + this.isLoadingSoldTradesRVN = false + await this.getSoldARRRGridItems() + this.isLoadingSoldTradesARRR = false + } + + closeErrorDialog() { + this.shadowRoot.getElementById('userErrorDialog').close() + } + + closeTrades() { + this.shadowRoot.getElementById('userTrades').close() + } + + closeCompleteInfoDialog() { + this.shadowRoot.getElementById('userFullInfoDialog').close() + } + + closeBoughtDialog() { + this.shadowRoot.getElementById('userBoughtDialog').close() + } + + closeSoldDialog() { + this.shadowRoot.getElementById('userSoldDialog').close() + } + + closeShowAllPaymentsDialog() { + this.shadowRoot.getElementById('showAllPaymentsDialog').close() + } + + getApiKey() { + const apiNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + let apiKey = apiNode.apiKey; + return apiKey; + } + + isEmptyArray(arr) { + if (!arr) { + return true + } + return arr.length === 0 + } + + round(number) { + let result = (Math.round(parseFloat(number) * 1e8) / 1e8).toFixed(8) + return result + } +} + +window.customElements.define('trader-info-view', TraderInfoView) diff --git a/plugins/plugins/core/trade-portal/trade-portal.src.js b/plugins/plugins/core/trade-portal/trade-portal.src.js index 1339711b..a7f7c460 100644 --- a/plugins/plugins/core/trade-portal/trade-portal.src.js +++ b/plugins/plugins/core/trade-portal/trade-portal.src.js @@ -30,6 +30,7 @@ import chartsdoge from './charts/doge-charts.js' import chartsdgb from './charts/dgb-charts.js' import chartsrvn from './charts/rvn-charts.js' import chartsarrr from './charts/arrr-charts.js' +import '../components/TraderInfoView.js' const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) @@ -77,13 +78,7 @@ class TradePortal extends LitElement { dgbqort: { type: Number }, rvnqort: { type: Number }, arrrqort: { type: Number }, - tradeInfoAccountName: { type: String }, - tradeImageUrl: { type: String }, - tradeAddressResult: { type: Array }, - displayTradeAddress: { type: String }, - displayTradeLevel: { type: String }, - displayTradeBalance: { type: String }, - qortRatio: {type: Number} + qortRatio: {type: Number} } } @@ -919,7 +914,7 @@ class TradePortal extends LitElement { resizable header="${translate("explorerpage.exp7")}" .renderer=${(root, column, data) => { - render(html`info`, root) + render(html`info`, root) }} > @@ -1262,30 +1257,19 @@ class TradePortal extends LitElement { ${translate("general.close")} - -
- ${translate("mintingpage.mchange27")} ${this.displayTradeLevel} - ${this.tradeFounderBadge()} - ${this.tradeAvatarImage()} -

${this.tradeInfoAccountName}

-

${this.displayTradeAddress}

-

${translate("explorerpage.exp2")}: ${this.displayTradeBalance} QORT

+ +
+

+ this.shadowRoot.getElementById('tradeInfoDialog').close()} title="${translate("info.inf2")}">highlight_off
- ${translate("general.close")} - - - -
-

- this.shadowRoot.getElementById('tradeInfoDialog').close()} title="${translate("info.inf2")}">highlight_off -
-
-

${translate("info.inf1")}

-

${translate("info.inf3")} ${this.listedCoins.get(this.selectedCoin).coinCode} ${translate("info.inf4")}

-

${translate("info.inf5")} ${this.listedCoins.get(this.selectedCoin).coinCode}

-

${translate("info.inf6")}

-
-
+
+

${translate("info.inf1")}

+

${translate("info.inf3")} ${this.listedCoins.get(this.selectedCoin).coinCode} ${translate("info.inf4")}

+

${translate("info.inf5")} ${this.listedCoins.get(this.selectedCoin).coinCode}

+

${translate("info.inf6")}

+
+
+ ` } @@ -1450,6 +1434,12 @@ class TradePortal extends LitElement { setTimeout(() => this.shadowRoot.querySelector('[slot="vaadin-grid-cell-content-3"]').setAttribute('title', 'Last Seen'), 3000) } + requestTraderInfo(traderAddress) { + let getAddress = traderAddress + const theInfoView = this.shadowRoot.querySelector('trader-info-view') + theInfoView.openTraderInfo(getAddress) + } + changeTheme() { const checkTheme = localStorage.getItem('qortalTheme') this.theme = (checkTheme === 'dark') ? 'dark' : 'light' @@ -1727,73 +1717,6 @@ class TradePortal extends LitElement { } - async getAllForAddress(tradeAddress) { - await this.getAddressTradeInfo(tradeAddress) - await this.getAddressTradeAvatar(tradeAddress) - await this.getAddressTradeBalance(tradeAddress) - this.displayTradeAddress = this.tradeAddressResult.address - this.displayTradeLevel = this.tradeAddressResult.level - this.shadowRoot.querySelector('#sellerDialog').show() - } - - async getAddressTradeInfo(tradeInfoAddress) { - const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port - const tradeInfoAddressUrl = `${nodeUrl}/addresses/${tradeInfoAddress}` - - const qortalTradeAddressInfo = await fetch(tradeInfoAddressUrl).then(response => { - return response.json() - }) - - this.tradeAddressResult = qortalTradeAddressInfo - } - - async getAddressTradeAvatar(tradeAvatarAddress) { - const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port - const tradeNameUrl = `${nodeUrl}/names/address/${tradeAvatarAddress}?limit=0&reverse=true` - - await fetch(tradeNameUrl).then(res => { - return res.json() - }).then(jsonRes => { - if(jsonRes.length) { - jsonRes.map (item => { - this.tradeInfoAccountName = item.name - this.tradeImageName = item.name - }) - } else { - this.tradeInfoAccountName = "No registered name" - this.tradeImageName = tradeAvatarAddress - } - }) - - const myTradeImageUrl = `${nodeUrl}/arbitrary/THUMBNAIL/${this.tradeImageName}/qortal_avatar?async=true&apiKey=${this.getApiKey()}` - this.tradeImageUrl = myTradeImageUrl - } - - async getAddressTradeBalance(tradeBalanceAddress) { - const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port - const tradeBalanceAddressUrl = `${nodeUrl}/addresses/balance/${tradeBalanceAddress}` - - const qortalTradeBalanceInfo = await fetch(tradeBalanceAddressUrl).then(res => { - return res.json() - }) - this.displayTradeBalance = qortalTradeBalanceInfo - } - - tradeAvatarImage() { - return html`` - } - - tradeFounderBadge() { - if (this.tradeAddressResult.flags === 1) { - return html`${translate("explorerpage.exp6")}` - } else { - return html`` - } - } - processOfferingTrade(offer) { try { if(this.listedCoins.get(offer.foreignBlockchain).name!='') {