forked from tykayn/funky-framadate-front
:gears: refacto date and poll utilities functions in a separate class
This commit is contained in:
parent
ab23b9b256
commit
c5b5276400
59
src/app/config/DateUtilities.ts
Normal file
59
src/app/config/DateUtilities.ts
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
export class DateUtilities {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* add some days to a date, to compute intervals
|
||||||
|
* @param days
|
||||||
|
* @param date
|
||||||
|
*/
|
||||||
|
addDaysToDate(days: number, date: Date) {
|
||||||
|
date = new Date(date.valueOf());
|
||||||
|
date.setDate(date.getDate() + days);
|
||||||
|
return date;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param d1
|
||||||
|
* @param d2
|
||||||
|
* @param interval
|
||||||
|
*/
|
||||||
|
getDatesInRange(d1: Date, d2: Date, interval: number) {
|
||||||
|
d1 = new Date(d1);
|
||||||
|
d2 = new Date(d2);
|
||||||
|
const dates = [];
|
||||||
|
while (+d1 < +d2) {
|
||||||
|
dates.push({
|
||||||
|
literal: this.formateDate(d1),
|
||||||
|
date_object: d1
|
||||||
|
});
|
||||||
|
d1.setDate(d1.getDate() + interval)
|
||||||
|
}
|
||||||
|
return dates.slice(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get the number of days between two dates
|
||||||
|
* @param d1
|
||||||
|
* @param d2
|
||||||
|
*/
|
||||||
|
dayDiff(d1: Date, d2: Date): Number {
|
||||||
|
return Number(((d2.getTime()) - (d1.getTime()) / 31536000000));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* format a date object to the date format used by the inputs of type date
|
||||||
|
* YYYY-MM-DD
|
||||||
|
* @param date
|
||||||
|
*/
|
||||||
|
formateDate(date) {
|
||||||
|
return [
|
||||||
|
date.getFullYear(),
|
||||||
|
this.getDoubleDigits(date.getMonth() + 1),
|
||||||
|
this.getDoubleDigits(date.getDate()),
|
||||||
|
].join('-')
|
||||||
|
}
|
||||||
|
|
||||||
|
getDoubleDigits(str) {
|
||||||
|
return ("00" + str).slice(-2);
|
||||||
|
}
|
||||||
|
}
|
61
src/app/config/PollUtilities.ts
Normal file
61
src/app/config/PollUtilities.ts
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
import {HttpHeaders} from "@angular/common/http";
|
||||||
|
import {PollConfig} from "./PollConfig";
|
||||||
|
|
||||||
|
export class PollUtilities {
|
||||||
|
// utils functions
|
||||||
|
/**
|
||||||
|
* generate unique id to have a default url for future poll
|
||||||
|
*/
|
||||||
|
makeUuid() {
|
||||||
|
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
||||||
|
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
|
||||||
|
return v.toString(16);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* make a uniq slug for the current poll creation
|
||||||
|
* @param str
|
||||||
|
*/
|
||||||
|
makeSlug(config: PollConfig) {
|
||||||
|
let str = '';
|
||||||
|
str = config.creationDate.getFullYear() + '_' + (config.creationDate.getMonth() + 1) + '_' + config.creationDate.getDate() + '_' + config.myName + '_' + config.title;
|
||||||
|
str = str.replace(/^\s+|\s+$/g, ''); // trim
|
||||||
|
str = str.toLowerCase();
|
||||||
|
|
||||||
|
// remove accents, swap ñ for n, etc
|
||||||
|
var from = "àáäâèéëêìíïîòóöôùúüûñç·/_,:;";
|
||||||
|
var to = "aaaaeeeeiiiioooouuuunc------";
|
||||||
|
for (var i = 0, l = from.length; i < l; i++) {
|
||||||
|
str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
str = str.replace(/[^a-z0-9 -]/g, '') // remove invalid chars
|
||||||
|
.replace(/\s+/g, '-') // collapse whitespace and replace by -
|
||||||
|
.replace(/-+/g, '-'); // collapse dashes
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* prepare headers like the charset and json type for any call to the backend
|
||||||
|
* @param bodyContent
|
||||||
|
*/
|
||||||
|
makeHeaders(bodyContent?: any) {
|
||||||
|
|
||||||
|
const headerDict = {
|
||||||
|
'Charset': 'UTF-8',
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'Accept': 'application/json',
|
||||||
|
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
|
||||||
|
'Access-Control-Allow-Origin': '*'
|
||||||
|
};
|
||||||
|
|
||||||
|
const requestOptions = {
|
||||||
|
headers: new HttpHeaders(headerDict),
|
||||||
|
body: bodyContent
|
||||||
|
};
|
||||||
|
|
||||||
|
return requestOptions;
|
||||||
|
}
|
||||||
|
}
|
@ -4,6 +4,7 @@ import {BaseComponent} from '../base-page/base.component';
|
|||||||
import {DOCUMENT} from '@angular/common';
|
import {DOCUMENT} from '@angular/common';
|
||||||
import {MessageService} from "primeng/api";
|
import {MessageService} from "primeng/api";
|
||||||
import {defaultTimeOfDay} from "../../config/defaultConfigs";
|
import {defaultTimeOfDay} from "../../config/defaultConfigs";
|
||||||
|
import {DateUtilities} from "../../config/DateUtilities";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'framadate-dates',
|
selector: 'framadate-dates',
|
||||||
@ -20,6 +21,7 @@ export class DatesComponent extends BaseComponent implements OnInit {
|
|||||||
constructor(public config: ConfigService,
|
constructor(public config: ConfigService,
|
||||||
private cd: ChangeDetectorRef,
|
private cd: ChangeDetectorRef,
|
||||||
private messageService: MessageService,
|
private messageService: MessageService,
|
||||||
|
private dateUtilities: DateUtilities,
|
||||||
@Inject(DOCUMENT) private document: any
|
@Inject(DOCUMENT) private document: any
|
||||||
) {
|
) {
|
||||||
super(config);
|
super(config);
|
||||||
@ -28,7 +30,7 @@ export class DatesComponent extends BaseComponent implements OnInit {
|
|||||||
countDays() {
|
countDays() {
|
||||||
// compute the number of days in the date interval
|
// compute the number of days in the date interval
|
||||||
if (this.endDateInterval && this.startDateInterval) {
|
if (this.endDateInterval && this.startDateInterval) {
|
||||||
this.intervalDays = (this.dayDiff(this.endDateInterval, this.startDateInterval)).toFixed(0)
|
this.intervalDays = (this.dateUtilities.dayDiff(this.endDateInterval, this.startDateInterval)).toFixed(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -39,7 +41,7 @@ export class DatesComponent extends BaseComponent implements OnInit {
|
|||||||
let dateCurrent = new Date();
|
let dateCurrent = new Date();
|
||||||
const dateJson = dateCurrent.toISOString();
|
const dateJson = dateCurrent.toISOString();
|
||||||
this.startDateInterval = dateJson.substring(0, 10);
|
this.startDateInterval = dateJson.substring(0, 10);
|
||||||
this.endDateInterval = this.addDaysToDate(this.intervalDaysDefault, dateCurrent).toISOString().substring(0, 10);
|
this.endDateInterval = this.dateUtilities.addDaysToDate(this.intervalDaysDefault, dateCurrent).toISOString().substring(0, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
addDate() {
|
addDate() {
|
||||||
@ -77,16 +79,6 @@ export class DatesComponent extends BaseComponent implements OnInit {
|
|||||||
this.config.timeList = defaultTimeOfDay;
|
this.config.timeList = defaultTimeOfDay;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* add some days to a date, to compute intervals
|
|
||||||
* @param days
|
|
||||||
* @param date
|
|
||||||
*/
|
|
||||||
addDaysToDate(days: number, date: Date) {
|
|
||||||
date = new Date(date.valueOf());
|
|
||||||
date.setDate(date.getDate() + days);
|
|
||||||
return date;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* add a time period to a specific date choice,
|
* add a time period to a specific date choice,
|
||||||
@ -123,7 +115,7 @@ export class DatesComponent extends BaseComponent implements OnInit {
|
|||||||
* add all the dates between the start and end dates in the interval section
|
* add all the dates between the start and end dates in the interval section
|
||||||
*/
|
*/
|
||||||
addIntervalOfDates() {
|
addIntervalOfDates() {
|
||||||
let newIntervalArray = this.getDatesInRange(this.startDateInterval, this.endDateInterval, 1);
|
let newIntervalArray = this.dateUtilities.getDatesInRange(this.startDateInterval, this.endDateInterval, 1);
|
||||||
|
|
||||||
const converted = [];
|
const converted = [];
|
||||||
newIntervalArray.forEach(element => {
|
newIntervalArray.forEach(element => {
|
||||||
@ -144,49 +136,5 @@ export class DatesComponent extends BaseComponent implements OnInit {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param d1
|
|
||||||
* @param d2
|
|
||||||
* @param interval
|
|
||||||
*/
|
|
||||||
getDatesInRange(d1: Date, d2: Date, interval: number) {
|
|
||||||
d1 = new Date(d1);
|
|
||||||
d2 = new Date(d2);
|
|
||||||
const dates = [];
|
|
||||||
while (+d1 < +d2) {
|
|
||||||
dates.push({
|
|
||||||
literal: this.formateDate(d1),
|
|
||||||
date_object: d1
|
|
||||||
});
|
|
||||||
d1.setDate(d1.getDate() + interval)
|
|
||||||
}
|
|
||||||
return dates.slice(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* get the number of days between two dates
|
|
||||||
* @param d1
|
|
||||||
* @param d2
|
|
||||||
*/
|
|
||||||
dayDiff(d1: Date, d2: Date): Number {
|
|
||||||
return Number(((d2.getTime()) - (d1.getTime()) / 31536000000));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* format a date object to the date format used by the inputs of type date
|
|
||||||
* YYYY-MM-DD
|
|
||||||
* @param date
|
|
||||||
*/
|
|
||||||
formateDate(date) {
|
|
||||||
return [
|
|
||||||
date.getFullYear(),
|
|
||||||
this.getDoubleDigits(date.getMonth() + 1),
|
|
||||||
this.getDoubleDigits(date.getDate()),
|
|
||||||
].join('-')
|
|
||||||
}
|
|
||||||
|
|
||||||
getDoubleDigits(str) {
|
|
||||||
return ("00" + str).slice(-2);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -9,19 +9,18 @@
|
|||||||
<div
|
<div
|
||||||
class='loaded-poll'
|
class='loaded-poll'
|
||||||
*ngIf='!config.loading && config.currentPoll' >
|
*ngIf='!config.loading && config.currentPoll' >
|
||||||
<div id='table' >
|
|
||||||
<!-- <framadate-voting-navigation ></framadate-voting-navigation >-->
|
|
||||||
<framadate-voting-summary ></framadate-voting-summary >
|
|
||||||
</div >
|
|
||||||
|
|
||||||
<div id='poll_comments' >
|
|
||||||
<framadate-comments-list ></framadate-comments-list >
|
|
||||||
</div >
|
|
||||||
<div id='choices' >
|
<div id='choices' >
|
||||||
|
|
||||||
<framadate-choices-list ></framadate-choices-list >
|
<framadate-choices-list ></framadate-choices-list >
|
||||||
</div >
|
</div >
|
||||||
|
<div id='table' >
|
||||||
|
<!-- <framadate-voting-navigation ></framadate-voting-navigation >-->
|
||||||
|
<framadate-voting-summary ></framadate-voting-summary >
|
||||||
|
</div >
|
||||||
|
<div id='poll_comments' >
|
||||||
|
<framadate-comments-list ></framadate-comments-list >
|
||||||
|
</div >
|
||||||
<div id='graph' >
|
<div id='graph' >
|
||||||
<!--<framadate-voting-graph ></framadate-voting-graph >-->
|
<!--<framadate-voting-graph ></framadate-voting-graph >-->
|
||||||
</div >
|
</div >
|
||||||
|
@ -2,6 +2,7 @@ import {Component, OnInit} from '@angular/core';
|
|||||||
import {BaseComponent} from '../base-page/base.component';
|
import {BaseComponent} from '../base-page/base.component';
|
||||||
import {ConfigService} from '../../services/config.service';
|
import {ConfigService} from '../../services/config.service';
|
||||||
import {environment} from "../../../environments/environment";
|
import {environment} from "../../../environments/environment";
|
||||||
|
import {PollUtilities} from "../../config/PollUtilities";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'framadate-visibility',
|
selector: 'framadate-visibility',
|
||||||
@ -13,12 +14,13 @@ export class VisibilityComponent extends BaseComponent implements OnInit {
|
|||||||
baseUrl = environment.baseApiHref;
|
baseUrl = environment.baseApiHref;
|
||||||
environment = environment;
|
environment = environment;
|
||||||
|
|
||||||
constructor(public config: ConfigService) {
|
constructor(public config: ConfigService,
|
||||||
|
public utils: PollUtilities) {
|
||||||
super(config);
|
super(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.config.customUrl = this.config.makeSlug();
|
this.config.customUrl = this.utils.makeSlug(this.config);
|
||||||
this.config.expirationDate = (this.config.addDaysToDate(this.config.expiracyDateDefaultInDays, new Date())).toISOString().substring(0, 10);
|
this.config.expirationDate = (this.config.addDaysToDate(this.config.expiracyDateDefaultInDays, new Date())).toISOString().substring(0, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import {Injectable} from '@angular/core';
|
import {Injectable} from '@angular/core';
|
||||||
import {PollConfig} from '../config/PollConfig';
|
import {PollConfig} from '../config/PollConfig';
|
||||||
import {HttpClient, HttpHeaders} from "@angular/common/http";
|
import {HttpClient} from "@angular/common/http";
|
||||||
import {environment} from "../../environments/environment";
|
import {environment} from "../../environments/environment";
|
||||||
import {ConfirmationService, MessageService} from 'primeng/api';
|
import {ConfirmationService, MessageService} from 'primeng/api';
|
||||||
import {Router} from "@angular/router";
|
import {Router} from "@angular/router";
|
||||||
@ -8,6 +8,7 @@ import {mockMyPolls} from "../config/mocks/mockmypolls";
|
|||||||
import {defaultAnswers, defaultDates, defaultTimeOfDay} from "../config/defaultConfigs";
|
import {defaultAnswers, defaultDates, defaultTimeOfDay} from "../config/defaultConfigs";
|
||||||
import {mockPoll3} from "../config/mocks/mock-poll3";
|
import {mockPoll3} from "../config/mocks/mock-poll3";
|
||||||
import {mockSuccessVote} from "../config/mocks/mock-success-vote";
|
import {mockSuccessVote} from "../config/mocks/mock-success-vote";
|
||||||
|
import {PollUtilities} from "../config/PollUtilities";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* le service transverse à chaque page qui permet de syncroniser la configuration de sondage souhaitée
|
* le service transverse à chaque page qui permet de syncroniser la configuration de sondage souhaitée
|
||||||
@ -24,10 +25,20 @@ export class ConfigService extends PollConfig {
|
|||||||
constructor(private http: HttpClient,
|
constructor(private http: HttpClient,
|
||||||
private messageService: MessageService,
|
private messageService: MessageService,
|
||||||
private router: Router,
|
private router: Router,
|
||||||
|
private utils: PollUtilities,
|
||||||
private confirmationService: ConfirmationService,
|
private confirmationService: ConfirmationService,
|
||||||
) {
|
) {
|
||||||
super();
|
super();
|
||||||
// fill in mock values if we are not in production environment
|
this.fillValuesOnDevEnv();
|
||||||
|
}
|
||||||
|
|
||||||
|
set(key, val) {
|
||||||
|
this[key] = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
// fill in mock values if we are not in production environment
|
||||||
|
fillValuesOnDevEnv() {
|
||||||
|
|
||||||
if (!environment.production) {
|
if (!environment.production) {
|
||||||
console.info(' ######### framadate ######### we are not in production env, filling with mock values');
|
console.info(' ######### framadate ######### we are not in production env, filling with mock values');
|
||||||
this.currentPoll = mockPoll3;
|
this.currentPoll = mockPoll3;
|
||||||
@ -38,50 +49,6 @@ export class ConfigService extends PollConfig {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
set(key, val) {
|
|
||||||
this[key] = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
clear() {
|
|
||||||
this.messageService.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
// utils functions
|
|
||||||
/**
|
|
||||||
* generate unique id to have a default url for future poll
|
|
||||||
*/
|
|
||||||
makeUuid() {
|
|
||||||
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
|
||||||
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
|
|
||||||
return v.toString(16);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* make a uniq slug for the current poll creation
|
|
||||||
* @param str
|
|
||||||
*/
|
|
||||||
makeSlug(str?: string) {
|
|
||||||
if (!str) {
|
|
||||||
str = this.creationDate.getFullYear() + '_' + (this.creationDate.getMonth() + 1) + '_' + this.creationDate.getDate() + '_' + this.myName + '_' + this.title;
|
|
||||||
}
|
|
||||||
str = str.replace(/^\s+|\s+$/g, ''); // trim
|
|
||||||
str = str.toLowerCase();
|
|
||||||
|
|
||||||
// remove accents, swap ñ for n, etc
|
|
||||||
var from = "àáäâèéëêìíïîòóöôùúüûñç·/_,:;";
|
|
||||||
var to = "aaaaeeeeiiiioooouuuunc------";
|
|
||||||
for (var i = 0, l = from.length; i < l; i++) {
|
|
||||||
str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i));
|
|
||||||
}
|
|
||||||
|
|
||||||
str = str.replace(/[^a-z0-9 -]/g, '') // remove invalid chars
|
|
||||||
.replace(/\s+/g, '-') // collapse whitespace and replace by -
|
|
||||||
.replace(/-+/g, '-'); // collapse dashes
|
|
||||||
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* add some days to a date, to compute intervals
|
* add some days to a date, to compute intervals
|
||||||
* @param days
|
* @param days
|
||||||
@ -128,39 +95,18 @@ export class ConfigService extends PollConfig {
|
|||||||
return jsonConfig
|
return jsonConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* prepare headers like the charset and json type for any call to the backend
|
|
||||||
* @param bodyContent
|
|
||||||
*/
|
|
||||||
makeHeaders(bodyContent?: any) {
|
|
||||||
|
|
||||||
const headerDict = {
|
|
||||||
'Charset': 'UTF-8',
|
|
||||||
'Content-Type': 'application/json',
|
|
||||||
'Accept': 'application/json',
|
|
||||||
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
|
|
||||||
'Access-Control-Allow-Origin': '*'
|
|
||||||
};
|
|
||||||
|
|
||||||
const requestOptions = {
|
|
||||||
headers: new HttpHeaders(headerDict),
|
|
||||||
body: bodyContent
|
|
||||||
};
|
|
||||||
|
|
||||||
return requestOptions;
|
|
||||||
}
|
|
||||||
|
|
||||||
checkIfSlugIsUniqueInDatabase(slug: string = '') {
|
checkIfSlugIsUniqueInDatabase(slug: string = '') {
|
||||||
this.customUrlIsUnique = null;
|
this.customUrlIsUnique = null;
|
||||||
if (!slug) {
|
if (!slug) {
|
||||||
slug = this.makeSlug();
|
slug = this.utils.makeSlug(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
// TODO
|
// TODO
|
||||||
this.todo('check slug is unique');
|
this.todo('check slug is unique');
|
||||||
this.http.get(`${this.baseHref}/check-slug-is-uniq/${slug}`,
|
this.http.get(`${this.baseHref}/check-slug-is-uniq/${slug}`,
|
||||||
this.makeHeaders({slug: this.customUrl}),
|
this.utils.makeHeaders({slug: this.customUrl}),
|
||||||
)
|
)
|
||||||
.subscribe((res: any) => {
|
.subscribe((res: any) => {
|
||||||
|
|
||||||
@ -177,7 +123,6 @@ export class ConfigService extends PollConfig {
|
|||||||
*/
|
*/
|
||||||
findPollsByEmail(email: string) {
|
findPollsByEmail(email: string) {
|
||||||
|
|
||||||
|
|
||||||
this.findLocalStorageData();
|
this.findLocalStorageData();
|
||||||
// If no key is found in the localstorage, ask the backend to send an email to the user
|
// If no key is found in the localstorage, ask the backend to send an email to the user
|
||||||
|
|
||||||
@ -187,7 +132,7 @@ export class ConfigService extends PollConfig {
|
|||||||
this.todo('send email for real : TODO');
|
this.todo('send email for real : TODO');
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
this.http.get(`${this.baseHref}/send-polls-to-user/${this.myEmail}`,
|
this.http.get(`${this.baseHref}/send-polls-to-user/${this.myEmail}`,
|
||||||
this.makeHeaders(),
|
this.utils.makeHeaders(),
|
||||||
)
|
)
|
||||||
.subscribe(res => {
|
.subscribe(res => {
|
||||||
// message: 'Trouvé! Allez voir votre boite email',
|
// message: 'Trouvé! Allez voir votre boite email',
|
||||||
@ -232,7 +177,7 @@ export class ConfigService extends PollConfig {
|
|||||||
getPollByURL(url: string) {
|
getPollByURL(url: string) {
|
||||||
|
|
||||||
this.todo();
|
this.todo();
|
||||||
return this.http.get(`${this.baseHref}/poll/slug/${url}`, this.makeHeaders())
|
return this.http.get(`${this.baseHref}/poll/slug/${url}`, this.utils.makeHeaders())
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -244,7 +189,7 @@ export class ConfigService extends PollConfig {
|
|||||||
|
|
||||||
return this.http
|
return this.http
|
||||||
.get(`${this.baseHref}/poll/${id}`,
|
.get(`${this.baseHref}/poll/${id}`,
|
||||||
this.makeHeaders({body: password}))
|
this.utils.makeHeaders({body: password}))
|
||||||
}
|
}
|
||||||
|
|
||||||
fetchPollFromRoute(event) {
|
fetchPollFromRoute(event) {
|
||||||
@ -259,7 +204,7 @@ export class ConfigService extends PollConfig {
|
|||||||
getMyPolls(ownerEmail: string) {
|
getMyPolls(ownerEmail: string) {
|
||||||
this.http
|
this.http
|
||||||
.get(`${this.baseHref}/my-polls`,
|
.get(`${this.baseHref}/my-polls`,
|
||||||
this.makeHeaders({ownerEmail: ownerEmail})
|
this.utils.makeHeaders({ownerEmail: ownerEmail})
|
||||||
)
|
)
|
||||||
.subscribe(
|
.subscribe(
|
||||||
(res: any) => {
|
(res: any) => {
|
||||||
@ -313,7 +258,7 @@ export class ConfigService extends PollConfig {
|
|||||||
this.myEmail = voteStack.email;
|
this.myEmail = voteStack.email;
|
||||||
this.voteStackId = voteStack.id;
|
this.voteStackId = voteStack.id;
|
||||||
this.myVoteStack = voteStack;
|
this.myVoteStack = voteStack;
|
||||||
let keys = Object.keys(voteStack.votes)
|
let keys = Object.keys(voteStack.votes);
|
||||||
console.log('voteStack', voteStack);
|
console.log('voteStack', voteStack);
|
||||||
this.resetCurrentChoicesAnswers();
|
this.resetCurrentChoicesAnswers();
|
||||||
keys.forEach((id: any) => {
|
keys.forEach((id: any) => {
|
||||||
@ -326,7 +271,7 @@ export class ConfigService extends PollConfig {
|
|||||||
let foundChoiceToModify = this.currentPoll.choices.find(choicesItem => {
|
let foundChoiceToModify = this.currentPoll.choices.find(choicesItem => {
|
||||||
return voteItem.choice_id == choicesItem.id
|
return voteItem.choice_id == choicesItem.id
|
||||||
});
|
});
|
||||||
console.log('foundChoiceToModify', foundChoiceToModify)
|
console.log('foundChoiceToModify', foundChoiceToModify);
|
||||||
if (foundChoiceToModify) {
|
if (foundChoiceToModify) {
|
||||||
foundChoiceToModify.answer = voteItem.value;
|
foundChoiceToModify.answer = voteItem.value;
|
||||||
}
|
}
|
||||||
@ -344,7 +289,7 @@ export class ConfigService extends PollConfig {
|
|||||||
console.log('config', config);
|
console.log('config', config);
|
||||||
return this.http.post(`${this.baseHref}/poll`,
|
return this.http.post(`${this.baseHref}/poll`,
|
||||||
config,
|
config,
|
||||||
this.makeHeaders())
|
this.utils.makeHeaders())
|
||||||
.subscribe((res: any) => {
|
.subscribe((res: any) => {
|
||||||
// redirect to the page to administrate the new poll
|
// redirect to the page to administrate the new poll
|
||||||
this.messageService.add({severity: 'success', summary: 'Sondage Créé',});
|
this.messageService.add({severity: 'success', summary: 'Sondage Créé',});
|
||||||
@ -406,7 +351,7 @@ export class ConfigService extends PollConfig {
|
|||||||
this.http.post(
|
this.http.post(
|
||||||
`${this.baseHref}/poll/${this.pollId}/vote`,
|
`${this.baseHref}/poll/${this.pollId}/vote`,
|
||||||
voteStack,
|
voteStack,
|
||||||
this.makeHeaders())
|
this.utils.makeHeaders())
|
||||||
.subscribe((res: any) => {
|
.subscribe((res: any) => {
|
||||||
|
|
||||||
this.handleVoteAdded(res);
|
this.handleVoteAdded(res);
|
||||||
@ -439,7 +384,7 @@ export class ConfigService extends PollConfig {
|
|||||||
this.http.patch(
|
this.http.patch(
|
||||||
`${this.baseHref}/vote-stack/${voteStack.id}/token/${this.owner_modifier_token}`,
|
`${this.baseHref}/vote-stack/${voteStack.id}/token/${this.owner_modifier_token}`,
|
||||||
voteStack,
|
voteStack,
|
||||||
this.makeHeaders())
|
this.utils.makeHeaders())
|
||||||
.subscribe((res: any) => {
|
.subscribe((res: any) => {
|
||||||
this.messageService.add({severity: 'success', summary: 'Vote mis à jour'});
|
this.messageService.add({severity: 'success', summary: 'Vote mis à jour'});
|
||||||
this.updateCurrentPollFromResponse(res);
|
this.updateCurrentPollFromResponse(res);
|
||||||
@ -468,7 +413,7 @@ export class ConfigService extends PollConfig {
|
|||||||
this.http.post(
|
this.http.post(
|
||||||
`${this.baseHref}/poll/${this.pollId}/comment`,
|
`${this.baseHref}/poll/${this.pollId}/comment`,
|
||||||
comment,
|
comment,
|
||||||
this.makeHeaders())
|
this.utils.makeHeaders())
|
||||||
.subscribe((res: any) => {
|
.subscribe((res: any) => {
|
||||||
this.messageService.add({
|
this.messageService.add({
|
||||||
severity: 'success',
|
severity: 'success',
|
||||||
@ -499,7 +444,7 @@ export class ConfigService extends PollConfig {
|
|||||||
accept: () => {
|
accept: () => {
|
||||||
this.http.delete(
|
this.http.delete(
|
||||||
`${this.baseHref}/poll/${this.pollId}/comments`,
|
`${this.baseHref}/poll/${this.pollId}/comments`,
|
||||||
this.makeHeaders())
|
this.utils.makeHeaders())
|
||||||
.subscribe((res: any) => {
|
.subscribe((res: any) => {
|
||||||
this.messageService.add({
|
this.messageService.add({
|
||||||
severity: 'success',
|
severity: 'success',
|
||||||
@ -522,7 +467,7 @@ export class ConfigService extends PollConfig {
|
|||||||
accept: () => {
|
accept: () => {
|
||||||
this.http.delete(
|
this.http.delete(
|
||||||
`${this.baseHref}/poll/${this.pollId}/votes`,
|
`${this.baseHref}/poll/${this.pollId}/votes`,
|
||||||
this.makeHeaders())
|
this.utils.makeHeaders())
|
||||||
.subscribe((res: any) => {
|
.subscribe((res: any) => {
|
||||||
this.messageService.add({
|
this.messageService.add({
|
||||||
severity: 'success',
|
severity: 'success',
|
||||||
@ -553,7 +498,7 @@ export class ConfigService extends PollConfig {
|
|||||||
accept: () => {
|
accept: () => {
|
||||||
this.http.delete(
|
this.http.delete(
|
||||||
`${this.baseHref}/poll/${this.pollId}`,
|
`${this.baseHref}/poll/${this.pollId}`,
|
||||||
this.makeHeaders())
|
this.utils.makeHeaders())
|
||||||
.subscribe((res: any) => {
|
.subscribe((res: any) => {
|
||||||
this.messageService.add({
|
this.messageService.add({
|
||||||
severity: 'success',
|
severity: 'success',
|
||||||
@ -580,7 +525,7 @@ export class ConfigService extends PollConfig {
|
|||||||
this.http.put(
|
this.http.put(
|
||||||
`${this.baseHref}/poll/${this.pollId}`,
|
`${this.baseHref}/poll/${this.pollId}`,
|
||||||
voteStack,
|
voteStack,
|
||||||
this.makeHeaders()
|
this.utils.makeHeaders()
|
||||||
)
|
)
|
||||||
.subscribe((res: any) => {
|
.subscribe((res: any) => {
|
||||||
this.messageService.add({
|
this.messageService.add({
|
||||||
@ -644,7 +589,7 @@ export class ConfigService extends PollConfig {
|
|||||||
rows = [headers, listOfChoices, rows, headersComments, comments];
|
rows = [headers, listOfChoices, rows, headersComments, comments];
|
||||||
|
|
||||||
let convertedCsv = rows.map(elem => {
|
let convertedCsv = rows.map(elem => {
|
||||||
console.log('elem', elem)
|
console.log('elem', elem);
|
||||||
return elem.map(item => {
|
return elem.map(item => {
|
||||||
console.log('item', item);
|
console.log('item', item);
|
||||||
if (typeof item === typeof Array) {
|
if (typeof item === typeof Array) {
|
||||||
@ -658,11 +603,11 @@ export class ConfigService extends PollConfig {
|
|||||||
|
|
||||||
let csvContent = "data:text/csv;charset=utf-8,"
|
let csvContent = "data:text/csv;charset=utf-8,"
|
||||||
+ convertedCsv;
|
+ convertedCsv;
|
||||||
console.log('csvContent', csvContent)
|
console.log('csvContent', csvContent);
|
||||||
var encodedUri = encodeURI(csvContent);
|
var encodedUri = encodeURI(csvContent);
|
||||||
var link = document.createElement("a");
|
var link = document.createElement("a");
|
||||||
link.setAttribute("href", encodedUri);
|
link.setAttribute("href", encodedUri);
|
||||||
let exportFileName = (this.urlPublic ? this.urlPublic : this.makeSlug()) + "_export_" + new Date() + ".csv";
|
let exportFileName = (this.urlPublic ? this.urlPublic : this.utils.makeSlug(this)) + "_export_" + new Date() + ".csv";
|
||||||
link.setAttribute("download", exportFileName);
|
link.setAttribute("download", exportFileName);
|
||||||
document.body.appendChild(link); // Required for FF
|
document.body.appendChild(link); // Required for FF
|
||||||
link.click(); // This will download the data file named "my_data.csv".
|
link.click(); // This will download the data file named "my_data.csv".
|
||||||
|
Loading…
Reference in New Issue
Block a user