diff --git a/pages/dao.vue b/pages/dao.vue
index 386aadd..27a905e 100644
--- a/pages/dao.vue
+++ b/pages/dao.vue
@@ -134,8 +134,42 @@
EffectDAO Members
+
+
+
+
+
+
+
+
+
+
+ Showing {{ displayedMembers.length }} of {{ constitutionMembers.length }} loaded members
+
+
-
+
@@ -152,10 +186,17 @@
Joined {{ $moment(member.registration_time).fromNow() }}
+
+ EFX: {{ formatMemberNumber(member.efxStaked) }}
+ NFX: {{ formatMemberNumber(member.nfxStaked) }}
+
+
+ No matching members
+
Loading members..
@@ -199,6 +240,8 @@ export default {
moreMembers: true,
nextKey: null,
constitutionMembers: null,
+ memberSearch: '',
+ memberSort: 'votes',
highGuardList: [
{ account: 'cryptonode42', agreedtermsversion: 1, registration_time: '2021-03-07T14:58:47' },
@@ -228,6 +271,32 @@ export default {
},
signedLastConstitution () {
return this.$wallet.signedConstitutionVersion === this.constitutionVersion
+ },
+ displayedMembers () {
+ if (!this.constitutionMembers) {
+ return []
+ }
+
+ const search = this.memberSearch.trim().toLowerCase()
+ const members = this.constitutionMembers.filter((member) => {
+ return !search || member.account.toLowerCase().includes(search)
+ })
+
+ return members.slice().sort((a, b) => {
+ if (this.memberSort === 'account') {
+ return a.account.localeCompare(b.account, undefined, { sensitivity: 'base' })
+ }
+ if (this.memberSort === 'joined') {
+ return this.memberTime(b) - this.memberTime(a)
+ }
+ if (this.memberSort === 'efx') {
+ return this.memberNumber(b.efxStaked) - this.memberNumber(a.efxStaked)
+ }
+ if (this.memberSort === 'nfx') {
+ return this.memberNumber(b.nfxStaked) - this.memberNumber(a.nfxStaked)
+ }
+ return this.memberNumber(b.votes) - this.memberNumber(a.votes)
+ })
}
},
@@ -244,6 +313,17 @@ export default {
}
return array
},
+ memberNumber (value) {
+ const parsedValue = typeof value === 'number' ? value : parseFloat(value)
+ return Number.isFinite(parsedValue) ? parsedValue : 0
+ },
+ memberTime (member) {
+ const time = new Date(member.registration_time).getTime()
+ return Number.isFinite(time) ? time : 0
+ },
+ formatMemberNumber (value) {
+ return this.memberNumber(value).toLocaleString(undefined, { maximumFractionDigits: 2 })
+ },
async init () {
this.loading = true
this.loadingMembers = true
@@ -491,6 +571,11 @@ small a:first-child {
margin-bottom: 8px;
display: block;
}
+ .member-stake {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 12px;
+ }
.image {
img {
border-radius: 6px;