add sorting to voting plugin

This commit is contained in:
janis
2023-10-24 10:14:06 +02:00
parent 0134e984f0
commit 8750ea54a9
2 changed files with 43 additions and 2 deletions

View File

@@ -94,11 +94,19 @@
<div v-if="votingDetails.display" class="wrapper"> <div v-if="votingDetails.display" class="wrapper">
<h1>Voting on {{ votingDetails.display ?? 'untitled' }}</h1> <h1>Voting on {{ votingDetails.display ?? 'untitled' }}</h1>
<p v-if="votingDetails.description" class="comment">{{ votingDetails.description }}</p> <p v-if="votingDetails.description" class="comment">{{ votingDetails.description }}</p>
<div style="margin-bottom: 1%;" v-if="votingDetails.allowAdding"> <div style="margin-bottom: 0.5%;" v-if="votingDetails.allowAdding">
<button onclick="location.href = '/'">Back to website</button> <button onclick="location.href = '/'">Back to website</button>
<button @click="addSuggestion();">Add suggestion</button> <button @click="addSuggestion();">Add suggestion</button>
</div> </div>
<div v-for="entry in entries" class="entry"> <select v-model="sorting" style="margin-bottom: 1%;">
<option value="newest">Newest</option>
<option value="oldest">Oldest</option>
<option value="nameUp">Alphabetically (A-Z)</option>
<option value="nameDown">Alphabetically (Z-A)</option>
<option value="mostVoted">Most popular</option>
<option value="leastVoted">Least popular</option>
</select>
<div v-for="entry in orderedVotes" class="entry">
<h3>{{ entry.title }}</h3> <h3>{{ entry.title }}</h3>
<p>{{ entry.comment }}</p> <p>{{ entry.comment }}</p>
<div class="voting-wrapper"> <div class="voting-wrapper">

View File

@@ -10,8 +10,41 @@ createApp( {
votedOn: {}, votedOn: {},
hasLoadedBasics: false, hasLoadedBasics: false,
hasLoadedVotes: false, hasLoadedVotes: false,
sorting: 'newest',
}; };
}, },
computed: {
orderedVotes() {
if ( this.sorting === 'oldest' ) {
return Object.values( this.entries );
} else if ( this.sorting === 'newest' ) {
const ent = Object.keys( this.entries ).reverse();
let ret = [];
for ( let entry in ent ) {
ret.push( this.entries[ ent[ entry ] ] );
}
return ret;
} else {
let ent = Object.keys( this.entries ).sort( ( a, b ) => {
if ( this.sorting === 'nameUp' ) {
return this.entries[ a ].title.localeCompare( this.entries[ b ].title );
} else if ( this.sorting === 'nameDown' ) {
return this.entries[ b ].title.localeCompare( this.entries[ a ].title );
} else if ( this.sorting === 'mostVoted' ) {
return this.entries[ b ].count - this.entries[ a ].count;
} else if ( this.sorting === 'leastVoted' ) {
return this.entries[ a ].count - this.entries[ b ].count;
}
} );
console.log( ent );
let ret = [];
for ( let entry in ent ) {
ret.push( this.entries[ ent[ entry ] ] );
}
return ret;
}
}
},
methods: { methods: {
getData() { getData() {
fetch( '/polls/get/' + location.pathname.substring( 7 ) ).then( response => { fetch( '/polls/get/' + location.pathname.substring( 7 ) ).then( response => {