diff --git a/pages/dao.vue b/pages/dao.vue
index 386aadd..f55f371 100644
--- a/pages/dao.vue
+++ b/pages/dao.vue
@@ -134,8 +134,30 @@
EffectDAO Members
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -151,12 +173,16 @@
...
Joined {{ $moment(member.registration_time).fromNow() }}
+ EFX: {{ member.efxStaked.toFixed(2) }}
+
+ No members match your search
+
Loading members..
@@ -199,6 +225,9 @@ export default {
moreMembers: true,
nextKey: null,
constitutionMembers: null,
+ memberSearch: '',
+ sortField: 'votes',
+ sortDir: 'desc',
highGuardList: [
{ account: 'cryptonode42', agreedtermsversion: 1, registration_time: '2021-03-07T14:58:47' },
@@ -228,6 +257,36 @@ export default {
},
signedLastConstitution () {
return this.$wallet.signedConstitutionVersion === this.constitutionVersion
+ },
+ sortedMembers () {
+ if (!this.constitutionMembers) return []
+ const query = (this.memberSearch || '').toLowerCase().trim()
+ let members = this.constitutionMembers
+ // Filter
+ if (query) {
+ members = members.filter(m => (m.account || '').toLowerCase().includes(query))
+ }
+ // Sort
+ const sorted = [...members]
+ const field = this.sortField
+ const dir = this.sortDir === 'asc' ? 1 : -1
+ sorted.sort((a, b) => {
+ let aVal = a[field]
+ let bVal = b[field]
+ // Handle dates
+ if (field === 'registration_time') {
+ aVal = aVal ? new Date(aVal).getTime() : 0
+ bVal = bVal ? new Date(bVal).getTime() : 0
+ }
+ // Handle undefined/null - sort to end
+ if (aVal == null) return 1
+ if (bVal == null) return -1
+ if (typeof aVal === 'string') {
+ return dir * aVal.localeCompare(bVal)
+ }
+ return dir * (aVal - bVal)
+ })
+ return sorted
}
},