diff --git a/src/pages/trails/ballots/components/BallotListItem.vue b/src/pages/trails/ballots/components/BallotListItem.vue index 1df7667..dab1414 100644 --- a/src/pages/trails/ballots/components/BallotListItem.vue +++ b/src/pages/trails/ballots/components/BallotListItem.vue @@ -79,6 +79,14 @@ export default { 100; return this.trunc(total, 2); }, + updateVotedChipVisibility() { + this.$nextTick(() => { + const votedChip = this.$refs.votedChip; + if (votedChip) { + votedChip.style.display = this.userVotes[this.ballot.ballot_name] ? 'flex' : 'none'; + } + }); + }, async onCastVote({ options, option, ballotName }) { this.voting = true; await this.castVote({ @@ -109,9 +117,12 @@ div img(:src="`statics/app-icons/inactive-bgr-icon2.png`").bgr-icon2 div.column.items-start.absolute-top-left ballot-chip(:type="ballot.category", :isBallotOpened="isBallotOpened") - ballot-chip(:type="'voted'", - :isBallotOpened="isBallotOpened", - :class="userVotes[ballot.ballot_name] ? '' : 'hidden'") + ballot-chip( + :type="'voted'" + :isBallotOpened="isBallotOpened" + :class="userVotes[ballot.ballot_name] ? '' : 'hidden'" + v-if="isBallotOpened" + ) q-separator.card-separator-vertical(vertical inset) diff --git a/src/pages/trails/ballots/view/BallotView.vue b/src/pages/trails/ballots/view/BallotView.vue index 080fc70..7a083d0 100644 --- a/src/pages/trails/ballots/view/BallotView.vue +++ b/src/pages/trails/ballots/view/BallotView.vue @@ -35,6 +35,7 @@ export default { scrollPosition: null, notice: false, showDetails: false, + showVotedChip: false, }; }, async mounted() { @@ -268,6 +269,16 @@ export default { options: options || [option], }); this.voting = false; + // Check if the voting was successful, then update voted chip visibility + if (this.userVotes[ballotName]) { + this.updateVotedChipVisibility(); + await this.fetchBallot(this.$route.params.id); + this.getLoggedUserVotes(this.$route.params.id); + await this.fetchVotesForBallot({ + name: this.ballot.ballot_name, + limit: this.ballot.total_voters, + }); + } }, showAlert(message) { this.$q.notify({ @@ -279,13 +290,14 @@ export default { showNotification() { this.$q.notify({ icon: this.notifications[0].icon, - message: - this.notifications[0].status === 'success' - ? this.$t('notifications.trails.successSigning') - : this.$t('notifications.trails.errorSigning'), - color: - this.notifications[0].status === 'success' ? 'positive' : 'negative', + message:this.notifications[0].status === 'success'?this.$t('notifications.trails.successSigning'): this.$t('notifications.trails.errorSigning'), + color:this.notifications[0].status === 'success' ? 'positive' : 'negative', + }); + if (this.notifications[0].status === 'success') { + this.userVotes[this.ballot.ballot_name] = true; + this.updateVotedChipVisibility(); + } }, async showVoters() { this.showDetails = this.voters.length > 0; @@ -316,10 +328,12 @@ export default { if (this.isPositiveVotePower) { if (this.isUserRegisteredInTreasury) { register = false; - } else { + } + else { if (this.ballot.treasury.access === 'public') { register = true; - } else { + } + else { // redirect to treasuties page with filter this.$router.push({ path: '/trails/treasuries', @@ -328,15 +342,18 @@ export default { return; // Do not Cast Vote } } - } else { + } + else { if (this.isOfficialSymbol) { this.showAlert('pages.trails.ballots.stakeBeforeVotingLong'); - } else { + } + else { this.showAlert( 'pages.trails.ballots.needPositiveVoteLong.' + - this.votingPowerComesFrom + this.votingPowerComesFrom ); } + return; } @@ -349,6 +366,12 @@ export default { await this.resetUserVotes(); this.showNotification(); + + }, + async updateVotedChipVisibility() { + this.showVotedChip = true; + await this.fetchBallot(this.$route.params.id); + await this.fetchVotersForBallot(this.$route.params.id); }, async cancel() { await this.cancelBallot(this.ballot); @@ -383,9 +406,9 @@ export default { shouldDisableCheckbox(key) { return ( !this.isAuthenticated || - !this.isBallotOpened(this.ballot) || - (this.votes.length === this.ballot.max_options && - !this.votes.includes(key)) + !this.isBallotOpened(this.ballot) || + (this.votes.length === this.ballot.max_options && + !this.votes.includes(key)) ); }, displayBallotSelectionText() { @@ -407,8 +430,8 @@ export default { }, canUserVote() { this.userCanVote = - this.votes.length >= this.ballot.min_options && - this.votes.length <= this.ballot.max_options; + this.votes.length >= this.ballot.min_options && + this.votes.length <= this.ballot.max_options; return this.userCanVote; }, shouldDisableVoteButton() { @@ -485,7 +508,7 @@ export default { ballot-chip(:type="ballot.category", :isBallotOpened="isBallotOpened(ballot)") ballot-chip(:type="'voted'", :isBallotOpened="isBallotOpened(ballot)", - :class="userVotes[ballot.ballot_name] ? '' : 'hidden'") + :class="{ 'hidden': !userVotes[ballot.ballot_name] }") ballot-status( :ballot="ballot" :isBallotOpened="isBallotOpened(ballot)"