mirror of
https://framagit.org/framasoft/framadate/funky-framadate-front.git
synced 2023-08-25 13:53:14 +02:00
clean lifecycle of setting base votes choices on load of a poll
This commit is contained in:
parent
5a75685b0a
commit
534ef03f6a
@ -98,7 +98,7 @@
|
||||
</a>
|
||||
<a
|
||||
class="navbar-item"
|
||||
[routerLink]="['/poll/citron/consultation/secure/9199bdd9e0d4b29deafbf3463c0727fc']"
|
||||
[routerLink]="['/poll/citron/consultation/secure/1c01ed9c94fc640a1be864f197ff808c']"
|
||||
routerLinkActive="is-primary"
|
||||
>
|
||||
<i class="fa fa-key-modern"></i>
|
||||
|
@ -4,6 +4,7 @@ import { Owner } from './owner.model';
|
||||
export class Stack {
|
||||
public id: number;
|
||||
public poll_custom_url: string;
|
||||
public pass_hash: string;
|
||||
public pseudo = 'Choque Nourrice';
|
||||
public comment = 'Le beau commentaire de Choque Nourrice';
|
||||
public owner: Owner = new Owner();
|
||||
|
@ -93,20 +93,15 @@ export class ApiService {
|
||||
* @param vote_stack
|
||||
*/
|
||||
public sendNewVoteStackOfPoll(vote_stack: Stack): Promise<void> {
|
||||
// api_new_vote_stack POST ANY ANY /api/v1/poll/{id}/answer
|
||||
|
||||
console.log('vote_stack', vote_stack);
|
||||
console.log('this.baseHref', this.baseHref);
|
||||
const headers = ApiService.makeHeaders(vote_stack);
|
||||
console.log('headers', headers);
|
||||
// const headers = ApiService.makeHeaders(vote_stack);
|
||||
const url = `${this.baseHref}/vote-stack/`;
|
||||
|
||||
const axiosconf = {
|
||||
url,
|
||||
method: 'POST',
|
||||
body: vote_stack,
|
||||
headers,
|
||||
};
|
||||
// const axiosconf = {
|
||||
// url,
|
||||
// method: 'POST',
|
||||
// body: vote_stack,
|
||||
// headers,
|
||||
// };
|
||||
|
||||
return this.axiosInstance.post(url, vote_stack);
|
||||
}
|
||||
|
@ -24,6 +24,7 @@ import { Vote } from '../models/vote.model';
|
||||
export class PollService implements Resolve<Poll> {
|
||||
_poll: BehaviorSubject<Poll | undefined> = new BehaviorSubject<Poll | undefined>(undefined);
|
||||
public readonly poll: Observable<Poll | undefined> = this._poll.asObservable();
|
||||
public pass_hash: string;
|
||||
|
||||
constructor(
|
||||
private http: HttpClient,
|
||||
@ -54,10 +55,17 @@ export class PollService implements Resolve<Poll> {
|
||||
!this._poll.getValue().custom_url ||
|
||||
this._poll.getValue().custom_url !== wantedcustom_url
|
||||
) {
|
||||
await this.loadPollBycustom_url(wantedcustom_url);
|
||||
if (this.pass_hash) {
|
||||
this.storageService.vote_stack.pass_hash = this.pass_hash;
|
||||
await this.loadPollBycustom_urlWithPasswordHash(wantedcustom_url, this.pass_hash);
|
||||
} else {
|
||||
await this.loadPollBycustom_url(wantedcustom_url);
|
||||
}
|
||||
}
|
||||
if (this._poll.getValue()) {
|
||||
return this._poll.getValue();
|
||||
const loadedPoll = this._poll.getValue();
|
||||
if (loadedPoll) {
|
||||
this.storageService.vote_stack.poll_custom_url = loadedPoll.custom_url;
|
||||
return loadedPoll;
|
||||
} else {
|
||||
this.router.navigate(['page-not-found']);
|
||||
return;
|
||||
@ -104,7 +112,7 @@ export class PollService implements Resolve<Poll> {
|
||||
this.titleService.setTitle(`☑️ ${poll.title} - ${environment.appTitle}`);
|
||||
} else {
|
||||
this.toastService.display(`sondage ${custom_url} non trouvé`);
|
||||
// this.router.navigate(['page-not-found']);
|
||||
this.router.navigate(['page-not-found']);
|
||||
}
|
||||
} else {
|
||||
this.toastService.display(`sondage sans custom url : ${custom_url}`);
|
||||
@ -120,8 +128,12 @@ export class PollService implements Resolve<Poll> {
|
||||
|
||||
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);
|
||||
// set the choices only the first time the poll loads, or if we changed the poll
|
||||
console.log(
|
||||
'this.storageService.vote_stack.poll_custom_url',
|
||||
this.storageService.vote_stack.poll_custom_url
|
||||
);
|
||||
// this.storageService.setChoicesForVoteStack(poll.choices);
|
||||
}
|
||||
|
||||
this.toastService.display('sondage bien mis à jour', 'success');
|
||||
|
@ -65,7 +65,8 @@ export class StorageService {
|
||||
* @param choices_list
|
||||
*/
|
||||
setChoicesForVoteStack(choices_list: Choice[]) {
|
||||
// text choices
|
||||
// change only if the poll custom_url changed or if there is no stack id for this poll
|
||||
|
||||
if (!this.vote_stack.id) {
|
||||
this.vote_stack = new Stack();
|
||||
|
||||
|
@ -6,7 +6,6 @@ import { WipTodoComponent } from '../../shared/components/ui/wip-todo/wip-todo.c
|
||||
|
||||
const routes: Routes = [
|
||||
{ path: 'secure/:pass_hash', component: ConsultationComponent },
|
||||
|
||||
{
|
||||
path: '',
|
||||
component: ConsultationComponent,
|
||||
|
@ -1,4 +1,3 @@
|
||||
<section class="loading_poll" *ngIf="fetching"></section>
|
||||
<section class="poll_loaded padded" *ngIf="!fetching && poll">
|
||||
<!-- messages-->
|
||||
|
||||
@ -116,6 +115,9 @@
|
||||
aucun vote pour le moment
|
||||
</div>
|
||||
</div>
|
||||
<section class="loading_poll" *ngIf="fetching">
|
||||
<i class="fa fa-spinner fa-4x"></i>
|
||||
</section>
|
||||
<button
|
||||
class="btn btn-block submit-votestack is-primary"
|
||||
(click)="addVoteStack()"
|
||||
|
@ -0,0 +1,6 @@
|
||||
.loading_poll {
|
||||
position: fixed;
|
||||
bottom: 5em;
|
||||
left: 1em;
|
||||
z-index: 10;
|
||||
}
|
@ -18,7 +18,7 @@ export class ConsultationComponent implements OnInit, OnDestroy {
|
||||
public isCompactMode = true;
|
||||
public poll: Poll;
|
||||
public pollSlug: string;
|
||||
public passHash: string;
|
||||
public pass_hash: string;
|
||||
public fetching = true;
|
||||
public isArchived: boolean;
|
||||
public isAdmin: boolean;
|
||||
@ -55,14 +55,22 @@ export class ConsultationComponent implements OnInit, OnDestroy {
|
||||
this._Activatedroute.paramMap.subscribe((params: ParamMap) => {
|
||||
console.log('params _Activatedroute', params);
|
||||
this.pollSlug = params.get('custom_url');
|
||||
this.passHash = params.get('pass_hash');
|
||||
this.pass_hash = params.get('pass_hash');
|
||||
|
||||
if (this.passHash) {
|
||||
this.pollService.loadPollBycustom_urlWithPasswordHash(this.pollSlug, this.passHash);
|
||||
console.log('this.pass_hash ', this.pass_hash);
|
||||
if (this.pass_hash) {
|
||||
this.pollService.loadPollBycustom_urlWithPasswordHash(this.pollSlug, this.pass_hash).then((resp) => {
|
||||
console.log('resp', resp);
|
||||
this.fetching = false;
|
||||
this.storageService.vote_stack.id = null;
|
||||
this.storageService.setChoicesForVoteStack(this.pollService._poll.getValue().choices);
|
||||
});
|
||||
} else {
|
||||
this.pollService.loadPollBycustom_url(this.pollSlug).then((resp) => {
|
||||
console.log('resp', resp);
|
||||
this.fetching = false;
|
||||
this.storageService.vote_stack.id = null;
|
||||
this.storageService.setChoicesForVoteStack(this.pollService._poll.getValue().choices);
|
||||
});
|
||||
}
|
||||
});
|
||||
@ -100,6 +108,7 @@ export class ConsultationComponent implements OnInit, OnDestroy {
|
||||
*/
|
||||
addVoteStack(): void {
|
||||
this.storageService.vote_stack.poll_custom_url = this.poll.custom_url;
|
||||
this.pollService.pass_hash = this.pass_hash;
|
||||
|
||||
this.toastService.display('envoi du vote ....');
|
||||
this.api
|
||||
@ -120,7 +129,11 @@ export class ConsultationComponent implements OnInit, OnDestroy {
|
||||
if (voteStack.status == 200) {
|
||||
this.storageService.mapVotes(voteStack.data);
|
||||
this.pollService.enrichVoteStackWithCurrentPollChoicesDefaultVotes(this.storageService.vote_stack);
|
||||
this.pollService.loadPollBycustom_url(this.poll.custom_url);
|
||||
if (this.pass_hash) {
|
||||
this.pollService.loadPollBycustom_urlWithPasswordHash(this.poll.custom_url, this.pass_hash);
|
||||
} else {
|
||||
this.pollService.loadPollBycustom_url(this.poll.custom_url);
|
||||
}
|
||||
} else {
|
||||
this.toastService.display('erreur à l enregistrement');
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user