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.avatarFullImage()}
+ ${this.infoAccountName}
+ ${this.displayAddress}
+ ${translate("login.loading")}
+
+
+ -
+ ${translate("mintingpage.mchange27")} ${this.displayLevel}
+
+ -
+ ${translate("walletprofile.blocksminted")} ${this.addressResult.blocksMinted + this.addressResult.blocksMintedAdjustment}
+
+ -
+ ${translate("explorerpage.exp15")} ${this.startMintTime}
+
+ -
+ ${translate("general.balance")} ${this.displayBalance} QORT
+
+ -
+ ${translate("explorerpage.exp6")} ${this.founderStatus()}
+
+
+
+
+
+ -
+ ${translate("explorerpage.exp18")} ${this.allPayments.length}
+
+ -
+ ${translate("explorerpage.exp19")} ${this.allSendPayments.length}
+
+ -
+ QORT ${translate("explorerpage.exp19")} ${this.totalSent.toFixed(0)} QORT
+
+ -
+ ${translate("explorerpage.exp20")} ${this.allReceivedPayments.length}
+
+ -
+ QORT ${translate("explorerpage.exp20")} ${this.totalReceived.toFixed(0)} QORT
+
+
+
+
+
+
${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` this.showPaymentDetails(data)}">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` this.showPaymentDetails(data)}">info`, root)
+ }}
+ >
+
+
+ ${this.isEmptyArray(this.allPayments) ? html`
+
${translate("walletpage.wchange38")}
+ `: ''}
+
+
+
+
+
+ this.closeShowAllPaymentsDialog()} dialog-dismiss>${translate("general.close")}
+
+
+
+
+
+
+
![](/img/notfound.png)
+
${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` this.getAllForAddress(data.item.qortalCreator)}">info`, root)
+ render(html` this.requestTraderInfo(data.item.qortalCreator)}">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`
![](${this.tradeImageUrl})
`
- }
-
- tradeFounderBadge() {
- if (this.tradeAddressResult.flags === 1) {
- return html`
${translate("explorerpage.exp6")}`
- } else {
- return html``
- }
- }
-
processOfferingTrade(offer) {
try {
if(this.listedCoins.get(offer.foreignBlockchain).name!='') {