|
|
|
@ -38,6 +38,7 @@ class GroupManagement extends LitElement {
|
|
|
|
|
newAdminsList: { type: Array }, |
|
|
|
|
newBannedList: { type: Array }, |
|
|
|
|
newGroupInvitesList: { type: Array }, |
|
|
|
|
newGroupJoinsList: { type: Array }, |
|
|
|
|
recipientPublicKey: { type: String }, |
|
|
|
|
selectedAddress: { type: Object }, |
|
|
|
|
manageGroupObj: { type: Object }, |
|
|
|
@ -155,6 +156,11 @@ class GroupManagement extends LitElement {
|
|
|
|
|
color: red; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.success-icon { |
|
|
|
|
font-size: 48px; |
|
|
|
|
color: #198754; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.close-icon { |
|
|
|
|
font-size: 36px; |
|
|
|
|
} |
|
|
|
@ -436,6 +442,7 @@ class GroupManagement extends LitElement {
|
|
|
|
|
this.newAdminsList = [] |
|
|
|
|
this.newBannedList = [] |
|
|
|
|
this.newGroupInvitesList = [] |
|
|
|
|
this.newGroupJoinsList = [] |
|
|
|
|
this.manageGroupObj = {} |
|
|
|
|
this.joinGroupObj = {} |
|
|
|
|
this.leaveGroupObj = {} |
|
|
|
@ -836,6 +843,7 @@ class GroupManagement extends LitElement {
|
|
|
|
|
|
|
|
|
|
groupInviteTemplate() { |
|
|
|
|
return html` |
|
|
|
|
<h3 style="margin: 0; margin-bottom: 1em; text-align: center;">${translate("managegroup.mg36")}</h3> |
|
|
|
|
<vaadin-grid theme="large" id="groupInvitesGrid" ?hidden="${this.isEmptyArray(this.newGroupInvitesList)}" .items="${this.newGroupInvitesList}" aria-label="Group Invites" all-rows-visible> |
|
|
|
|
<vaadin-grid-column |
|
|
|
|
width="6rem" |
|
|
|
@ -880,6 +888,54 @@ class GroupManagement extends LitElement {
|
|
|
|
|
${this.isEmptyArray(this.newGroupInvitesList) ? html` |
|
|
|
|
<span style="color: var(--black);">${translate("managegroup.mg35")}</span> |
|
|
|
|
` : html``}
|
|
|
|
|
<br><hr><br> |
|
|
|
|
<h3 style="margin: 0; margin-bottom: 1em; text-align: center;">${translate("managegroup.mg53")}</h3> |
|
|
|
|
<vaadin-grid theme="large" id="groupJoinsGrid" ?hidden="${this.isEmptyArray(this.newGroupJoinsList)}" .items="${this.newGroupJoinsList}" aria-label="Group Join Requests" all-rows-visible> |
|
|
|
|
<vaadin-grid-column |
|
|
|
|
width="6rem" |
|
|
|
|
flex-grow="0" |
|
|
|
|
header="${translate("websitespage.schange5")}" |
|
|
|
|
.renderer=${(root, column, data) => { |
|
|
|
|
render(html`${this.renderAvatar(data.item)}`, root) |
|
|
|
|
}} |
|
|
|
|
></vaadin-grid-column> |
|
|
|
|
<vaadin-grid-column |
|
|
|
|
auto-width |
|
|
|
|
resizable |
|
|
|
|
header="${translate("puzzlepage.pchange4")}" |
|
|
|
|
.renderer=${(root, column, data) => { |
|
|
|
|
render(html`${data.item.name}`, root) |
|
|
|
|
}} |
|
|
|
|
></vaadin-grid-column> |
|
|
|
|
<vaadin-grid-column |
|
|
|
|
auto-width |
|
|
|
|
resizable |
|
|
|
|
header="${translate("login.address")}" |
|
|
|
|
.renderer=${(root, column, data) => { |
|
|
|
|
render(html`${data.item.owner}`, root) |
|
|
|
|
}} |
|
|
|
|
></vaadin-grid-column> |
|
|
|
|
<vaadin-grid-column |
|
|
|
|
width="12rem" |
|
|
|
|
flex-grow="0" |
|
|
|
|
header="${translate("websitespage.schange8")}" |
|
|
|
|
.renderer=${(root, column, data) => { |
|
|
|
|
render(html`${this.renderConfirmRequestButton(data.item)}`, root) |
|
|
|
|
}} |
|
|
|
|
></vaadin-grid-column> |
|
|
|
|
<vaadin-grid-column |
|
|
|
|
width="12rem" |
|
|
|
|
flex-grow="0" |
|
|
|
|
.renderer=${(root, column, data) => { |
|
|
|
|
render(html`${this.renderDeclineRequestButton(data.item)}`, root) |
|
|
|
|
}} |
|
|
|
|
></vaadin-grid-column> |
|
|
|
|
</vaadin-grid> |
|
|
|
|
${this.isEmptyArray(this.newGroupJoinsList) ? html` |
|
|
|
|
<span style="color: var(--black);">${translate("managegroup.mg54")}</span> |
|
|
|
|
` : html``}
|
|
|
|
|
<br> |
|
|
|
|
<hr> |
|
|
|
|
<div style="padding-top: 20px;"> |
|
|
|
|
<vaadin-button theme="primary medium" @click=${() => this.openInviteMemberToGroupDialog()}> |
|
|
|
|
${translate("managegroup.mg2")} |
|
|
|
@ -1033,6 +1089,72 @@ class GroupManagement extends LitElement {
|
|
|
|
|
${translate("general.close")} |
|
|
|
|
</mwc-button> |
|
|
|
|
</mwc-dialog> |
|
|
|
|
|
|
|
|
|
<mwc-dialog id="successJoinDialog" scrimClickAction="" escapeKeyAction=""> |
|
|
|
|
<div class="card-container"> |
|
|
|
|
<mwc-icon class="success-icon">group_add</mwc-icon> |
|
|
|
|
<h2>${translate("managegroup.mg57")}</h2> |
|
|
|
|
<h4>${translate("walletpage.wchange43")}</h4> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<mwc-button |
|
|
|
|
slot="primaryAction" |
|
|
|
|
@click=${() => this.closeSuccessJoinDialog()} |
|
|
|
|
class="red" |
|
|
|
|
> |
|
|
|
|
${translate("general.close")} |
|
|
|
|
</mwc-button> |
|
|
|
|
</mwc-dialog> |
|
|
|
|
|
|
|
|
|
<mwc-dialog id="errorJoinDialog" scrimClickAction="" escapeKeyAction=""> |
|
|
|
|
<div class="card-container"> |
|
|
|
|
<mwc-icon class="error-icon">warning</mwc-icon> |
|
|
|
|
<h2>${translate("managegroup.mg58")}</h2> |
|
|
|
|
<h4>${this.errorMessage}</h4> |
|
|
|
|
<h4>${translate("walletpage.wchange44")}</h4> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<mwc-button |
|
|
|
|
slot="primaryAction" |
|
|
|
|
@click=${() => this.closeErrorJoinDialog()} |
|
|
|
|
class="red" |
|
|
|
|
> |
|
|
|
|
${translate("general.close")} |
|
|
|
|
</mwc-button> |
|
|
|
|
</mwc-dialog> |
|
|
|
|
|
|
|
|
|
<mwc-dialog id="cancelSuccessJoinDialog" scrimClickAction="" escapeKeyAction=""> |
|
|
|
|
<div class="card-container"> |
|
|
|
|
<mwc-icon class="success-icon">person_remove</mwc-icon> |
|
|
|
|
<h2>${translate("managegroup.mg59")}</h2> |
|
|
|
|
<h4>${translate("walletpage.wchange43")}</h4> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<mwc-button |
|
|
|
|
slot="primaryAction" |
|
|
|
|
@click=${() => this.closeCancelSuccessJoinDialog()} |
|
|
|
|
class="red" |
|
|
|
|
> |
|
|
|
|
${translate("general.close")} |
|
|
|
|
</mwc-button> |
|
|
|
|
</mwc-dialog> |
|
|
|
|
|
|
|
|
|
<mwc-dialog id="cancelErrorJoinDialog" scrimClickAction="" escapeKeyAction=""> |
|
|
|
|
<div class="card-container"> |
|
|
|
|
<mwc-icon class="error-icon">warning</mwc-icon> |
|
|
|
|
<h2>${translate("managegroup.mg58")}</h2> |
|
|
|
|
<h4>${this.errorMessage}</h4> |
|
|
|
|
<h4>${translate("walletpage.wchange44")}</h4> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<mwc-button |
|
|
|
|
slot="primaryAction" |
|
|
|
|
@click=${() => this.closeCancelErrorJoinDialog()} |
|
|
|
|
class="red" |
|
|
|
|
> |
|
|
|
|
${translate("general.close")} |
|
|
|
|
</mwc-button> |
|
|
|
|
</mwc-dialog> |
|
|
|
|
` |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1986,6 +2108,38 @@ class GroupManagement extends LitElement {
|
|
|
|
|
this.errorMessage = '' |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
renderConfirmRequestButton(joinObj) { |
|
|
|
|
return html`<mwc-button class="green" @click=${() => this.createAcceptJoinGroupMember(joinObj)}><mwc-icon>add_task</mwc-icon> ${translate("transpage.tchange3")}</mwc-button>` |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
renderDeclineRequestButton(joinObj) { |
|
|
|
|
return html`<mwc-button class="red" @click=${() => this.kickJoinGroupMember(joinObj)}><mwc-icon>cancel</mwc-icon> ${translate("transpage.tchange2")}</mwc-button>` |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
closeSuccessJoinDialog() { |
|
|
|
|
this.shadowRoot.querySelector('#successJoinDialog').close() |
|
|
|
|
this.successMessage = '' |
|
|
|
|
this.errorMessage = '' |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
closeErrorJoinDialog() { |
|
|
|
|
this.shadowRoot.querySelector('#errorJoinDialog').close() |
|
|
|
|
this.successMessage = '' |
|
|
|
|
this.errorMessage = '' |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
closeCancelSuccessJoinDialog() { |
|
|
|
|
this.shadowRoot.querySelector('#cancelSuccessJoinDialog').close() |
|
|
|
|
this.successMessage = '' |
|
|
|
|
this.errorMessage = '' |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
closeCancelErrorJoinDialog() { |
|
|
|
|
this.shadowRoot.querySelector('#cancelErrorJoinDialog').close() |
|
|
|
|
this.successMessage = '' |
|
|
|
|
this.errorMessage = '' |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
openMemberInfo(inviteGroupId) { |
|
|
|
|
const _inviteMemberInfo = this.shadowRoot.getElementById('toInviteMemberToGroup').value |
|
|
|
|
const _nviteMemberTime = this.shadowRoot.getElementById("inviteMemberTime").value |
|
|
|
@ -2361,6 +2515,57 @@ class GroupManagement extends LitElement {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
async getNewGroupJoinList(theGroup) { |
|
|
|
|
let callGroupID = theGroup |
|
|
|
|
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] |
|
|
|
|
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port |
|
|
|
|
|
|
|
|
|
let joinObj = [] |
|
|
|
|
this.groupJoinMembers = [] |
|
|
|
|
|
|
|
|
|
await parentEpml.request('apiCall', { |
|
|
|
|
url: `/groups/joinrequests/${callGroupID}` |
|
|
|
|
}).then(res => { |
|
|
|
|
this.groupJoinMembers = res |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
if (this.groupJoinMembers.length === 0) { |
|
|
|
|
return |
|
|
|
|
} else { |
|
|
|
|
this.groupJoinMembers.map(a => { |
|
|
|
|
let callTheJoinMember = a.joiner |
|
|
|
|
let callSingleJoinMemberUrl = `${nodeUrl}/names/address/${callTheJoinMember}` |
|
|
|
|
fetch(callSingleJoinMemberUrl).then(res => { |
|
|
|
|
return res.json() |
|
|
|
|
}).then(jsonRes => { |
|
|
|
|
if (jsonRes.length) { |
|
|
|
|
jsonRes.map(b => { |
|
|
|
|
const joinObjToAdd = { |
|
|
|
|
groupId: a.groupId, |
|
|
|
|
name: b.name, |
|
|
|
|
owner: b.owner, |
|
|
|
|
time: '86400', |
|
|
|
|
reason: 'NotAllowed' |
|
|
|
|
} |
|
|
|
|
joinObj.push(joinObjToAdd) |
|
|
|
|
}) |
|
|
|
|
} else { |
|
|
|
|
const noName = 'No registered name' |
|
|
|
|
const noNameObj = { |
|
|
|
|
groupId: a.groupId, |
|
|
|
|
name: noName, |
|
|
|
|
owner: a.joiner, |
|
|
|
|
time: '86400', |
|
|
|
|
reason: 'NotAllowed' |
|
|
|
|
} |
|
|
|
|
joinObj.push(noNameObj) |
|
|
|
|
} |
|
|
|
|
this.newGroupJoinsList = joinObj |
|
|
|
|
}) |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
closeManageGroupOwnerDialog() { |
|
|
|
|
this.resetDefaultSettings() |
|
|
|
|
this.shadowRoot.getElementById('manageGroupOwnerDialog').close() |
|
|
|
@ -2389,6 +2594,7 @@ class GroupManagement extends LitElement {
|
|
|
|
|
await this.getNewMemberList(groupObj.groupId) |
|
|
|
|
await this.getNewBannedList(groupObj.groupId) |
|
|
|
|
await this.getNewGroupInvitesList(groupObj.groupId) |
|
|
|
|
await this.getNewGroupJoinList(groupObj.groupId) |
|
|
|
|
await manageGroupDelay(1000) |
|
|
|
|
this.shadowRoot.getElementById('manageGroupOwnerDialog').open() |
|
|
|
|
} |
|
|
|
@ -3057,6 +3263,148 @@ class GroupManagement extends LitElement {
|
|
|
|
|
validateReceiver() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
async createAcceptJoinGroupMember(joinObj) { |
|
|
|
|
const member = joinObj.owner |
|
|
|
|
const inviteTime = joinObj.time |
|
|
|
|
const inviteGroupMemberFeeInput = this.inviteGroupMemberFee |
|
|
|
|
const theGroupId = joinObj.groupId |
|
|
|
|
this.isLoading = true |
|
|
|
|
this.btnDisable = true |
|
|
|
|
|
|
|
|
|
const getLastRef = async () => { |
|
|
|
|
let myRef = await parentEpml.request('apiCall', { |
|
|
|
|
type: 'api', |
|
|
|
|
url: `/addresses/lastreference/${this.selectedAddress.address}` |
|
|
|
|
}) |
|
|
|
|
return myRef |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const validateReceiver = async () => { |
|
|
|
|
let lastRef = await getLastRef() |
|
|
|
|
let myTransaction = await makeTransactionRequest(lastRef) |
|
|
|
|
getTxnRequestResponse(myTransaction) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const makeTransactionRequest = async (lastRef) => { |
|
|
|
|
const myMember = member |
|
|
|
|
const myLastRef = lastRef |
|
|
|
|
const myGroupId = theGroupId |
|
|
|
|
const myFee = inviteGroupMemberFeeInput |
|
|
|
|
const myInviteTime = inviteTime |
|
|
|
|
const myInviteMemberDialog1 = get("managegroup.mg55") |
|
|
|
|
const myInviteMemberDialog2 = get("managegroup.mg56") |
|
|
|
|
|
|
|
|
|
let myTxnrequest = await parentEpml.request('transaction', { |
|
|
|
|
type: 29, |
|
|
|
|
nonce: this.selectedAddress.nonce, |
|
|
|
|
params: { |
|
|
|
|
fee: myFee, |
|
|
|
|
recipient: myMember, |
|
|
|
|
rGroupId: myGroupId, |
|
|
|
|
rInviteTime: myInviteTime, |
|
|
|
|
lastReference: myLastRef, |
|
|
|
|
inviteMemberDialog1: myInviteMemberDialog1, |
|
|
|
|
inviteMemberDialog2: myInviteMemberDialog2 |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
return myTxnrequest |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const getTxnRequestResponse = (txnResponse) => { |
|
|
|
|
if (txnResponse.success === false && txnResponse.message) { |
|
|
|
|
this.errorMessage = txnResponse.message |
|
|
|
|
this.shadowRoot.querySelector('#errorJoinDialog').show() |
|
|
|
|
this.isLoading = false |
|
|
|
|
this.btnDisable = false |
|
|
|
|
throw new Error(txnResponse) |
|
|
|
|
} else if (txnResponse.success === true && !txnResponse.data.error) { |
|
|
|
|
this.shadowRoot.querySelector('#successJoinDialog').show() |
|
|
|
|
this.errorMessage = '' |
|
|
|
|
this.successMessage = this.renderSuccessText() |
|
|
|
|
this.isLoading = false |
|
|
|
|
this.btnDisable = false |
|
|
|
|
} else { |
|
|
|
|
this.errorMessage = txnResponse.data.message |
|
|
|
|
this.shadowRoot.querySelector('#errorJoinDialog').show() |
|
|
|
|
this.isLoading = false |
|
|
|
|
this.btnDisable = false |
|
|
|
|
throw new Error(txnResponse) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
validateReceiver() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
async kickJoinGroupMember(joinObj) { |
|
|
|
|
const member = joinObj.owner |
|
|
|
|
const reason = joinObj.reason |
|
|
|
|
const kickGroupMemberFeeInput = this.kickGroupMemberFee |
|
|
|
|
const theGroupId = joinObj.groupId |
|
|
|
|
this.isLoading = true |
|
|
|
|
this.btnDisable = true |
|
|
|
|
|
|
|
|
|
const getLastRef = async () => { |
|
|
|
|
let myRef = await parentEpml.request('apiCall', { |
|
|
|
|
type: 'api', |
|
|
|
|
url: `/addresses/lastreference/${this.selectedAddress.address}` |
|
|
|
|
}) |
|
|
|
|
return myRef |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const validateReceiver = async () => { |
|
|
|
|
let lastRef = await getLastRef() |
|
|
|
|
let myTransaction = await makeTransactionRequest(lastRef) |
|
|
|
|
getTxnRequestResponse(myTransaction) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const makeTransactionRequest = async (lastRef) => { |
|
|
|
|
const myMember = member |
|
|
|
|
const myLastRef = lastRef |
|
|
|
|
const myGroupId = theGroupId |
|
|
|
|
const myFee = kickGroupMemberFeeInput |
|
|
|
|
const myReason = reason |
|
|
|
|
const myKickMemberDialog1 = get("managegroup.mg60") |
|
|
|
|
const myKickMemberDialog2 = get("managegroup.mg61") |
|
|
|
|
|
|
|
|
|
let myTxnrequest = await parentEpml.request('transaction', { |
|
|
|
|
type: 28, |
|
|
|
|
nonce: this.selectedAddress.nonce, |
|
|
|
|
params: { |
|
|
|
|
fee: myFee, |
|
|
|
|
recipient: myMember, |
|
|
|
|
rGroupId: myGroupId, |
|
|
|
|
rBanReason: myReason, |
|
|
|
|
lastReference: myLastRef, |
|
|
|
|
kickMemberDialog1: myKickMemberDialog1, |
|
|
|
|
kickMemberDialog2: myKickMemberDialog2 |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
return myTxnrequest |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const getTxnRequestResponse = (txnResponse) => { |
|
|
|
|
if (txnResponse.success === false && txnResponse.message) { |
|
|
|
|
this.errorMessage = txnResponse.message |
|
|
|
|
this.shadowRoot.querySelector('#cancelErrorJoinDialog').show() |
|
|
|
|
this.isLoading = false |
|
|
|
|
this.btnDisable = false |
|
|
|
|
throw new Error(txnResponse) |
|
|
|
|
} else if (txnResponse.success === true && !txnResponse.data.error) { |
|
|
|
|
this.shadowRoot.querySelector('#cancelSuccessJoinDialog').show() |
|
|
|
|
this.errorMessage = '' |
|
|
|
|
this.successMessage = this.renderSuccessText() |
|
|
|
|
this.isLoading = false |
|
|
|
|
this.btnDisable = false |
|
|
|
|
} else { |
|
|
|
|
this.errorMessage = txnResponse.data.message |
|
|
|
|
this.shadowRoot.querySelector('#cancelErrorJoinDialog').show() |
|
|
|
|
this.isLoading = false |
|
|
|
|
this.btnDisable = false |
|
|
|
|
throw new Error(txnResponse) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
validateReceiver() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
async addGroupAdmin(groupId) { |
|
|
|
|
const member = this.shadowRoot.getElementById('memberToAdmin').value |
|
|
|
|
const addGroupAdminFeeInput = this.addGroupAdminFee |
|
|
|
|