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;