From eebd9fe66606d82d065e323bfdbffe2c9d53f389 Mon Sep 17 00:00:00 2001 From: ManhND <260794539+ManhND226677@users.noreply.github.com> Date: Tue, 12 May 2026 11:52:11 +0700 Subject: [PATCH 1/2] Add DAO member filtering --- pages/dao.vue | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 80 insertions(+), 1 deletion(-) diff --git a/pages/dao.vue b/pages/dao.vue index 386aadd..89e4f60 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) + } + 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,16 @@ export default { } return array }, + memberNumber (value) { + return Number.isFinite(value) ? value : 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 From fddea3a49f5b2910e7c6267d2bc73c5e6c7bd95f Mon Sep 17 00:00:00 2001 From: ManhND <260794539+ManhND226677@users.noreply.github.com> Date: Tue, 12 May 2026 16:14:42 +0700 Subject: [PATCH 2/2] Polish DAO member sort parsing and stake display --- pages/dao.vue | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/pages/dao.vue b/pages/dao.vue index 89e4f60..27a905e 100644 --- a/pages/dao.vue +++ b/pages/dao.vue @@ -284,7 +284,7 @@ export default { return members.slice().sort((a, b) => { if (this.memberSort === 'account') { - return a.account.localeCompare(b.account) + return a.account.localeCompare(b.account, undefined, { sensitivity: 'base' }) } if (this.memberSort === 'joined') { return this.memberTime(b) - this.memberTime(a) @@ -314,7 +314,8 @@ export default { return array }, memberNumber (value) { - return Number.isFinite(value) ? value : 0 + const parsedValue = typeof value === 'number' ? value : parseFloat(value) + return Number.isFinite(parsedValue) ? parsedValue : 0 }, memberTime (member) { const time = new Date(member.registration_time).getTime() @@ -570,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;