mirror of
https://framagit.org/framasoft/framadate/funky-framadate-front.git
synced 2023-08-25 13:53:14 +02:00
Merge branch 'up-to-seven-steps' into 'master'
Up to seven steps See merge request framasoft/framadate/funky-framadate-front!52
This commit is contained in:
commit
7502adc5bc
@ -0,0 +1,55 @@
|
|||||||
|
<div class="actions">
|
||||||
|
<button class="button">
|
||||||
|
Fermer
|
||||||
|
<i class="fa fa-times"></i>
|
||||||
|
</button>
|
||||||
|
<button class="export export-print btn" (click)="print()">
|
||||||
|
<i class="fa fa-print"></i>
|
||||||
|
Imprimer le sondage
|
||||||
|
</button>
|
||||||
|
<button class="export export-csv btn" (click)="exportCSV()">
|
||||||
|
<i class="fa fa-file-calc-o" aria-hidden="true"></i>
|
||||||
|
Exporter en .csv
|
||||||
|
</button>
|
||||||
|
<button class="export export-json btn" (click)="exportJson()">
|
||||||
|
<i class="fa fa-file-archive-o" aria-hidden="true"></i>
|
||||||
|
export json
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<button class="replicate duplicate btn" [routerLink]="['']">
|
||||||
|
<i class="fa fa-pencil" aria-hidden="true"></i>
|
||||||
|
Modifier
|
||||||
|
</button>
|
||||||
|
<button class="replicate duplicate btn" (click)="duplicate()">
|
||||||
|
<i class="fa fa-copy" aria-hidden="true"></i>
|
||||||
|
Dupliquer
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<div id="export_and_share">
|
||||||
|
<div class="sharing" *ngIf="pollService.poll">
|
||||||
|
<div class="margin-top-x8">
|
||||||
|
Lien administrateur
|
||||||
|
|
||||||
|
<i class="fa fa-share" aria-hidden="true"></i>
|
||||||
|
</div>
|
||||||
|
<p class="nobold text-14" for="copyLink">
|
||||||
|
<a href="{{ pollService.getParticipationUrl() }}"> {{ pollService.getParticipationUrl() }} </a>
|
||||||
|
<app-copy-text [textToCopy]="pollService.getParticipationUrl()"></app-copy-text>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="admin-actions" *ngIf="pollService.admin_key">
|
||||||
|
<button class="replicate duplicate button has-text-warning" (click)="deleteAllVotes()">
|
||||||
|
<i class="fa fa-user-times" aria-hidden="true"></i>
|
||||||
|
Supprimer tous les votes
|
||||||
|
</button>
|
||||||
|
<button class="replicate duplicate button has-text-warning" (click)="deleteAllComments()">
|
||||||
|
<i class="fa fa-comments-o" aria-hidden="true"></i>
|
||||||
|
Supprimer tous les commentaires
|
||||||
|
</button>
|
||||||
|
<button class="replicate duplicate button has-text-danger" (click)="deletePoll()">
|
||||||
|
<i class="fa fa-trash" aria-hidden="true"></i>
|
||||||
|
Supprimer le sondage
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -0,0 +1,24 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { ActionsMenuComponent } from './actions-menu.component';
|
||||||
|
|
||||||
|
describe('ActionsMenuComponent', () => {
|
||||||
|
let component: ActionsMenuComponent;
|
||||||
|
let fixture: ComponentFixture<ActionsMenuComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ActionsMenuComponent],
|
||||||
|
}).compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(ActionsMenuComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
@ -0,0 +1,72 @@
|
|||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
import { ActivatedRoute, Router } from '@angular/router';
|
||||||
|
import { PollUtilitiesService } from '../../../core/services/poll.utilities.service';
|
||||||
|
import { StorageService } from '../../../core/services/storage.service';
|
||||||
|
import { ApiService } from '../../../core/services/api.service';
|
||||||
|
import { PollService } from '../../../core/services/poll.service';
|
||||||
|
import { DateService } from '../../../core/services/date.service';
|
||||||
|
import { ToastService } from '../../../core/services/toast.service';
|
||||||
|
import { ConfirmationService } from 'primeng/api';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-actions-menu',
|
||||||
|
templateUrl: './actions-menu.component.html',
|
||||||
|
styleUrls: ['./actions-menu.component.scss'],
|
||||||
|
})
|
||||||
|
export class ActionsMenuComponent implements OnInit {
|
||||||
|
constructor(
|
||||||
|
private router: Router,
|
||||||
|
private utils: PollUtilitiesService,
|
||||||
|
private _Activatedroute: ActivatedRoute,
|
||||||
|
private confirmationService: ConfirmationService,
|
||||||
|
public storageService: StorageService,
|
||||||
|
public api: ApiService,
|
||||||
|
public pollService: PollService,
|
||||||
|
public dateService: DateService,
|
||||||
|
public toastService: ToastService
|
||||||
|
) {}
|
||||||
|
|
||||||
|
ngOnInit(): void {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* export all the poll data available to the public as a CSV single file
|
||||||
|
*/
|
||||||
|
exportCSV(): void {
|
||||||
|
this.utils.exportCSV(this.pollService._poll.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
exportJson(): void {
|
||||||
|
this.utils.download(
|
||||||
|
'export_poll_' + this.pollService._poll.getValue().custom_url + '.json',
|
||||||
|
JSON.stringify(this.pollService._poll.getValue())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
duplicate(): void {
|
||||||
|
alert('TODO');
|
||||||
|
}
|
||||||
|
|
||||||
|
print(): void {
|
||||||
|
alert('TODO');
|
||||||
|
}
|
||||||
|
|
||||||
|
deleteAllVotes() {
|
||||||
|
this.confirmationService.confirm({
|
||||||
|
message: 'Supprimer tous les votes de ce sondage?',
|
||||||
|
accept: () => {
|
||||||
|
alert('TODO');
|
||||||
|
console.log('TODO');
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
deleteAllComments() {
|
||||||
|
alert('TODO');
|
||||||
|
console.log('TODO');
|
||||||
|
}
|
||||||
|
|
||||||
|
deletePoll() {
|
||||||
|
alert('TODO');
|
||||||
|
console.log('TODO');
|
||||||
|
}
|
||||||
|
}
|
@ -9,6 +9,8 @@ import { StepFiveComponent } from './form/steps/step-five/step-five.component';
|
|||||||
import { StepOneComponent } from './form/steps/step-one/step-one.component';
|
import { StepOneComponent } from './form/steps/step-one/step-one.component';
|
||||||
import { SuccessComponent } from './success/success.component';
|
import { SuccessComponent } from './success/success.component';
|
||||||
import { AdminConsultationComponent } from './consultation/consultation.component';
|
import { AdminConsultationComponent } from './consultation/consultation.component';
|
||||||
|
import { StepSixComponent } from './form/steps/step-six/step-six.component';
|
||||||
|
import { StepSevenComponent } from './form/steps/step-seven/step-seven.component';
|
||||||
|
|
||||||
const routes: Routes = [
|
const routes: Routes = [
|
||||||
{
|
{
|
||||||
@ -24,6 +26,8 @@ const routes: Routes = [
|
|||||||
{ path: '3', component: StepThreeComponent },
|
{ path: '3', component: StepThreeComponent },
|
||||||
{ path: '4', component: StepFourComponent },
|
{ path: '4', component: StepFourComponent },
|
||||||
{ path: '5', component: StepFiveComponent },
|
{ path: '5', component: StepFiveComponent },
|
||||||
|
{ path: '6', component: StepSixComponent },
|
||||||
|
{ path: '7', component: StepSevenComponent },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -29,6 +29,12 @@ import { PickerComponent } from './form/date/picker/picker.component';
|
|||||||
import { TimeListComponent } from './form/date/list/time/time-list.component';
|
import { TimeListComponent } from './form/date/list/time/time-list.component';
|
||||||
import { AdminConsultationComponent } from './consultation/consultation.component';
|
import { AdminConsultationComponent } from './consultation/consultation.component';
|
||||||
import { ConfirmDialogModule } from 'primeng/confirmdialog';
|
import { ConfirmDialogModule } from 'primeng/confirmdialog';
|
||||||
|
import { StepSixComponent } from './form/steps/step-six/step-six.component';
|
||||||
|
import { StepSevenComponent } from './form/steps/step-seven/step-seven.component';
|
||||||
|
import { OptionLinkComponent } from './form/option-link/option-link.component';
|
||||||
|
import { TextListComponent } from './form/text-list/text-list.component';
|
||||||
|
import { HoursComponent } from './form/hours/hours.component';
|
||||||
|
import { ActionsMenuComponent } from './actions-menu/actions-menu.component';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [
|
declarations: [
|
||||||
@ -53,6 +59,12 @@ import { ConfirmDialogModule } from 'primeng/confirmdialog';
|
|||||||
PickerComponent,
|
PickerComponent,
|
||||||
TimeListComponent,
|
TimeListComponent,
|
||||||
AdminConsultationComponent,
|
AdminConsultationComponent,
|
||||||
|
StepSixComponent,
|
||||||
|
StepSevenComponent,
|
||||||
|
OptionLinkComponent,
|
||||||
|
TextListComponent,
|
||||||
|
HoursComponent,
|
||||||
|
ActionsMenuComponent,
|
||||||
],
|
],
|
||||||
imports: [
|
imports: [
|
||||||
AdministrationRoutingModule,
|
AdministrationRoutingModule,
|
||||||
@ -65,5 +77,6 @@ import { ConfirmDialogModule } from 'primeng/confirmdialog';
|
|||||||
DragDropModule,
|
DragDropModule,
|
||||||
ConfirmDialogModule,
|
ConfirmDialogModule,
|
||||||
],
|
],
|
||||||
|
exports: [ActionsMenuComponent],
|
||||||
})
|
})
|
||||||
export class AdministrationModule {}
|
export class AdministrationModule {}
|
||||||
|
@ -2,7 +2,8 @@
|
|||||||
<div class="columns">
|
<div class="columns">
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<!-- ajouter une date-->
|
<!-- ajouter une date-->
|
||||||
<button class="btn btn--primary" (click)="addChoice()">
|
<button class="button is-primary" (click)="addChoice()">
|
||||||
|
<i class="fa fa-plus"></i>
|
||||||
{{ 'dates.add' | translate }}
|
{{ 'dates.add' | translate }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@ -21,12 +22,23 @@
|
|||||||
cdkDrag
|
cdkDrag
|
||||||
[ngClass]="{ 'day-weekend': isWeekendDay(choice.date_object) }"
|
[ngClass]="{ 'day-weekend': isWeekendDay(choice.date_object) }"
|
||||||
>
|
>
|
||||||
<span class="button is-default">
|
<!-- <span class="button is-default">-->
|
||||||
<i class="icon fa fa-arrows-v"></i>
|
<!-- <i class="icon fa fa-arrows-v"></i>-->
|
||||||
<span *ngIf="choice.date_object">
|
<!-- <span *ngIf="choice.date_object">-->
|
||||||
{{ choice.date_object | date: 'E':'Europe/Paris':'fr_FR' }}
|
<!-- {{ choice.date_object | date: 'E':'Europe/Paris':'fr_FR' }}-->
|
||||||
</span>
|
<!-- </span>-->
|
||||||
</span>
|
<!-- </span>-->
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column">
|
||||||
|
<label for="dateChoices_{{ id }}">
|
||||||
|
Date {{ id + 1 }} - {{ choice.date_object | date: 'E':'Europe/Paris':'fr_FR' }}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="column has-text-right">
|
||||||
|
<span class="format-helper">JJ/MM/AAAA</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<input
|
<input
|
||||||
[(ngModel)]="choice.date_input"
|
[(ngModel)]="choice.date_input"
|
||||||
class="date-choice-item"
|
class="date-choice-item"
|
||||||
@ -34,16 +46,16 @@
|
|||||||
id="dateChoices_{{ id }}"
|
id="dateChoices_{{ id }}"
|
||||||
type="date"
|
type="date"
|
||||||
/>
|
/>
|
||||||
<button (click)="dateChoices.splice(id, 1)" class="btn btn-warning">
|
<hr />
|
||||||
<i class="fa fa-times" aria-hidden="true"></i>
|
<div class="button delete-date is-block" (click)="dateChoices.splice(id, 1)">
|
||||||
</button>
|
<i class="fa fa-trash-o" aria-hidden="true"></i>
|
||||||
<br />
|
Supprimer la date
|
||||||
|
</div>
|
||||||
<div *ngIf="hasSeveralHours" class="several-times">
|
<div *ngIf="hasSeveralHours" class="several-times">
|
||||||
<br />
|
<br />
|
||||||
<app-time-list [timeSlices]="choice.timeSlices" [prefix_choice_id]="id"></app-time-list>
|
<app-time-list [timeSlices]="choice.timeSlices" [prefix_choice_id]="id"></app-time-list>
|
||||||
<div class="text-right">
|
<div class="text-right">
|
||||||
<button (click)="addTimeToDate(choice, id)" class="btn btn--primary">
|
<button (click)="addTimeToDate(choice, id)" class="button is-primary">
|
||||||
<i class="fa fa-plus"></i>
|
<i class="fa fa-plus"></i>
|
||||||
{{ 'dates.add_time' | translate }}
|
{{ 'dates.add_time' | translate }}
|
||||||
<i class="fa fa-clock-o"></i>
|
<i class="fa fa-clock-o"></i>
|
||||||
|
@ -1,26 +1,70 @@
|
|||||||
|
@import '../../../../../../../styles/variables';
|
||||||
|
|
||||||
.day-weekend {
|
.day-weekend {
|
||||||
background: #dccfed;
|
background: #dccfed;
|
||||||
}
|
}
|
||||||
|
|
||||||
.button {
|
.button {
|
||||||
min-width: 9ch;
|
min-width: 9ch;
|
||||||
}
|
}
|
||||||
|
|
||||||
.icon {
|
.icon {
|
||||||
margin-right: 1ch;
|
margin-right: 1ch;
|
||||||
margin-left: 1ch;
|
margin-left: 1ch;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.several-times {
|
.several-times {
|
||||||
padding-left: 2em;
|
padding-left: 2em;
|
||||||
width: 96.5%;
|
width: 96.5%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.date-choice {
|
.date-choice {
|
||||||
&:nth-child(odd) {
|
margin-bottom: 0.5em;
|
||||||
background: #fbf8ff;
|
border-radius: 0.25em;
|
||||||
&.day-weekend {
|
background: $bg-grey;
|
||||||
background: #d7cae9;
|
|
||||||
}
|
.columns {
|
||||||
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
|
label {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
input,
|
||||||
|
.button {
|
||||||
|
width: 100%;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
hr {
|
||||||
|
margin: 0.5em -1em;
|
||||||
|
background: $rules;
|
||||||
|
}
|
||||||
|
//&.day-weekend {
|
||||||
|
// background: mix($legend_color_2, $grey-lighter);
|
||||||
|
//}
|
||||||
|
|
||||||
|
//&:nth-child(odd) {
|
||||||
|
// background: $grey-lighter;
|
||||||
|
//
|
||||||
|
// &.day-weekend {
|
||||||
|
// background: mix($d-neutral, $grey-lighter);
|
||||||
|
// }
|
||||||
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
.date-choice-item {
|
.date-choice-item {
|
||||||
width: 75%;
|
width: 75%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.button .fa {
|
||||||
|
margin-left: 1ch;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.delete-date {
|
||||||
|
color: $secondary_color !important;
|
||||||
|
|
||||||
|
.fa {
|
||||||
|
color: $secondary_color !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
<p>hours works!</p>
|
@ -0,0 +1,24 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { HoursComponent } from './hours.component';
|
||||||
|
|
||||||
|
describe('HoursComponent', () => {
|
||||||
|
let component: HoursComponent;
|
||||||
|
let fixture: ComponentFixture<HoursComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [HoursComponent],
|
||||||
|
}).compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(HoursComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
@ -0,0 +1,12 @@
|
|||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-hours',
|
||||||
|
templateUrl: './hours.component.html',
|
||||||
|
styleUrls: ['./hours.component.scss'],
|
||||||
|
})
|
||||||
|
export class HoursComponent implements OnInit {
|
||||||
|
constructor() {}
|
||||||
|
|
||||||
|
ngOnInit(): void {}
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
<p>option-link works!</p>
|
@ -0,0 +1,24 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { OptionLinkComponent } from './option-link.component';
|
||||||
|
|
||||||
|
describe('OptionLinkComponent', () => {
|
||||||
|
let component: OptionLinkComponent;
|
||||||
|
let fixture: ComponentFixture<OptionLinkComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [OptionLinkComponent],
|
||||||
|
}).compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(OptionLinkComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
@ -0,0 +1,12 @@
|
|||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-option-link',
|
||||||
|
templateUrl: './option-link.component.html',
|
||||||
|
styleUrls: ['./option-link.component.scss'],
|
||||||
|
})
|
||||||
|
export class OptionLinkComponent implements OnInit {
|
||||||
|
constructor() {}
|
||||||
|
|
||||||
|
ngOnInit(): void {}
|
||||||
|
}
|
@ -51,13 +51,17 @@
|
|||||||
<div class="columns">
|
<div class="columns">
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<button class="button is-secondary is-fullwidth" [routerLink]="['/administration/step/3']">
|
<button class="button is-secondary is-fullwidth" [routerLink]="['/administration/step/3']">
|
||||||
précédent
|
Précédent
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<button class="btn is-primary is-fullwidth" (click)="createPoll()" [disabled]="!pollService.form.valid">
|
<button
|
||||||
|
class="btn is-primary is-fullwidth"
|
||||||
|
[routerLink]="['/administration/step/5']"
|
||||||
|
[disabled]="!pollService.form.valid"
|
||||||
|
>
|
||||||
<i class="fa fa-save"></i>
|
<i class="fa fa-save"></i>
|
||||||
Enregistrer le sondage
|
Suivant
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -21,15 +21,4 @@ export class StepFourComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit(): void {}
|
ngOnInit(): void {}
|
||||||
|
|
||||||
createPoll() {
|
|
||||||
this.pollService.createPoll().then(
|
|
||||||
(resp) => {
|
|
||||||
this.router.navigate(['administration/success']);
|
|
||||||
},
|
|
||||||
(err) => {
|
|
||||||
console.error('oops err', err);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,94 @@
|
|||||||
|
<div class="step-container min-height step-resume">
|
||||||
|
<app-stepper [step_current]="7" [step_max]="pollService.step_max"></app-stepper>
|
||||||
|
<div class="columns content">
|
||||||
|
<div class="column">
|
||||||
|
<h2 class="title is-2">
|
||||||
|
Voici le résumé de votre sondage
|
||||||
|
</h2>
|
||||||
|
<p class="helper">
|
||||||
|
En cliquant sur le bouton « Modifier » d’une section vous serez renvoyé à l’étape correspondante de la
|
||||||
|
création du sondage. Vous devrez repasser par toutes les étapes suivantes.
|
||||||
|
<br />
|
||||||
|
Mais rassurez-vous, vous n’aurez pas à tout remplir à nouveau.
|
||||||
|
</p>
|
||||||
|
<div class="resume">
|
||||||
|
<h3 class="title is-3">Mes informations générales</h3>
|
||||||
|
<div class="block-resume">
|
||||||
|
<h3 class="title is-4">
|
||||||
|
{{ pollService.form.value.title }}
|
||||||
|
</h3>
|
||||||
|
<p class="description">
|
||||||
|
{{ pollService.form.value.description }}
|
||||||
|
</p>
|
||||||
|
<hr />
|
||||||
|
<div class="go-to-step" [routerLink]="['/administration/step/1']">
|
||||||
|
<i class="fa fa-pencil"></i> Modifier
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<h3 class="title is-3">Mon type de sondage</h3>
|
||||||
|
<div class="block-resume">
|
||||||
|
{{ pollService.form.value.isAboutDate ? 'Date' : 'Propositions' }}
|
||||||
|
<hr />
|
||||||
|
<div class="go-to-step" [routerLink]="['/administration/step/2']">
|
||||||
|
<i class="fa fa-pencil"></i> Modifier
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<h3 class="title is-3">Mes dates et horaires</h3>
|
||||||
|
<div class="block-resume">
|
||||||
|
<div class="list-datechoices" *ngIf="pollService.form.value.isAboutDate">
|
||||||
|
<ul *ngFor="let choice of pollService.dateChoiceList">
|
||||||
|
<li>
|
||||||
|
{{ choice.date_object | date: 'E d M yyy':'Europe/Paris':'fr_FR' }}
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="list-texts" *ngIf="!pollService.form.value.isAboutDate">
|
||||||
|
<ul *ngFor="let choice of pollService.choices">
|
||||||
|
<li>
|
||||||
|
{{ choice }}
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<hr />
|
||||||
|
<div class="go-to-step" [routerLink]="['/administration/step/3']">
|
||||||
|
<i class="fa fa-pencil"></i> Modifier
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<h3 class="title is-3">Mes paramètres et options de notifications</h3>
|
||||||
|
<div class="block-resume">
|
||||||
|
<div class="password">
|
||||||
|
Protégé par mot de passe: {{ pollService.form.value.isProtectedByPassword ? 'oui' : 'non' }}
|
||||||
|
</div>
|
||||||
|
<hr />
|
||||||
|
<div class="go-to-step clickable" [routerLink]="['/administration/step/4']">
|
||||||
|
<i class="fa fa-pencil"></i> Modifier
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<h3 class="title is-3">Mon nom et mon adresse e-mail</h3>
|
||||||
|
<div class="block-resume">
|
||||||
|
<div class="name">
|
||||||
|
{{ pollService.form.value.creatorPseudo }}
|
||||||
|
</div>
|
||||||
|
<div class="email">
|
||||||
|
{{ pollService.form.value.creatorEmail }}
|
||||||
|
</div>
|
||||||
|
<hr />
|
||||||
|
<div class="go-to-step" [routerLink]="['/administration/step/6']">
|
||||||
|
<i class="fa fa-pencil"></i> Modifier
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="column">
|
||||||
|
<button class="button is-secondary is-fullwidth" [routerLink]="['/administration/step/6']">
|
||||||
|
précédent
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="column">
|
||||||
|
<button class="btn is-primary is-fullwidth" (click)="createPoll()" [disabled]="!pollService.form.valid">
|
||||||
|
<i class="fa fa-save"></i>
|
||||||
|
Enregistrer le sondage
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -0,0 +1,24 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { StepSevenComponent } from './step-seven.component';
|
||||||
|
|
||||||
|
describe('StepSevenComponent', () => {
|
||||||
|
let component: StepSevenComponent;
|
||||||
|
let fixture: ComponentFixture<StepSevenComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [StepSevenComponent],
|
||||||
|
}).compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(StepSevenComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
@ -0,0 +1,26 @@
|
|||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
import { Router } from '@angular/router';
|
||||||
|
import { PollService } from '../../../../../core/services/poll.service';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-step-seven',
|
||||||
|
templateUrl: './step-seven.component.html',
|
||||||
|
styleUrls: ['./step-seven.component.scss'],
|
||||||
|
})
|
||||||
|
export class StepSevenComponent implements OnInit {
|
||||||
|
constructor(private router: Router, public pollService: PollService) {
|
||||||
|
this.pollService.step_current = 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit(): void {}
|
||||||
|
createPoll() {
|
||||||
|
this.pollService.createPoll().then(
|
||||||
|
(resp) => {
|
||||||
|
this.router.navigate(['administration/success']);
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
console.error('oops err', err);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
<div class="step-container min-height">
|
||||||
|
<app-stepper [step_current]="6" [step_max]="pollService.step_max"></app-stepper>
|
||||||
|
<div class="">
|
||||||
|
<form action="#" [formGroup]="pollService.form">
|
||||||
|
<h2 class="title is-2">
|
||||||
|
Dites à vos participants qui vous êtes !
|
||||||
|
</h2>
|
||||||
|
<label for="name">
|
||||||
|
Votre nom (obligatoire)
|
||||||
|
</label>
|
||||||
|
<input class="input" type="text" id="name" formControlName="creatorPseudo" />
|
||||||
|
<label for="email">
|
||||||
|
Votre adresse e-mail (obligatoire)
|
||||||
|
</label>
|
||||||
|
<input class="input" type="text" id="email" formControlName="creatorEmail" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column">
|
||||||
|
<button class="button is-secondary is-fullwidth" [routerLink]="['/administration/step/5']">
|
||||||
|
Précédent
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="column">
|
||||||
|
<button
|
||||||
|
class="btn is-primary is-fullwidth"
|
||||||
|
[routerLink]="['/administration/step/7']"
|
||||||
|
[disabled]="!pollService.form.valid"
|
||||||
|
>
|
||||||
|
Suivant
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -0,0 +1,24 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { StepSixComponent } from './step-six.component';
|
||||||
|
|
||||||
|
describe('StepSixComponent', () => {
|
||||||
|
let component: StepSixComponent;
|
||||||
|
let fixture: ComponentFixture<StepSixComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [StepSixComponent],
|
||||||
|
}).compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(StepSixComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
@ -0,0 +1,15 @@
|
|||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
import { PollService } from '../../../../../core/services/poll.service';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-step-six',
|
||||||
|
templateUrl: './step-six.component.html',
|
||||||
|
styleUrls: ['./step-six.component.scss'],
|
||||||
|
})
|
||||||
|
export class StepSixComponent implements OnInit {
|
||||||
|
constructor(public pollService: PollService) {
|
||||||
|
this.pollService.step_current = 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit(): void {}
|
||||||
|
}
|
@ -1,5 +1,5 @@
|
|||||||
<div class="step min-height">
|
<div class="step min-height">
|
||||||
<app-stepper [step_current]="3" [step_max]="5"></app-stepper>
|
<app-stepper [step_current]="3" [step_max]="pollService.step_max"></app-stepper>
|
||||||
<app-errors-list [form]="pollService.form"></app-errors-list>
|
<app-errors-list [form]="pollService.form"></app-errors-list>
|
||||||
<!-- choix spécialement pour les dates-->
|
<!-- choix spécialement pour les dates-->
|
||||||
<div class="calendar" *ngIf="mode_calendar">
|
<div class="calendar" *ngIf="mode_calendar">
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
<p>text-list works!</p>
|
@ -0,0 +1,24 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { TextListComponent } from './text-list.component';
|
||||||
|
|
||||||
|
describe('TextListComponent', () => {
|
||||||
|
let component: TextListComponent;
|
||||||
|
let fixture: ComponentFixture<TextListComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [TextListComponent],
|
||||||
|
}).compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(TextListComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
@ -0,0 +1,12 @@
|
|||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-text-list',
|
||||||
|
templateUrl: './text-list.component.html',
|
||||||
|
styleUrls: ['./text-list.component.scss'],
|
||||||
|
})
|
||||||
|
export class TextListComponent implements OnInit {
|
||||||
|
constructor() {}
|
||||||
|
|
||||||
|
ngOnInit(): void {}
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
<div>
|
||||||
|
<h2 class="title is-2">
|
||||||
|
<!-- {{pollService._poll.getValue().creatorPseudo}}-->
|
||||||
|
vous invite à participer à son sondage
|
||||||
|
</h2>
|
||||||
|
<div>
|
||||||
|
<div class="badge creator">
|
||||||
|
<!-- {{pollService._poll.getValue().creatorPseudo}}-->
|
||||||
|
</div>
|
||||||
|
<h3 class="title is-3">
|
||||||
|
{{ pollService.poll.title }}
|
||||||
|
</h3>
|
||||||
|
<p class="description">
|
||||||
|
Si l’administrateur du sondage a ajouter une description elle sera affiché ici.
|
||||||
|
</p>
|
||||||
|
<p class="date-end-box">
|
||||||
|
Fin du sondage le
|
||||||
|
<strong class="date-end">
|
||||||
|
14/11/2021
|
||||||
|
</strong>
|
||||||
|
</p>
|
||||||
|
<button
|
||||||
|
class="button is-primary"
|
||||||
|
[routerLink]="['consultation/' + pollService._poll.getValue().custom_url + '/simple']"
|
||||||
|
>
|
||||||
|
Je donne mes disponibilités
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -0,0 +1,24 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { ConsultationLandingComponent } from './consultation-landing.component';
|
||||||
|
|
||||||
|
describe('ConsultationLandingComponent', () => {
|
||||||
|
let component: ConsultationLandingComponent;
|
||||||
|
let fixture: ComponentFixture<ConsultationLandingComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ConsultationLandingComponent],
|
||||||
|
}).compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(ConsultationLandingComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
@ -0,0 +1,13 @@
|
|||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
import { PollService } from '../../../core/services/poll.service';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-consultation-landing',
|
||||||
|
templateUrl: './consultation-landing.component.html',
|
||||||
|
styleUrls: ['./consultation-landing.component.scss'],
|
||||||
|
})
|
||||||
|
export class ConsultationLandingComponent implements OnInit {
|
||||||
|
constructor(public pollService: PollService) {}
|
||||||
|
|
||||||
|
ngOnInit(): void {}
|
||||||
|
}
|
@ -4,18 +4,24 @@ import { RouterModule, Routes } from '@angular/router';
|
|||||||
import { ConsultationComponent } from './consultation.component';
|
import { ConsultationComponent } from './consultation.component';
|
||||||
import { WipTodoComponent } from '../../shared/components/ui/wip-todo/wip-todo.component';
|
import { WipTodoComponent } from '../../shared/components/ui/wip-todo/wip-todo.component';
|
||||||
import { PasswordPromptComponent } from './password/password-prompt/password-prompt.component';
|
import { PasswordPromptComponent } from './password/password-prompt/password-prompt.component';
|
||||||
|
import { ConsultationLandingComponent } from './consultation-landing/consultation-landing.component';
|
||||||
|
import { SuccessComponent } from './success/success.component';
|
||||||
|
import { ConsultationUserComponent } from './consultation-user/consultation-user.component';
|
||||||
|
|
||||||
const routes: Routes = [
|
const routes: Routes = [
|
||||||
{ path: 'secure/:pass_hash', component: ConsultationComponent },
|
{
|
||||||
|
path: '',
|
||||||
|
component: ConsultationLandingComponent,
|
||||||
|
children: [],
|
||||||
|
},
|
||||||
|
|
||||||
|
{ path: 'secure/:pass_hash', component: ConsultationComponent },
|
||||||
{ path: 'prompt', component: PasswordPromptComponent },
|
{ path: 'prompt', component: PasswordPromptComponent },
|
||||||
{ path: 'simple', component: WipTodoComponent },
|
{ path: 'simple', component: WipTodoComponent },
|
||||||
{ path: 'table', component: WipTodoComponent },
|
{ path: 'table', component: WipTodoComponent },
|
||||||
{
|
|
||||||
path: '',
|
{ path: 'user-info', component: ConsultationUserComponent },
|
||||||
component: ConsultationComponent,
|
{ path: 'success', component: SuccessComponent },
|
||||||
children: [],
|
|
||||||
},
|
|
||||||
];
|
];
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [RouterModule.forChild(routes)],
|
imports: [RouterModule.forChild(routes)],
|
||||||
|
@ -0,0 +1,26 @@
|
|||||||
|
<div class="user-infos">
|
||||||
|
<h2 class="title is-2">
|
||||||
|
Dites à l’organisateur et aux autres participants qui vous êtes !
|
||||||
|
</h2>
|
||||||
|
<label for="name">
|
||||||
|
Votre nom (obligatoire)
|
||||||
|
</label>
|
||||||
|
<input class="input" type="text" id="name" />
|
||||||
|
<label for="email">
|
||||||
|
Votre adresse e-mail (obligatoire)
|
||||||
|
</label>
|
||||||
|
<input class="input" type="text" id="email" />
|
||||||
|
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column">
|
||||||
|
<button class="button is-default" [routerLink]="['']">
|
||||||
|
Précédent
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="column">
|
||||||
|
<button class="button is-success" [routerLink]="['']">
|
||||||
|
Je participe
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -0,0 +1,24 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { ConsultationUserComponent } from './consultation-user.component';
|
||||||
|
|
||||||
|
describe('ConsultationUserComponent', () => {
|
||||||
|
let component: ConsultationUserComponent;
|
||||||
|
let fixture: ComponentFixture<ConsultationUserComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ConsultationUserComponent],
|
||||||
|
}).compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(ConsultationUserComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
@ -0,0 +1,13 @@
|
|||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
import { PollService } from '../../../core/services/poll.service';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-consultation-user',
|
||||||
|
templateUrl: './consultation-user.component.html',
|
||||||
|
styleUrls: ['./consultation-user.component.scss'],
|
||||||
|
})
|
||||||
|
export class ConsultationUserComponent implements OnInit {
|
||||||
|
constructor(public pollService: PollService) {}
|
||||||
|
|
||||||
|
ngOnInit(): void {}
|
||||||
|
}
|
@ -37,40 +37,7 @@
|
|||||||
<p class="card-header-icon" *ngIf="poll.owner">author : {{ poll.owner?.pseudo }}</p>
|
<p class="card-header-icon" *ngIf="poll.owner">author : {{ poll.owner?.pseudo }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<button class="export export-print btn" (click)="print()">
|
<app-actions-menu></app-actions-menu>
|
||||||
<i class="fa fa-print"></i>
|
|
||||||
Imprimer le sondage
|
|
||||||
</button>
|
|
||||||
<button class="export export-csv btn" (click)="exportCSV()">
|
|
||||||
<i class="fa fa-file-calc-o" aria-hidden="true"></i>
|
|
||||||
Exporter en .csv
|
|
||||||
</button>
|
|
||||||
<button class="export export-json btn" (click)="exportJson()">
|
|
||||||
<i class="fa fa-file-archive-o" aria-hidden="true"></i>
|
|
||||||
export json
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<button class="replicate duplicate btn" (click)="duplicate()">
|
|
||||||
<i class="fa fa-copy" aria-hidden="true"></i>
|
|
||||||
Dupliquer
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<div id="export_and_share">
|
|
||||||
<div class="sharing" *ngIf="poll">
|
|
||||||
<div class="margin-top-x8">
|
|
||||||
Partager le sondage
|
|
||||||
|
|
||||||
<i class="fa fa-share" aria-hidden="true"></i>
|
|
||||||
</div>
|
|
||||||
<p class="nobold text-14" for="copyLink">
|
|
||||||
<a href="{{ pollService.getParticipationUrl() }}">
|
|
||||||
{{ pollService.getParticipationUrl() }} </a
|
|
||||||
><app-copy-text
|
|
||||||
[textToCopy]="pollService.getParticipationUrl()"
|
|
||||||
></app-copy-text>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
@ -120,13 +87,11 @@
|
|||||||
<i class="fa fa-spinner fa-4x"></i>
|
<i class="fa fa-spinner fa-4x"></i>
|
||||||
</section>
|
</section>
|
||||||
<button
|
<button
|
||||||
class="btn btn-block submit-votestack is-primary"
|
class="button is-block submit-votestack is-primary"
|
||||||
(click)="addVoteStack()"
|
(click)="addVoteStack()"
|
||||||
*ngIf="!storageService.vote_stack || !storageService.vote_stack.id"
|
*ngIf="!storageService.vote_stack || !storageService.vote_stack.id"
|
||||||
>
|
>
|
||||||
<i class="fa fa-paper-plane" aria-hidden="true"></i> Envoyer
|
<i class="fa fa-paper-plane" aria-hidden="true"></i> Envoyer
|
||||||
|
|
||||||
<!-- {{ storageService.vote_stack.votes.length }} réponses-->
|
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
class="btn btn--primary btn-block submit-votestack update"
|
class="btn btn--primary btn-block submit-votestack update"
|
||||||
@ -139,7 +104,11 @@
|
|||||||
|
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<app-comments [poll]="poll" [vote_stack]="storageService.vote_stack"></app-comments>
|
<app-comments
|
||||||
|
*ngIf="poll.allow_comments"
|
||||||
|
[poll]="poll"
|
||||||
|
[vote_stack]="storageService.vote_stack"
|
||||||
|
></app-comments>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -151,8 +120,6 @@
|
|||||||
*ngIf="!storageService.vote_stack || !storageService.vote_stack.id"
|
*ngIf="!storageService.vote_stack || !storageService.vote_stack.id"
|
||||||
>
|
>
|
||||||
<i class="fa fa-paper-plane" aria-hidden="true"></i> Envoyer
|
<i class="fa fa-paper-plane" aria-hidden="true"></i> Envoyer
|
||||||
|
|
||||||
<!-- {{ storageService.vote_stack.votes.length }} réponses-->
|
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
class="btn btn--primary btn-block submit-votestack update"
|
class="btn btn--primary btn-block submit-votestack update"
|
||||||
@ -162,10 +129,6 @@
|
|||||||
<i class="fa fa-edit" aria-hidden="true"></i> Mettre à jour
|
<i class="fa fa-edit" aria-hidden="true"></i> Mettre à jour
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- <footer class="card-footer" *ngIf="!isArchived">-->
|
|
||||||
<!-- TODO links-->
|
|
||||||
<!-- </footer>-->
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -15,8 +15,8 @@ import { ToastService } from '../../core/services/toast.service';
|
|||||||
styleUrls: ['./consultation.component.scss'],
|
styleUrls: ['./consultation.component.scss'],
|
||||||
})
|
})
|
||||||
export class ConsultationComponent implements OnInit, OnDestroy {
|
export class ConsultationComponent implements OnInit, OnDestroy {
|
||||||
public isCompactMode = false;
|
// public isCompactMode = false;
|
||||||
// public isCompactMode = true;
|
public isCompactMode = true;
|
||||||
public poll: Poll;
|
public poll: Poll;
|
||||||
public pollSlug: string;
|
public pollSlug: string;
|
||||||
public pass_hash: string;
|
public pass_hash: string;
|
||||||
@ -139,23 +139,4 @@ export class ConsultationComponent implements OnInit, OnDestroy {
|
|||||||
this.toastService.display('erreur à l enregistrement');
|
this.toastService.display('erreur à l enregistrement');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* export all the poll data available to the public as a CSV single file
|
|
||||||
*/
|
|
||||||
exportCSV(): void {
|
|
||||||
this.utils.exportCSV(this.poll);
|
|
||||||
}
|
|
||||||
|
|
||||||
exportJson(): void {
|
|
||||||
this.utils.download('export_poll_' + this.pollSlug + '.json', JSON.stringify(this.poll));
|
|
||||||
}
|
|
||||||
|
|
||||||
duplicate(): void {
|
|
||||||
alert('TODO');
|
|
||||||
}
|
|
||||||
|
|
||||||
print(): void {
|
|
||||||
alert('TODO');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,10 @@ import { ChoiceButtonComponent } from '../../shared/components/choice-item/choic
|
|||||||
import { PasswordPromptComponent } from './password/password-prompt/password-prompt.component';
|
import { PasswordPromptComponent } from './password/password-prompt/password-prompt.component';
|
||||||
import { ChoiceDetailsComponent } from '../../shared/components/choice-details/choice-details.component';
|
import { ChoiceDetailsComponent } from '../../shared/components/choice-details/choice-details.component';
|
||||||
import { CoreModule } from '../../core/core.module';
|
import { CoreModule } from '../../core/core.module';
|
||||||
|
import { ConsultationLandingComponent } from './consultation-landing/consultation-landing.component';
|
||||||
|
import { ConsultationUserComponent } from './consultation-user/consultation-user.component';
|
||||||
|
import { SuccessComponent } from './success/success.component';
|
||||||
|
import { AdministrationModule } from '../administration/administration.module';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [
|
declarations: [
|
||||||
@ -19,7 +23,16 @@ import { CoreModule } from '../../core/core.module';
|
|||||||
PollResultsDetailedComponent,
|
PollResultsDetailedComponent,
|
||||||
ChoiceButtonComponent,
|
ChoiceButtonComponent,
|
||||||
PasswordPromptComponent,
|
PasswordPromptComponent,
|
||||||
|
ConsultationLandingComponent,
|
||||||
|
ConsultationUserComponent,
|
||||||
|
SuccessComponent,
|
||||||
|
],
|
||||||
|
imports: [
|
||||||
|
CommonModule,
|
||||||
|
ConsultationRoutingModule,
|
||||||
|
SharedModule,
|
||||||
|
TranslateModule.forChild({ extend: true }),
|
||||||
|
AdministrationModule,
|
||||||
],
|
],
|
||||||
imports: [CommonModule, ConsultationRoutingModule, SharedModule, TranslateModule.forChild({ extend: true })],
|
|
||||||
})
|
})
|
||||||
export class ConsultationModule {}
|
export class ConsultationModule {}
|
||||||
|
18
src/app/features/consultation/success/success.component.html
Normal file
18
src/app/features/consultation/success/success.component.html
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<div class="success">
|
||||||
|
<h2 class="title is-2">
|
||||||
|
Votre participation a bien été prise en compte !
|
||||||
|
</h2>
|
||||||
|
<p class="conclusion">
|
||||||
|
Vous avez participé au sondage « Quand pour le resto ? ». Vous pouvez modifier vos votes, voir les votes des
|
||||||
|
autres participants ou échanger des messages avec eux. Pour ça, cliquez sur « Voir le sondage ».
|
||||||
|
</p>
|
||||||
|
<button
|
||||||
|
class="button is-primary"
|
||||||
|
[routerLink]="['consultation/' + pollService._poll.getValue().custom_url + '/simple']"
|
||||||
|
>
|
||||||
|
Voir le sondage
|
||||||
|
</button>
|
||||||
|
<button class="button is-primary" [routerLink]="['/']">
|
||||||
|
Aller à l’acceuil
|
||||||
|
</button>
|
||||||
|
</div>
|
@ -0,0 +1,24 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { SuccessComponent } from './success.component';
|
||||||
|
|
||||||
|
describe('SuccessComponent', () => {
|
||||||
|
let component: SuccessComponent;
|
||||||
|
let fixture: ComponentFixture<SuccessComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [SuccessComponent],
|
||||||
|
}).compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(SuccessComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
13
src/app/features/consultation/success/success.component.ts
Normal file
13
src/app/features/consultation/success/success.component.ts
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
import { PollService } from '../../../core/services/poll.service';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-success',
|
||||||
|
templateUrl: './success.component.html',
|
||||||
|
styleUrls: ['./success.component.scss'],
|
||||||
|
})
|
||||||
|
export class SuccessComponent implements OnInit {
|
||||||
|
constructor(public pollService: PollService) {}
|
||||||
|
|
||||||
|
ngOnInit(): void {}
|
||||||
|
}
|
86
src/styles/partials/_datepicker.scss
Normal file
86
src/styles/partials/_datepicker.scss
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
// calendar primeng
|
||||||
|
.calendar {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.p-datepicker {
|
||||||
|
border: solid 1px $logo_color;
|
||||||
|
padding: 0.5em;
|
||||||
|
margin: 1em auto;
|
||||||
|
|
||||||
|
.p-datepicker-title,
|
||||||
|
.p-datepicker-calendar thead tr th span {
|
||||||
|
color: $secondary_color !important;
|
||||||
|
text-align: center;
|
||||||
|
width: 100%;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
p-button,
|
||||||
|
button {
|
||||||
|
border: solid 1px $secondary_color !important;
|
||||||
|
color: $secondary_color !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-datepicker-buttonbar {
|
||||||
|
margin-top: 0.5em;
|
||||||
|
button {
|
||||||
|
min-width: 15em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-datepicker-month {
|
||||||
|
margin-right: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-datepicker-weeknumber span {
|
||||||
|
border-right: 1px solid $secondary_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-datepicker-today span {
|
||||||
|
font-weight: bold;
|
||||||
|
border: solid 3px $secondary_color !important;
|
||||||
|
background: $white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-datepicker-calendar td span {
|
||||||
|
padding: 1.5em 0.5em;
|
||||||
|
width: 3.5em;
|
||||||
|
transition: all ease 0.5s;
|
||||||
|
background: $white;
|
||||||
|
border: solid 1px $secondary_color;
|
||||||
|
color: $secondary_color;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: mix($white, $secondary_color);
|
||||||
|
color: $white;
|
||||||
|
transition: all ease 0.2s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
table td > span {
|
||||||
|
border-radius: 0.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-highlight {
|
||||||
|
background: $secondary_color !important;
|
||||||
|
color: $white !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-disabled {
|
||||||
|
background: $d-grey;
|
||||||
|
color: $grey;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-datepicker-other-month {
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
// weekend days
|
||||||
|
tr > td {
|
||||||
|
&:nth-of-type(6),
|
||||||
|
&:nth-of-type(7) {
|
||||||
|
//border-left: 1px solid $border-color;
|
||||||
|
background: $bg-grey;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,7 @@
|
|||||||
@charset "UTF-8";
|
@charset "UTF-8";
|
||||||
|
|
||||||
|
@import 'datepicker';
|
||||||
|
|
||||||
.input:hover,
|
.input:hover,
|
||||||
input:hover,
|
input:hover,
|
||||||
select:hover,
|
select:hover,
|
||||||
@ -11,6 +14,7 @@ select.is-hovered,
|
|||||||
.select select.is-hovered {
|
.select select.is-hovered {
|
||||||
border-color: $border-color !important;
|
border-color: $border-color !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
app-step-one,
|
app-step-one,
|
||||||
app-step-two,
|
app-step-two,
|
||||||
app-step-three,
|
app-step-three,
|
||||||
@ -18,11 +22,13 @@ app-step-four {
|
|||||||
padding: 2em 2.5em;
|
padding: 2em 2.5em;
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
app-step-five {
|
app-step-five {
|
||||||
app-stepper {
|
app-stepper {
|
||||||
padding: 2em 2.5em;
|
padding: 2em 2.5em;
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.container {
|
.container {
|
||||||
padding: 2em;
|
padding: 2em;
|
||||||
}
|
}
|
||||||
@ -265,78 +271,12 @@ mat-checkbox {
|
|||||||
padding: 1em;
|
padding: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
// calendar primeng
|
|
||||||
.p-datepicker {
|
|
||||||
border: solid 1px $logo_color;
|
|
||||||
padding: 0.5em;
|
|
||||||
margin: 1em auto;
|
|
||||||
|
|
||||||
p-button,
|
|
||||||
button {
|
|
||||||
border: solid 1px $secondary_color !important;
|
|
||||||
color: $secondary_color !important;
|
|
||||||
}
|
|
||||||
.p-datepicker-buttonbar {
|
|
||||||
margin-top: 0.5em;
|
|
||||||
}
|
|
||||||
.p-datepicker-month {
|
|
||||||
margin-right: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-datepicker-weeknumber span {
|
|
||||||
border-right: 1px solid $secondary_color;
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-datepicker-today td span {
|
|
||||||
font-weight: bold;
|
|
||||||
border: solid 3px $secondary_color;
|
|
||||||
background: $white;
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-datepicker-calendar td span {
|
|
||||||
padding: 1.5em 0.5em;
|
|
||||||
width: 3.5em;
|
|
||||||
transition: all ease 0.5s;
|
|
||||||
background: $white;
|
|
||||||
border: solid 1px $secondary_color;
|
|
||||||
color: $secondary_color;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
background: mix($white, $secondary_color);
|
|
||||||
color: $white;
|
|
||||||
transition: all ease 0.2s;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
table td > span {
|
|
||||||
border-radius: 0.25em;
|
|
||||||
}
|
|
||||||
.p-highlight {
|
|
||||||
background: $secondary_color !important;
|
|
||||||
color: $white !important;
|
|
||||||
}
|
|
||||||
.p-disabled {
|
|
||||||
background: $d-grey;
|
|
||||||
color: $grey;
|
|
||||||
}
|
|
||||||
.p-datepicker-other-month {
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
// weekend days
|
|
||||||
tr > td {
|
|
||||||
&:nth-of-type(6),
|
|
||||||
&:nth-of-type(7) {
|
|
||||||
//border-left: 1px solid $border-color;
|
|
||||||
background: $grey-lighter;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.advanced-config {
|
.advanced-config {
|
||||||
.box {
|
.box {
|
||||||
background: $light;
|
background: $light;
|
||||||
border: 3px solid $primary-color;
|
border: 3px solid $primary-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.work-in-progress {
|
.work-in-progress {
|
||||||
padding: 1em 2em;
|
padding: 1em 2em;
|
||||||
background: $border-color;
|
background: $border-color;
|
||||||
@ -345,5 +285,42 @@ mat-checkbox {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.step-container {
|
.step-container {
|
||||||
|
padding: 1em 2em;
|
||||||
@extend .container, .is-widescreen;
|
@extend .container, .is-widescreen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// resume de la création de sondage
|
||||||
|
.step-resume {
|
||||||
|
.content {
|
||||||
|
.title {
|
||||||
|
&.is-2,
|
||||||
|
&.is-3 {
|
||||||
|
color: $secondary_color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.block-resume {
|
||||||
|
border-radius: 0.25em;
|
||||||
|
background: $bg-grey;
|
||||||
|
padding: 1em;
|
||||||
|
margin-bottom: 0.5em;
|
||||||
|
|
||||||
|
hr {
|
||||||
|
margin: 0.5em -1em;
|
||||||
|
background: $rules;
|
||||||
|
}
|
||||||
|
|
||||||
|
.go-to-step {
|
||||||
|
@extend .clickable;
|
||||||
|
color: $secondary_color;
|
||||||
|
padding: 1.5em;
|
||||||
|
border-radius: 0.25em;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: $secondary_color;
|
||||||
|
color: $white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -25,7 +25,8 @@ $beige-lighter: #eff0eb;
|
|||||||
|
|
||||||
$d-primary: #3e3882; // bleu 800
|
$d-primary: #3e3882; // bleu 800
|
||||||
$d-primary-intense: #6359cf; // bleu 600
|
$d-primary-intense: #6359cf; // bleu 600
|
||||||
$d-grey: #f6f5fd;
|
$d-grey: #f6f5fd; // bleu 300
|
||||||
|
$d-rule: #e2e0fa; // bleu 100
|
||||||
$d-neutral: #767486;
|
$d-neutral: #767486;
|
||||||
$d-alt: #a9607f;
|
$d-alt: #a9607f;
|
||||||
|
|
||||||
@ -42,6 +43,7 @@ $d-error-text: #d51b38;
|
|||||||
$primary_color: $d-primary;
|
$primary_color: $d-primary;
|
||||||
$primary: $d-primary;
|
$primary: $d-primary;
|
||||||
$secondary_color: $d-primary-intense;
|
$secondary_color: $d-primary-intense;
|
||||||
|
$bg-grey: $d-grey;
|
||||||
$font_color: $black;
|
$font_color: $black;
|
||||||
$logo_color: $d-primary;
|
$logo_color: $d-primary;
|
||||||
$logo_color_2: $d-primary-intense;
|
$logo_color_2: $d-primary-intense;
|
||||||
@ -49,6 +51,7 @@ $legend_color: $d-info-text;
|
|||||||
$legend_color_2: $d-info;
|
$legend_color_2: $d-info;
|
||||||
$choice_select_border_color: $d-info;
|
$choice_select_border_color: $d-info;
|
||||||
$hover-color: $d-neutral;
|
$hover-color: $d-neutral;
|
||||||
|
$rules: $d-rule;
|
||||||
$border-color: $d-neutral;
|
$border-color: $d-neutral;
|
||||||
$grey-dark: $d-primary;
|
$grey-dark: $d-primary;
|
||||||
$grey-lighter: $beige-light;
|
$grey-lighter: $beige-light;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user