mirror of
https://framagit.org/framasoft/framadate/funky-framadate-front.git
synced 2023-08-25 13:53:14 +02:00
update of a vote stack and fill missing default votes
This commit is contained in:
parent
09ff4be2f6
commit
16c527d649
@ -1,6 +1,6 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot } from '@angular/router';
|
||||
import { BehaviorSubject, Observable, Subscription } from 'rxjs';
|
||||
import { BehaviorSubject, Observable } from 'rxjs';
|
||||
|
||||
import { Answer } from '../enums/answer.enum';
|
||||
import { Choice } from '../models/choice.model';
|
||||
@ -15,6 +15,8 @@ import { environment } from '../../../environments/environment';
|
||||
import { StorageService } from './storage.service';
|
||||
import { Title } from '@angular/platform-browser';
|
||||
import { DateUtilitiesService } from './date.utilities.service';
|
||||
import { Stack } from '../models/stack.model';
|
||||
import { Vote } from '../models/vote.model';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root',
|
||||
@ -116,10 +118,7 @@ export class PollService implements Resolve<Poll> {
|
||||
public updateCurrentPoll(poll: Poll): void {
|
||||
console.log('this.storageService.vote_stack.id', this.storageService.vote_stack.id);
|
||||
|
||||
if (
|
||||
!this.storageService.vote_stack.id
|
||||
// || this.storageService.vote_stack.poll_custom_url !== poll.custom_url
|
||||
) {
|
||||
if (!this.storageService.vote_stack.id || this.storageService.vote_stack.poll_custom_url !== poll.custom_url) {
|
||||
console.log('set base choices', poll.choices);
|
||||
// set the choices only the first time the poll loads
|
||||
this.storageService.setChoicesForVoteStack(poll.choices);
|
||||
@ -150,7 +149,11 @@ export class PollService implements Resolve<Poll> {
|
||||
return this.convertTextToSlug(str) + '-' + this.uuidService.getUUID();
|
||||
}
|
||||
|
||||
public convertTextToSlug(str: string) {
|
||||
/**
|
||||
* convert a text to a slug
|
||||
* @param str
|
||||
*/
|
||||
public convertTextToSlug(str: string): string {
|
||||
str = str.trim();
|
||||
str = str.replace(/^\s+|\s+$/g, ''); // trim
|
||||
str = str.toLowerCase();
|
||||
@ -253,4 +256,33 @@ export class PollService implements Resolve<Poll> {
|
||||
// TODO handle pass access
|
||||
return url;
|
||||
}
|
||||
|
||||
/**
|
||||
* enrich vote stack with missing default votes
|
||||
* @param vote_stack
|
||||
*/
|
||||
enrichVoteStackWithCurrentPollChoicesDefaultVotes(vote_stack: Stack) {
|
||||
if (this._poll && this._poll.getValue) {
|
||||
const polltemp = this._poll.getValue();
|
||||
polltemp.choices.map((choice) => {
|
||||
// for each vote, if it has the choice_id, do nothing, else, add a default vote
|
||||
if (!this.findExistingVoteFromChoiceId(choice.id, vote_stack.votes)) {
|
||||
vote_stack.votes.push(new Vote(choice.id));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* find an existing vote in vote_stack from its choice_id
|
||||
* @param choice_id
|
||||
* @param votes
|
||||
*/
|
||||
findExistingVoteFromChoiceId(choice_id: number, votes: Vote[]) {
|
||||
return votes.find((vote: Vote) => {
|
||||
if (vote.choice_id === choice_id) {
|
||||
return vote;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -132,11 +132,10 @@ export class StorageService {
|
||||
|
||||
/**
|
||||
* update vote stack from the backend
|
||||
* @param resp
|
||||
* @param voteStack
|
||||
*/
|
||||
mapVotes(resp) {
|
||||
console.log('mapVotes resp.data', resp.data);
|
||||
this.vote_stack.owner = resp.data.owner;
|
||||
this.vote_stack.id = resp.data.id;
|
||||
mapVotes(voteStack: Stack) {
|
||||
console.log('mapVotes voteStack', voteStack);
|
||||
this.vote_stack = voteStack;
|
||||
}
|
||||
}
|
||||
|
@ -7,6 +7,11 @@
|
||||
⚰️ Ce sondage a expiré, il n'est plus possible d'y ajouter de votes ou de commentaires
|
||||
</div>
|
||||
</div>
|
||||
<div class="message is-warning" *ngIf="poll && poll.admin_key">
|
||||
<div class="message-body">
|
||||
vous êtes admin de ce sondage
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="message is-info" *ngIf="poll.modification_policy == 'self'">
|
||||
<div class="message-body">
|
||||
|
@ -127,7 +127,8 @@ export class ConsultationComponent implements OnInit, OnDestroy {
|
||||
*/
|
||||
storeVoteStackAndReloadPoll(voteStack: any) {
|
||||
if (voteStack.status == 200) {
|
||||
this.storageService.mapVotes(voteStack);
|
||||
this.storageService.mapVotes(voteStack.data);
|
||||
this.pollService.enrichVoteStackWithCurrentPollChoicesDefaultVotes(this.storageService.vote_stack);
|
||||
this.pollService.loadPollBycustom_url(this.poll.custom_url);
|
||||
} else {
|
||||
this.toastService.display('erreur à l enregistrement');
|
||||
|
@ -36,7 +36,7 @@ export const routes: Routes = [
|
||||
{
|
||||
path: 'poll/:custom_url/participation',
|
||||
loadChildren: () => import('./features/participation/participation.module').then((m) => m.ParticipationModule),
|
||||
resolve: { poll: PollService },
|
||||
// resolve: { poll: PollService },
|
||||
},
|
||||
{
|
||||
path: 'success',
|
||||
|
Loading…
Reference in New Issue
Block a user