Merge branch 'feature/group-features' of https://github.com/PhillipLangMartinez/qortal-ui into justin-groups-features

This commit is contained in:
Justin Ferrari 2023-01-06 14:36:01 -05:00
commit 09950cde54
24 changed files with 291 additions and 79 deletions

View File

@ -155,7 +155,8 @@
"continue":"Fortsetzen", "continue":"Fortsetzen",
"save":"Speichern", "save":"Speichern",
"balance":"Guthaben", "balance":"Guthaben",
"balances":"IHR WALLET-GUTHABEN" "balances":"IHR WALLET-GUTHABEN",
"update":"AKTUALISIERE WALLET-GUTHABEN"
}, },
"startminting":{ "startminting":{
"smchange1":"Prägekonten können nicht abgerufen werden", "smchange1":"Prägekonten können nicht abgerufen werden",
@ -606,7 +607,11 @@
"gchange51":"Beitreten", "gchange51":"Beitreten",
"gchange52":"Administrator", "gchange52":"Administrator",
"gchange53":"Mitglied", "gchange53":"Mitglied",
"gchange54":"Mitglieder" "gchange54":"Mitglieder",
"gchange55":"Private Gruppe suchen",
"gchange56":"Zu suchender Gruppenname",
"gchange57":"Privater Gruppenname nicht gefunden",
"gchange58":"Beachten Sie, dass der Gruppenname genau übereinstimmen muss."
}, },
"puzzlepage":{ "puzzlepage":{
"pchange1":"Rätsel", "pchange1":"Rätsel",

View File

@ -155,7 +155,8 @@
"continue":"Continuar", "continue":"Continuar",
"save":"Guardar", "save":"Guardar",
"balance":"Saldo", "balance":"Saldo",
"balances":"LOS SALDOS DE TU BILLETERA" "balances":"LOS SALDOS DE TU BILLETERA",
"update":"ACTUALIZAR SALDOS DE CARTERA"
}, },
"startminting":{ "startminting":{
"smchange1":"No se pueden obtener cuentas de acuñación", "smchange1":"No se pueden obtener cuentas de acuñación",
@ -606,7 +607,11 @@
"gchange51":"Unirse", "gchange51":"Unirse",
"gchange52":"Aministrador", "gchange52":"Aministrador",
"gchange53":"Miembro", "gchange53":"Miembro",
"gchange54":"Miembros" "gchange54":"Miembros",
"gchange55":"Buscar grupo privado",
"gchange56":"Nombre del grupo a buscar",
"gchange57":"Nombre de grupo privado no encontrado",
"gchange58":"Tenga en cuenta que el nombre del grupo debe coincidir exactamente."
}, },
"puzzlepage":{ "puzzlepage":{
"pchange1":"Rompecabezas", "pchange1":"Rompecabezas",

View File

@ -155,7 +155,8 @@
"continue":"Continuer", "continue":"Continuer",
"save":"Sauvegarder", "save":"Sauvegarder",
"balance":"Solde", "balance":"Solde",
"balances":"VOS SOLDES DE PORTEFEUILLE" "balances":"VOS SOLDES DE PORTEFEUILLE",
"update":"METTRE À JOUR LES SOLDES DES PORTEFEUILLES"
}, },
"startminting":{ "startminting":{
"smchange1":"Impossible de récupérer les comptes de frappe", "smchange1":"Impossible de récupérer les comptes de frappe",
@ -606,7 +607,11 @@
"gchange51":"Rejoindre", "gchange51":"Rejoindre",
"gchange52":"Admin", "gchange52":"Admin",
"gchange53":"Membre", "gchange53":"Membre",
"gchange54":"Membres" "gchange54":"Membres",
"gchange55":"Rechercher un groupe privé",
"gchange56":"Nom du groupe à rechercher",
"gchange57":"Nom de groupe privé introuvable",
"gchange58":"Notez que le nom du groupe doit correspondre exactement."
}, },
"puzzlepage":{ "puzzlepage":{
"pchange1":"Puzzles", "pchange1":"Puzzles",

View File

@ -156,7 +156,8 @@
"continue":"जारी रखें", "continue":"जारी रखें",
"save":"सहेजें", "save":"सहेजें",
"balance":"संतुलन", "balance":"संतुलन",
"balances":"आपका वॉलेट बैलेंस" "balances":"आपका वॉलेट बैलेंस",
"update":"अपडेट वॉलेट बैलेंस"
}, },
"startminting":{ "startminting":{
"smchange1":"खनन खाते नहीं लाए जा सकते", "smchange1":"खनन खाते नहीं लाए जा सकते",
@ -607,7 +608,11 @@
"gchange51":"शामिल हों", "gchange51":"शामिल हों",
"gchange52":"व्यवस्थापक", "gchange52":"व्यवस्थापक",
"gchange53":"सदस्य", "gchange53":"सदस्य",
"gchange54":"सदस्यों" "gchange54":"सदस्यों",
"gchange55":"निजी समूह खोजें",
"gchange56":"खोजने के लिए समूह का नाम",
"gchange57":"निजी समूह का नाम नहीं मिला",
"gchange58":"ध्यान दें कि समूह का नाम सटीक मेल खाना चाहिए।"
}, },
"puzzlepage":{ "puzzlepage":{
"pchange1":"पहेलि", "pchange1":"पहेलि",

View File

@ -155,7 +155,8 @@
"continue":"Nastavi", "continue":"Nastavi",
"save":"Spremi", "save":"Spremi",
"balance":"Kreditna", "balance":"Kreditna",
"balances":"VAŠ NOVČANIK JE NA SALJU" "balances":"VAŠ NOVČANIK JE NA SALJU",
"update":"AŽURIRAJTE STANJE NOVČANIKA"
}, },
"startminting":{ "startminting":{
"smchange1":"Nije moguće dohvatiti račune za kovanje", "smchange1":"Nije moguće dohvatiti račune za kovanje",
@ -606,7 +607,11 @@
"gchange51":"Pridruži", "gchange51":"Pridruži",
"gchange52":"Admin", "gchange52":"Admin",
"gchange53":"Član", "gchange53":"Član",
"gchange54":"Članovi" "gchange54":"Članovi",
"gchange55":"Traži privatnu grupu",
"gchange56":"Naziv grupe za pretraživanje",
"gchange57":"Ime privatne grupe nije pronađeno",
"gchange58":"Imajte na umu da se naziv grupe mora točno podudarati."
}, },
"puzzlepage":{ "puzzlepage":{
"pchange1":"Zagonetke", "pchange1":"Zagonetke",

View File

@ -155,7 +155,8 @@
"continue":"Folytatódik/folytatáshoz", "continue":"Folytatódik/folytatáshoz",
"save":"Mentéshez", "save":"Mentéshez",
"balance":"Hitel", "balance":"Hitel",
"balances":"A PÉNZTÁRCSA EGYENLEGEK" "balances":"A PÉNZTÁRCSA EGYENLEGEK",
"update":"FRISSÍTSE A PÉNZTÁRCSA-EGYENLEGEKET"
}, },
"startminting":{ "startminting":{
"smchange1":"Nem lehet lekérni a pénzverési számlákat", "smchange1":"Nem lehet lekérni a pénzverési számlákat",
@ -606,7 +607,11 @@
"gchange51":"Csatlakoz", "gchange51":"Csatlakoz",
"gchange52":"Kormányozo", "gchange52":"Kormányozo",
"gchange53":"Tag", "gchange53":"Tag",
"gchange54":"Tagok" "gchange54":"Tagok",
"gchange55":"Keresés privát csoportban",
"gchange56":"A keresendő csoport neve",
"gchange57":"A privát csoport neve nem található",
"gchange58":"Ne feledje, hogy a csoport nevének pontosan meg kell egyeznie."
}, },
"puzzlepage":{ "puzzlepage":{
"pchange1":"Rejtvények", "pchange1":"Rejtvények",

View File

@ -155,7 +155,8 @@
"continue":"Continua", "continue":"Continua",
"save":"Salva", "save":"Salva",
"balance":"Saldo", "balance":"Saldo",
"balances":"IL TUO SALDO DEL PORTAFOGLIO" "balances":"I SALDI DEL TUO PORTAFOGLIO",
"update":"AGGIORNA I SALDI DEL PORTAFOGLIO"
}, },
"startminting":{ "startminting":{
"smchange1":"Impossibile recuperare i conti di conio", "smchange1":"Impossibile recuperare i conti di conio",
@ -606,7 +607,11 @@
"gchange51":"Unisciti", "gchange51":"Unisciti",
"gchange52":"Amministratore", "gchange52":"Amministratore",
"gchange53":"Membro", "gchange53":"Membro",
"gchange54":"Membri" "gchange54":"Membri",
"gchange55":"Cerca gruppo privato",
"gchange56":"Nome gruppo da cercare",
"gchange57":"Nome gruppo privato non trovato",
"gchange58":"Nota che il nome del gruppo deve corrispondere esattamente."
}, },
"puzzlepage":{ "puzzlepage":{
"pchange1":"Puzzle", "pchange1":"Puzzle",

View File

@ -155,7 +155,8 @@
"continue":"계속하다", "continue":"계속하다",
"save":"저장", "save":"저장",
"balance":"균형", "balance":"균형",
"balances":"지갑 잔액" "balances":"지갑 잔액",
"update":"월렛 잔액 업데이트"
}, },
"startminting":{ "startminting":{
"smchange1":"발행 계정을 가져올 수 없습니다", "smchange1":"발행 계정을 가져올 수 없습니다",
@ -606,7 +607,11 @@
"gchange51":"가입", "gchange51":"가입",
"gchange52":"관리자", "gchange52":"관리자",
"gchange53":"회원", "gchange53":"회원",
"gchange54":"회원들" "gchange54":"회원들",
"gchange55":"비공개 그룹 검색",
"gchange56":"검색할 그룹 이름",
"gchange57":"비공개 그룹 이름을 찾을 수 없음",
"gchange58":"그룹 이름이 정확히 일치해야 합니다."
}, },
"puzzlepage":{ "puzzlepage":{
"pchange1":"퍼즐", "pchange1":"퍼즐",

View File

@ -155,7 +155,8 @@
"continue":"Fortsett", "continue":"Fortsett",
"save":"Lagre", "save":"Lagre",
"balance":"Saldo", "balance":"Saldo",
"balances":"DIN WALLET-SALDO" "balances":"DIN WALLET-SALDO",
"update":"OPPDATERT WALLET-SALDOER"
}, },
"startminting":{ "startminting":{
"smchange1":"Kan ikke hente myntingkontoer", "smchange1":"Kan ikke hente myntingkontoer",
@ -606,7 +607,11 @@
"gchange51":"Bli med", "gchange51":"Bli med",
"gchange52":"Admin", "gchange52":"Admin",
"gchange53":"Medlem", "gchange53":"Medlem",
"gchange54":"Medlemmer" "gchange54":"Medlemmer",
"gchange55":"Søk i privat gruppe",
"gchange56":"Gruppenavn å søke",
"gchange57":"Privat gruppenavn ikke funnet",
"gchange58":"Merk at gruppenavnet må samsvare nøyaktig."
}, },
"puzzlepage":{ "puzzlepage":{
"pchange1":"Puzzles", "pchange1":"Puzzles",

View File

@ -155,7 +155,8 @@
"continue":"Kontynuuj", "continue":"Kontynuuj",
"save":"Zapisz", "save":"Zapisz",
"balance":"Saldo", "balance":"Saldo",
"balances":"SALDO TWOJEGO PORTFELA" "balances":"SALDO TWOJEGO PORTFELA",
"update":"AKTUALIZUJ SALDA W PORTFELU"
}, },
"startminting":{ "startminting":{
"smchange1":"Nie można pobrać kont menniczych", "smchange1":"Nie można pobrać kont menniczych",
@ -606,7 +607,11 @@
"gchange51":"Dołącz", "gchange51":"Dołącz",
"gchange52":"Administrator", "gchange52":"Administrator",
"gchange53":"Członek", "gchange53":"Członek",
"gchange54":"Członkowie" "gchange54":"Członkowie",
"gchange55":"Wyszukaj grupę prywatną",
"gchange56":"Nazwa grupy do wyszukania",
"gchange57":"Nie znaleziono nazwy grupy prywatnej",
"gchange58":"Zauważ, że nazwa grupy musi dokładnie pasować."
}, },
"puzzlepage":{ "puzzlepage":{
"pchange1":"Zagadki", "pchange1":"Zagadki",

View File

@ -155,7 +155,8 @@
"continue":"Continuar", "continue":"Continuar",
"save":"Salvar", "save":"Salvar",
"balance":"Saldo", "balance":"Saldo",
"balances":"SEUS SALDOS DE CARTEIRA" "balances":"SEUS SALDOS DE CARTEIRA",
"update":"ATUALIZAR SALDOS DA CARTEIRA"
}, },
"startminting":{ "startminting":{
"smchange1":"Não é possível buscar contas de cunhagem", "smchange1":"Não é possível buscar contas de cunhagem",
@ -606,7 +607,11 @@
"gchange51":"Entrar", "gchange51":"Entrar",
"gchange52":"Administrador", "gchange52":"Administrador",
"gchange53":"Membro", "gchange53":"Membro",
"gchange54":"Membros" "gchange54":"Membros",
"gchange55":"Pesquisar Grupo Privado",
"gchange56":"Nome do grupo para pesquisar",
"gchange57":"Nome do grupo privado não encontrado",
"gchange58":"Observe que o nome do grupo deve corresponder exatamente."
}, },
"puzzlepage":{ "puzzlepage":{
"pchange1":"Enigmas", "pchange1":"Enigmas",

View File

@ -155,7 +155,8 @@
"continue":"Continua", "continue":"Continua",
"save":"Salveza", "save":"Salveza",
"balance":"Credit", "balance":"Credit",
"balances":"SOLDELE PORTOTELULUI DVS" "balances":"SOLDELE PORTOTELULUI DVS",
"update":"ACTUALIZAȚI SOLDELE PORTOTELULUI"
}, },
"startminting":{ "startminting":{
"smchange1":"Nu se pot prelua conturile de batere", "smchange1":"Nu se pot prelua conturile de batere",
@ -606,7 +607,11 @@
"gchange51":"Inscriere", "gchange51":"Inscriere",
"gchange52":"Admin", "gchange52":"Admin",
"gchange53":"Membru", "gchange53":"Membru",
"gchange54":"Membrii" "gchange54":"Membrii",
"gchange55":"Căutați grup privat",
"gchange56":"Numele grupului de căutat",
"gchange57":"Numele grupului privat nu a fost găsit",
"gchange58":"Rețineți că numele grupului trebuie să se potrivească exact."
}, },
"puzzlepage":{ "puzzlepage":{
"pchange1":"Puzzle-uri", "pchange1":"Puzzle-uri",

View File

@ -155,7 +155,8 @@
"continue":"Nastavite", "continue":"Nastavite",
"save":"Sačuvajte", "save":"Sačuvajte",
"balance":"Kredit", "balance":"Kredit",
"balances":"VAŠI STANJE U NOVČANIKU" "balances":"VAŠI STANJE U NOVČANIKU",
"update":"AŽURIRAJTE STANJE NOVČANIKA"
}, },
"startminting":{ "startminting":{
"smchange1":"Nije moguće preuzeti naloge za kovanje", "smchange1":"Nije moguće preuzeti naloge za kovanje",
@ -606,7 +607,11 @@
"gchange51":"Uđite", "gchange51":"Uđite",
"gchange52":"Administrator", "gchange52":"Administrator",
"gchange53":"Član", "gchange53":"Član",
"gchange54":"Članovi" "gchange54":"Članovi",
"gchange55":"Pretraži privatnu grupu",
"gchange56":"Ime grupe za pretragu",
"gchange57":"Ime privatne grupe nije pronađeno",
"gchange58":"Imajte na umu da ime grupe mora potpuno da se podudara."
}, },
"puzzlepage":{ "puzzlepage":{
"pchange1":"Slagalice", "pchange1":"Slagalice",

View File

@ -155,7 +155,8 @@
"continue":"Продолжить", "continue":"Продолжить",
"save":"Сохранить", "save":"Сохранить",
"balance":"кредит", "balance":"кредит",
"balances":"БАЛАНС ВАШЕГО КОШЕЛЬКА" "balances":"БАЛАНС ВАШЕГО КОШЕЛЬКА",
"update":"ОБНОВИТЬ БАЛАНС КОШЕЛЬКА"
}, },
"startminting":{ "startminting":{
"smchange1":"Не удается получить учетные записи минтинга", "smchange1":"Не удается получить учетные записи минтинга",
@ -606,7 +607,11 @@
"gchange51":"Присоединиться", "gchange51":"Присоединиться",
"gchange52":"Администратор", "gchange52":"Администратор",
"gchange53":"Член", "gchange53":"Член",
"gchange54":"Члены" "gchange54":"Члены",
"gchange55":"Поиск в закрытой группе",
"gchange56":"Имя группы для поиска",
"gchange57":"Имя частной группы не найдено",
"gchange58":"Обратите внимание, что название группы должно точно совпадать."
}, },
"puzzlepage":{ "puzzlepage":{
"pchange1":"Головоломки", "pchange1":"Головоломки",

View File

@ -155,7 +155,8 @@
"continue": "Continue", "continue": "Continue",
"save": "Save", "save": "Save",
"balance": "Balance", "balance": "Balance",
"balances": "YOUR WALLET BALANCES" "balances": "YOUR WALLET BALANCES",
"update": "UPDATE WALLET BALANCES"
}, },
"startminting": { "startminting": {
"smchange1": "Cannot fetch minting accounts", "smchange1": "Cannot fetch minting accounts",
@ -542,7 +543,21 @@
"cchange39": "Cannot send an encrypted message to this user since they do not have their publickey on chain.", "cchange39": "Cannot send an encrypted message to this user since they do not have their publickey on chain.",
"cchange40": "IMAGE (click to view)", "cchange40": "IMAGE (click to view)",
"cchange41": "Your Balance Is Under 4.20 QORT", "cchange41": "Your Balance Is Under 4.20 QORT",
"cchange42": "Out of the need to combat spam, accounts with under 4.20 Qort balance will take a long time to SEND messages in Q-Chat. If you wish to immediately increase the send speed for Q-Chat messages, obtain over 4.20 QORT to your address. This can be done with trades in the Trade Portal, or by way of another Qortian giving you the QORT. Once you have over 4.20 QORT in your account, Q-Chat messages will be instant and this dialog will no more show. Thank you for your understanding of this necessary spam prevention method, and we hope you enjoy Qortal!" "cchange42": "Out of the need to combat spam, accounts with under 4.20 Qort balance will take a long time to SEND messages in Q-Chat. If you wish to immediately increase the send speed for Q-Chat messages, obtain over 4.20 QORT to your address. This can be done with trades in the Trade Portal, or by way of another Qortian giving you the QORT. Once you have over 4.20 QORT in your account, Q-Chat messages will be instant and this dialog will no more show. Thank you for your understanding of this necessary spam prevention method, and we hope you enjoy Qortal!",
"cchange43": "Tip QORT to",
"cchange44": "SEND MESSAGE",
"cchange45": "TIP USER",
"cchange46": "Tip Amount",
"cchange47": "Available Balance",
"cchange48": "Failed to Fetch QORT Balance. Try again!",
"cchange49": "Current static fee",
"cchange50": "Send",
"cchange51": "Insufficient Funds!",
"cchange52": "Invalid Amount!",
"cchange53": "Receiver cannot be empty!",
"cchange54": "Invalid Receiver!",
"cchange55": "Transaction Successful!",
"cchange56": "Transaction Failed!"
}, },
"welcomepage": { "welcomepage": {
"wcchange1": "Welcome to Q-Chat", "wcchange1": "Welcome to Q-Chat",
@ -609,7 +624,7 @@
"gchange32": "Date Updated", "gchange32": "Date Updated",
"gchange33": "Joining", "gchange33": "Joining",
"gchange34": "Join Group", "gchange34": "Join Group",
"gchange35": "User Info", "gchange35": "Leave Group Request",
"gchange36": "Leaving", "gchange36": "Leaving",
"gchange37": "Leave Group", "gchange37": "Leave Group",
"gchange38": "Manage Group Owner:", "gchange38": "Manage Group Owner:",
@ -629,20 +644,10 @@
"gchange52": "Admin", "gchange52": "Admin",
"gchange53": "Member", "gchange53": "Member",
"gchange54": "Members", "gchange54": "Members",
"gchange55": "Tip QORT to", "gchange55": "Search Private Group",
"gchange56": "SEND MESSAGE", "gchange56": "Group Name To Search",
"gchange57": "TIP USER", "gchange57": "Private Group Name Not Found",
"gchange58": "Tip Amount", "gchange58": "Note that group name must exact match."
"gchange59": "Available Balance",
"gchange60": "Failed to Fetch QORT Balance. Try again!",
"gchange61": "Current static fee",
"gchange62": "Send",
"gchange63": "Insufficient Funds!",
"gchange64": "Invalid Amount!",
"gchange65": "Receiver cannot be empty!",
"gchange66": "Invalid Receiver!",
"gchange67": "Transaction Successful!",
"gchange68": "Transaction Failed!"
}, },
"puzzlepage": { "puzzlepage": {
"pchange1": "Puzzles", "pchange1": "Puzzles",

View File

@ -155,7 +155,8 @@
"continue":"继续", "continue":"继续",
"save":"保存", "save":"保存",
"balance":"信用", "balance":"信用",
"balances":"您的钱包余额" "balances":"您的钱包余额",
"update":"更新钱包余额"
}, },
"startminting":{ "startminting":{
"smchange1":"无法获取铸币帐户", "smchange1":"无法获取铸币帐户",
@ -606,7 +607,11 @@
"gchange51":"加入", "gchange51":"加入",
"gchange52":"管理员", "gchange52":"管理员",
"gchange53":"成员", "gchange53":"成员",
"gchange54":"成员数量" "gchange54":"成员数量",
"gchange55":"搜索私人群组",
"gchange56":"要搜索的组名",
"gchange57":"未找到私人组名",
"gchange58":"注意组名必须完全匹配。"
}, },
"puzzlepage":{ "puzzlepage":{
"pchange1":"益智游戏", "pchange1":"益智游戏",

View File

@ -155,7 +155,8 @@
"continue":"繼續", "continue":"繼續",
"save":"保存", "save":"保存",
"balance":"信用", "balance":"信用",
"balances":"您的錢包餘額" "balances":"您的錢包餘額",
"update":"更新錢包餘額"
}, },
"startminting":{ "startminting":{
"smchange1":"無法獲取鑄幣帳戶", "smchange1":"無法獲取鑄幣帳戶",
@ -606,7 +607,11 @@
"gchange51":"加入", "gchange51":"加入",
"gchange52":"管理員", "gchange52":"管理員",
"gchange53":"成員", "gchange53":"成員",
"gchange54":"成員數量" "gchange54":"成員數量",
"gchange55":"搜索私人群組",
"gchange56":"要搜索的組名",
"gchange57":"未找到私人組名",
"gchange58":"注意組名必須完全匹配。"
}, },
"puzzlepage":{ "puzzlepage":{
"pchange1":"益智游戲", "pchange1":"益智游戲",

View File

@ -6,6 +6,7 @@ import { addTradeBotRoutes } from '../tradebot/addTradeBotRoutes.js'
import { get, translate, translateUnsafeHTML } from 'lit-translate' import { get, translate, translateUnsafeHTML } from 'lit-translate'
import '@polymer/paper-icon-button/paper-icon-button.js' import '@polymer/paper-icon-button/paper-icon-button.js'
import '@polymer/paper-progress/paper-progress.js'
import '@polymer/iron-icons/iron-icons.js' import '@polymer/iron-icons/iron-icons.js'
import '@polymer/app-layout/app-layout.js' import '@polymer/app-layout/app-layout.js'
import '@polymer/paper-ripple' import '@polymer/paper-ripple'
@ -38,6 +39,7 @@ class AppView extends connect(store)(LitElement) {
theme: { type: String, reflect: true }, theme: { type: String, reflect: true },
addressInfo: { type: Object }, addressInfo: { type: Object },
searchContentString: { type: String }, searchContentString: { type: String },
getAllBalancesLoading: { type: Boolean },
botQortWallet: { type: String }, botQortWallet: { type: String },
botBtcWallet: { type: String }, botBtcWallet: { type: String },
botLtcWallet: { type: String }, botLtcWallet: { type: String },
@ -154,6 +156,10 @@ class AppView extends connect(store)(LitElement) {
padding: 3px; padding: 3px;
} }
paper-progress {
--paper-progress-active-color: var(--mdc-theme-primary);
}
.s-menu { .s-menu {
list-style: none; list-style: none;
padding: 0px 0px; padding: 0px 0px;
@ -209,7 +215,7 @@ class AppView extends connect(store)(LitElement) {
.balanceheadertext { .balanceheadertext {
position: absolute; position: absolute;
margin: auto; margin: auto;
font-size: 16px; font-size: 14px;
font-weight: 400; font-weight: 400;
width: 250px; width: 250px;
display: inline; display: inline;
@ -330,11 +336,12 @@ class AppView extends connect(store)(LitElement) {
constructor() { constructor() {
super() super()
this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light'
this.searchContentString = '' this.searchContentString = ''
this.urls = []; this.urls = [];
this.nodeType = '' this.nodeType = ''
this.addressInfo = {} this.addressInfo = {}
this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light' this.getAllBalancesLoading = false
this.botQortWallet = '' this.botQortWallet = ''
this.botBtcWallet = '' this.botBtcWallet = ''
this.botLtcWallet = '' this.botLtcWallet = ''
@ -421,13 +428,18 @@ class AppView extends connect(store)(LitElement) {
</div> </div>
<div id="balanceheader"> <div id="balanceheader">
<span class="balanceheadertext"> <span class="balanceheadertext">
${translate("general.balances")} ${this.getAllBalancesLoading ? html`
<vaadin-button theme="icon" id="reload" @click="${() => this.getAllBalances()}"> ${translate("general.update")}
<vaadin-icon icon="vaadin:refresh"></vaadin-icon> ` : html`
</vaadin-button> ${translate("general.balances")}
<vaadin-tooltip text="Reload Balances" for="reload" position="top"></vaadin-tooltip> <vaadin-button theme="icon" id="reload" @click="${() => this.getAllBalances()}">
<vaadin-icon icon="vaadin:refresh"></vaadin-icon>
</vaadin-button>
<vaadin-tooltip text="${translate("general.update")}" for="reload" position="top"></vaadin-tooltip>
`}
</span> </span>
</div> </div>
${this.getAllBalancesLoading ? html`<paper-progress indeterminate style="width: 100%; margin: 4px;"></paper-progress>` : ''}
${this.balanceTicker} ${this.balanceTicker}
<app-info></app-info> <app-info></app-info>
</div> </div>
@ -1512,6 +1524,7 @@ class AppView extends connect(store)(LitElement) {
} }
async getAllBalances() { async getAllBalances() {
this.getAllBalancesLoading = true
await this.updateQortWalletBalance() await this.updateQortWalletBalance()
await this.updateBtcWalletBalance() await this.updateBtcWalletBalance()
await this.updateLtcWalletBalance() await this.updateLtcWalletBalance()
@ -1520,6 +1533,7 @@ class AppView extends connect(store)(LitElement) {
await this.updateRvnWalletBalance() await this.updateRvnWalletBalance()
await this.fetchArrrWalletAddress() await this.fetchArrrWalletAddress()
await this.updateArrrWalletBalance() await this.updateArrrWalletBalance()
this.getAllBalancesLoading = false
} }
async renderBalances() { async renderBalances() {
@ -2139,4 +2153,4 @@ class AppView extends connect(store)(LitElement) {
} }
} }
window.customElements.define('app-view', AppView) window.customElements.define('app-view', AppView)

View File

@ -6,8 +6,6 @@ import { doLogout } from '../../redux/app/app-actions.js'
import { get, translate, translateUnsafeHTML } from 'lit-translate' import { get, translate, translateUnsafeHTML } from 'lit-translate'
import '@polymer/paper-dialog/paper-dialog.js' import '@polymer/paper-dialog/paper-dialog.js'
import '@polymer/neon-animation/animations/scale-up-animation.js';
import '@polymer/neon-animation/animations/fade-out-animation.js';
import '@material/mwc-button' import '@material/mwc-button'
import '@material/mwc-icon' import '@material/mwc-icon'
import '@vaadin/grid' import '@vaadin/grid'
@ -1173,7 +1171,7 @@ class UserInfoView extends connect(store)(LitElement) {
</div> </div>
</paper-dialog> </paper-dialog>
<paper-dialog style="background: var(--white); border: 1px solid var(--black); border-radius: 5px;" id="userBoughtDialog" entry-animation="scale-up-animation" exit-animation="fade-out-animation" with-backdrop> <paper-dialog style="background: var(--white); border: 1px solid var(--black); border-radius: 5px;" id="userBoughtDialog" modal>
<div class="card-explorer-container"> <div class="card-explorer-container">
<div id="first-explorer-section"> <div id="first-explorer-section">
${this.boughtBTCTemplate()} ${this.boughtBTCTemplate()}
@ -1193,7 +1191,7 @@ class UserInfoView extends connect(store)(LitElement) {
</div> </div>
</paper-dialog> </paper-dialog>
<paper-dialog style="background: var(--white); border: 1px solid var(--black); border-radius: 5px; overflow: auto;" id="userSoldDialog" entry-animation="scale-up-animation" exit-animation="fade-out-animation" with-backdrop> <paper-dialog style="background: var(--white); border: 1px solid var(--black); border-radius: 5px; overflow: auto;" id="userSoldDialog" modal>
<div class="card-explorer-container"> <div class="card-explorer-container">
<div id="first-explorer-section"> <div id="first-explorer-section">
${this.soldBTCTemplate()} ${this.soldBTCTemplate()}
@ -1213,7 +1211,7 @@ class UserInfoView extends connect(store)(LitElement) {
</div> </div>
</paper-dialog> </paper-dialog>
<paper-dialog style="background: var(--white); border: 1px solid var(--black); border-radius: 5px;" id="showTxDetailsDialog" entry-animation="scale-up-animation" exit-animation="fade-out-animation" with-backdrop> <paper-dialog style="background: var(--white); border: 1px solid var(--black); border-radius: 5px;" id="showTxDetailsDialog" modal>
<div style="text-align: center; color: var(--black);"> <div style="text-align: center; color: var(--black);">
<h1>${translate("walletpage.wchange5")}</h1> <h1>${translate("walletpage.wchange5")}</h1>
<hr /> <hr />
@ -1773,7 +1771,7 @@ class UserInfoView extends connect(store)(LitElement) {
openTrades() { openTrades() {
this.shadowRoot.getElementById('userTrades').open() this.shadowRoot.getElementById('userTrades').open()
this.shadowRoot.getElementById('userInfoDialog').close() this.shadowRoot.getElementById('userFullInfoDialog').close()
} }
async openUserBoughtDialog() { async openUserBoughtDialog() {

View File

@ -700,6 +700,7 @@ class ChatPage extends LitElement {
font-family: Roboto, sans-serif; font-family: Roboto, sans-serif;
font-size: 15px; font-size: 15px;
color: var(--chat-bubble-msg-color); color: var(--chat-bubble-msg-color);
box-sizing: border-box;
} }
.name-input::selection { .name-input::selection {

View File

@ -57,11 +57,11 @@ export class TipUser extends LitElement {
} }
renderSuccessText() { renderSuccessText() {
return html`${translate("grouppage.gchange67")}` return html`${translate("chatpage.cchange55")}`
} }
renderReceiverText() { renderReceiverText() {
return html`${translate("grouppage.gchange66")}` return html`${translate("chatpage.cchange54")}`
} }
getApiKey() { getApiKey() {
@ -76,7 +76,7 @@ export class TipUser extends LitElement {
}) })
.then((res) => { .then((res) => {
if (isNaN(Number(res))) { if (isNaN(Number(res))) {
let snack4string = get("grouppage.gchange60") let snack4string = get("chatpage.cchange48")
parentEpml.request('showSnackBar', `${snack4string}`) parentEpml.request('showSnackBar', `${snack4string}`)
} else { } else {
this.walletBalance = Number(res).toFixed(8); this.walletBalance = Number(res).toFixed(8);
@ -93,7 +93,7 @@ export class TipUser extends LitElement {
if (parseFloat(amount) + parseFloat(0.001) > parseFloat(this.walletBalance)) { if (parseFloat(amount) + parseFloat(0.001) > parseFloat(this.walletBalance)) {
this.sendMoneyLoading = false; this.sendMoneyLoading = false;
this.btnDisable = false; this.btnDisable = false;
let snack1string = get("grouppage.gchange63"); let snack1string = get("chatpage.cchange51");
parentEpml.request('showSnackBar', `${snack1string}`); parentEpml.request('showSnackBar', `${snack1string}`);
return false; return false;
} }
@ -101,7 +101,7 @@ export class TipUser extends LitElement {
if (parseFloat(amount) <= 0) { if (parseFloat(amount) <= 0) {
this.sendMoneyLoading = false; this.sendMoneyLoading = false;
this.btnDisable = false; this.btnDisable = false;
let snack2string = get("grouppage.gchange64"); let snack2string = get("chatpage.cchange52");
parentEpml.request('showSnackBar', `${snack2string}`); parentEpml.request('showSnackBar', `${snack2string}`);
return false; return false;
} }
@ -109,7 +109,7 @@ export class TipUser extends LitElement {
if (recipient.length === 0) { if (recipient.length === 0) {
this.sendMoneyLoading = false; this.sendMoneyLoading = false;
this.btnDisable = false; this.btnDisable = false;
let snack3string = get("grouppage.gchange65"); let snack3string = get("chatpage.cchange53");
parentEpml.request('showSnackBar', `${snack3string}`); parentEpml.request('showSnackBar', `${snack3string}`);
return false; return false;
} }
@ -239,12 +239,12 @@ export class TipUser extends LitElement {
return html` return html`
<div class="tip-user-header"> <div class="tip-user-header">
<img src="/img/qort.png" width="32" height="32"> <img src="/img/qort.png" width="32" height="32">
<p class="tip-user-header-font">${translate("grouppage.gchange55")} ${this.userName}</p> <p class="tip-user-header-font">${translate("chatpage.cchange43")} ${this.userName}</p>
</div> </div>
<div class="tip-user-body"> <div class="tip-user-body">
<p class="tip-available">${translate("grouppage.gchange59")}: ${this.walletBalance} QORT</p> <p class="tip-available">${translate("chatpage.cchange47")}: ${this.walletBalance} QORT</p>
<input id="amountInput" class="tip-input" type="number" placeholder="${translate("grouppage.gchange58")}" /> <input id="amountInput" class="tip-input" type="number" placeholder="${translate("chatpage.cchange46")}" />
<p class="tip-available">${translate("grouppage.gchange61")}: 0.001 QORT</p> <p class="tip-available">${translate("chatpage.cchange49")}: 0.001 QORT</p>
${this.sendMoneyLoading ? ${this.sendMoneyLoading ?
html` html`
<paper-progress indeterminate style="width: 100%; margin: 4px;"> <paper-progress indeterminate style="width: 100%; margin: 4px;">
@ -257,7 +257,7 @@ export class TipUser extends LitElement {
style="width: 100%; cursor: pointer" style="width: 100%; cursor: pointer"
@click=${() => this.sendQort()}> @click=${() => this.sendQort()}>
<vaadin-icon icon="vaadin:arrow-forward" slot="prefix"></vaadin-icon> <vaadin-icon icon="vaadin:arrow-forward" slot="prefix"></vaadin-icon>
${translate("grouppage.gchange62")} QORT ${translate("chatpage.cchange50")} QORT
</vaadin-button> </vaadin-button>
</div> </div>
`} `}

View File

@ -30,8 +30,10 @@ class GroupManagement extends LitElement {
return { return {
loading: { type: Boolean }, loading: { type: Boolean },
publicGroups: { type: Array }, publicGroups: { type: Array },
privateGroups: { type: Array },
joinedGroups: { type: Array }, joinedGroups: { type: Array },
groupInvites: { type: Array }, groupInvites: { type: Array },
privateGroupSearch: { type: Array },
newMembersList: { type: Array }, newMembersList: { type: Array },
newAdminsList: { type: Array }, newAdminsList: { type: Array },
newBannedList: { type: Array }, newBannedList: { type: Array },
@ -77,6 +79,7 @@ class GroupManagement extends LitElement {
toInviteMemberToGroup: { type: String }, toInviteMemberToGroup: { type: String },
toCancelInviteMemberName: { type: String }, toCancelInviteMemberName: { type: String },
toCancelInviteMemberAddress: { type: String }, toCancelInviteMemberAddress: { type: String },
searchGroupName: { type: String },
errorMessage: { type: String }, errorMessage: { type: String },
successMessage: { type: String } successMessage: { type: String }
} }
@ -410,6 +413,13 @@ class GroupManagement extends LitElement {
background: var(--white); background: var(--white);
color: var(--black); color: var(--black);
} }
#search {
width: 100%;
display: flex;
margin: auto;
align-items: center;
}
` `
} }
@ -418,8 +428,10 @@ class GroupManagement extends LitElement {
this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light' this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light'
this.selectedAddress = {} this.selectedAddress = {}
this.publicGroups = [] this.publicGroups = []
this.privateGroups = []
this.joinedGroups = [] this.joinedGroups = []
this.groupInvites = [] this.groupInvites = []
this.privateGroupSearch = []
this.newMembersList = [] this.newMembersList = []
this.newAdminsList = [] this.newAdminsList = []
this.newBannedList = [] this.newBannedList = []
@ -458,6 +470,7 @@ class GroupManagement extends LitElement {
this.toInviteMemberToGroup = '' this.toInviteMemberToGroup = ''
this.toCancelInviteMemberName = '' this.toCancelInviteMemberName = ''
this.toCancelInviteMemberAddress = '' this.toCancelInviteMemberAddress = ''
this.searchGroupName = ''
this.errorMessage = '' this.errorMessage = ''
this.successMessage = '' this.successMessage = ''
this.selectedView = { id: 'group-members', name: 'Group Members' } this.selectedView = { id: 'group-members', name: 'Group Members' }
@ -1136,6 +1149,45 @@ class GroupManagement extends LitElement {
<mwc-button style="float:right;" @click=${() => this.shadowRoot.querySelector('#createGroupDialog').show()}><mwc-icon>add</mwc-icon>${translate("grouppage.gchange2")}</mwc-button> <mwc-button style="float:right;" @click=${() => this.shadowRoot.querySelector('#createGroupDialog').show()}><mwc-icon>add</mwc-icon>${translate("grouppage.gchange2")}</mwc-button>
</div> </div>
<div class="divCard">
<h3 style="margin: 0; margin-bottom: 1em; text-align: left;">${translate("grouppage.gchange55")}</h3>
<div id="search">
<vaadin-text-field
theme="medium"
style="width: 20em"
minlength="3"
maxlength="32"
id="searchGroupName"
placeholder="${translate("grouppage.gchange56")}"
value="${this.searchGroupName}"
@keydown="${this.searchGroupListener}"
clear-button-visible
>
<vaadin-icon slot="prefix" icon="vaadin:user"></vaadin-icon>
</vaadin-text-field>&nbsp;&nbsp;<br>
<vaadin-button theme="medium" @click="${(e) => this.doGroupSearch(e)}">
<vaadin-icon icon="vaadin:search" slot="prefix"></vaadin-icon>
${translate("websitespage.schange35")}
</vaadin-button>
</div><br />
<vaadin-grid theme="large" id="priveGroupSearchGrid" ?hidden="${this.isEmptyArray(this.privateGroupSearch)}" .items="${this.privateGroupSearch}" aria-label="My Search Result" all-rows-visible>
<vaadin-grid-column width="8rem" flex-grow="0" header="${translate("grouppage.gchange54")}" path="memberCount"></vaadin-grid-column>
<vaadin-grid-column header="${translate("grouppage.gchange4")}" path="groupName"></vaadin-grid-column>
<vaadin-grid-column header="${translate("managegroup.mg42")}" .renderer=${(root, column, data) => {
if (data.item.isOpen === true) {
render(html`${translate("managegroup.mg44")}`, root)
} else {
render(html`${translate("managegroup.mg45")}`, root)
}
}}></vaadin-grid-column>
<vaadin-grid-column header="${translate("grouppage.gchange5")}" path="description"></vaadin-grid-column>
<vaadin-grid-column header="${translate("grouppage.gchange10")}" path="owner"></vaadin-grid-column>
<vaadin-grid-column width="11rem" flex-grow="0" header="${translate("grouppage.gchange7")}" .renderer=${(root, column, data) => {
render(html`<mwc-button @click=${() => this.joinGroup(data.item)}><mwc-icon>queue</mwc-icon>&nbsp;${translate("grouppage.gchange51")}</mwc-button>`, root)
}}></vaadin-grid-column>
</vaadin-grid>
</div>
<div class="divCard"> <div class="divCard">
<h3 style="margin: 0; margin-bottom: 1em; text-align: center;">${translate("grouppage.gchange3")}</h3> <h3 style="margin: 0; margin-bottom: 1em; text-align: center;">${translate("grouppage.gchange3")}</h3>
<vaadin-grid theme="large" id="joinedGroupsGrid" ?hidden="${this.isEmptyArray(this.joinedGroups)}" .items="${this.joinedGroups}" aria-label="Joined Groups" all-rows-visible> <vaadin-grid theme="large" id="joinedGroupsGrid" ?hidden="${this.isEmptyArray(this.joinedGroups)}" .items="${this.joinedGroups}" aria-label="Joined Groups" all-rows-visible>
@ -1150,7 +1202,9 @@ class GroupManagement extends LitElement {
}}></vaadin-grid-column> }}></vaadin-grid-column>
</vaadin-grid> </vaadin-grid>
${this.isEmptyArray(this.joinedGroups) ? html` ${this.isEmptyArray(this.joinedGroups) ? html`
<span style="color: var(--black);">${translate("grouppage.gchange8")}</span> <div style="text-align: center;">
<span style="color: var(--black);">${translate("grouppage.gchange8")}</span>
</div>
`: ''} `: ''}
</div> </div>
@ -1175,7 +1229,9 @@ class GroupManagement extends LitElement {
}}></vaadin-grid-column> }}></vaadin-grid-column>
</vaadin-grid> </vaadin-grid>
${this.isEmptyArray(this.groupInvites) ? html` ${this.isEmptyArray(this.groupInvites) ? html`
<span style="color: var(--black);">${translate("managegroup.mg35")}</span> <div style="text-align: center;">
<span style="color: var(--black);">${translate("managegroup.mg35")}</span>
</div>
`: ''} `: ''}
</div> </div>
@ -1477,6 +1533,22 @@ class GroupManagement extends LitElement {
${translate("general.close")} ${translate("general.close")}
</mwc-button> </mwc-button>
</mwc-dialog> </mwc-dialog>
<mwc-dialog id="privateGroupErrorDialog" scrimClickAction="" escapeKeyAction="">
<div style="text-align: center;">
<mwc-icon class="error-icon">warning</mwc-icon>
<h2>${translate("grouppage.gchange57")}</h2>
<h4>${translate("grouppage.gchange58")}</h4>
</div>
<mwc-button
slot="primaryAction"
@click=${() => this.closePrivateGroupErrorDialog()}
class="red"
>
${translate("general.close")}
</mwc-button>
</mwc-dialog>
</div> </div>
` `
} }
@ -1504,6 +1576,14 @@ class GroupManagement extends LitElement {
return myGs return myGs
} }
const getPrivateGroups = async () => {
let privateG = await parentEpml.request('apiCall', {
url: `/groups?limit=0&reverse=true`
})
let myPgs = privateG.filter(myP => myP.isOpen === false)
return myPgs
}
const getJoinedGroups = async () => { const getJoinedGroups = async () => {
let joinedG = await parentEpml.request('apiCall', { let joinedG = await parentEpml.request('apiCall', {
url: `/groups/member/${this.selectedAddress.address}` url: `/groups/member/${this.selectedAddress.address}`
@ -1563,13 +1643,15 @@ class GroupManagement extends LitElement {
const getOpen_JoinedGroups = async () => { const getOpen_JoinedGroups = async () => {
let _joinedGroups = await getJoinedGroups() let _joinedGroups = await getJoinedGroups()
let _publicGroups = await getOpenPublicGroups() let _publicGroups = await getOpenPublicGroups()
let _privateGroups = await getPrivateGroups()
let results = _publicGroups.filter(myOpenGroup => { let results = _publicGroups.filter(myOpenGroup => {
let value = _joinedGroups.some(myJoinedGroup => myOpenGroup.groupId === myJoinedGroup.groupId) let value = _joinedGroups.some(myJoinedGroup => myOpenGroup.groupId === myJoinedGroup.groupId)
return !value return !value
}); });
this.publicGroups = results this.publicGroups = results
this.privateGroups = _privateGroups
this.joinedGroups = _joinedGroups this.joinedGroups = _joinedGroups
setTimeout(getOpen_JoinedGroups, 30000) setTimeout(getOpen_JoinedGroups, 60000)
} }
window.addEventListener("contextmenu", (event) => { window.addEventListener("contextmenu", (event) => {
@ -1723,6 +1805,36 @@ class GroupManagement extends LitElement {
} }
} }
searchGroupListener(e) {
if (e.key === 'Enter') {
this.doGroupSearch(e)
}
}
doGroupSearch(e) {
this.renderSearchResult()
}
renderSearchResult() {
this.privateGroupSearch = []
let searchGroupName = this.shadowRoot.getElementById('searchGroupName').value
if (searchGroupName.length === 0) {
let err1string = get("websitespage.schange34")
parentEpml.request('showSnackBar', `${err1string}`)
} else {
this.privateGroupSearch = this.privateGroups.filter(myS => myS.groupName === searchGroupName)
if (this.privateGroupSearch.length === 0) {
this.shadowRoot.querySelector('#privateGroupErrorDialog').show()
}
}
}
closePrivateGroupErrorDialog() {
this.shadowRoot.querySelector('#privateGroupErrorDialog').close()
this.shadowRoot.getElementById('searchGroupName').value = ''
this.privateGroupSearch = []
}
renderBanButton(groupObj) { renderBanButton(groupObj) {
return html`<mwc-button class="warning" @click=${() => this.openCreateBanMemberDialog(groupObj)}><mwc-icon>create</mwc-icon>&nbsp;${translate("managegroup.mg6")}</mwc-button>` return html`<mwc-button class="warning" @click=${() => this.openCreateBanMemberDialog(groupObj)}><mwc-icon>create</mwc-icon>&nbsp;${translate("managegroup.mg6")}</mwc-button>`
} }
@ -1940,6 +2052,7 @@ class GroupManagement extends LitElement {
closeFieldErrorDialog() { closeFieldErrorDialog() {
this.shadowRoot.querySelector('#fieldErrorDialog').close() this.shadowRoot.querySelector('#fieldErrorDialog').close()
} }
async unitCreateFee() { async unitCreateFee() {
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] 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 nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port
@ -3179,4 +3292,4 @@ class GroupManagement extends LitElement {
} }
} }
window.customElements.define('group-management', GroupManagement) window.customElements.define('group-management', GroupManagement)

View File

@ -316,6 +316,7 @@ export const qchatStyles = css`
font-family: Roboto, sans-serif; font-family: Roboto, sans-serif;
font-size: 15px; font-size: 15px;
color: var(--chat-bubble-msg-color); color: var(--chat-bubble-msg-color);
box-sizing: border-box;
} }
.name-input::selection { .name-input::selection {

View File

@ -280,7 +280,7 @@ class NameRegistration extends LitElement {
} }
async uploadAvatar(nameObj) { async uploadAvatar(nameObj) {
let name = nameObj.name let name = encodeURIComponent(nameObj.name)
window.location.href = `../qdn/publish/index.html?service=THUMBNAIL&identifier=qortal_avatar&name=${name}&uploadType=file&category=Avatar&showName=false&showService=false&showIdentifier=false` window.location.href = `../qdn/publish/index.html?service=THUMBNAIL&identifier=qortal_avatar&name=${name}&uploadType=file&category=Avatar&showName=false&showService=false&showIdentifier=false`
} }