forked from tykayn/funky-framadate-front
Merge branch 'creation-form' of https://framagit.org/framasoft/framadate/funky-framadate-front into creation-form
This commit is contained in:
commit
b46b57eeba
@ -73,7 +73,8 @@
|
|||||||
"serve": {
|
"serve": {
|
||||||
"builder": "@angular-devkit/build-angular:dev-server",
|
"builder": "@angular-devkit/build-angular:dev-server",
|
||||||
"options": {
|
"options": {
|
||||||
"browserTarget": "framadate:build"
|
"browserTarget": "framadate:build",
|
||||||
|
"proxyConfig": "src/proxy.conf.json"
|
||||||
},
|
},
|
||||||
"configurations": {
|
"configurations": {
|
||||||
"production": {
|
"production": {
|
||||||
|
@ -5,11 +5,17 @@ export class PollConfiguration {
|
|||||||
constructor(
|
constructor(
|
||||||
public isAboutDate: boolean = false,
|
public isAboutDate: boolean = false,
|
||||||
public isProtectedByPassword: boolean = false,
|
public isProtectedByPassword: boolean = false,
|
||||||
|
public password: string = '',
|
||||||
public isOwnerNotifiedByEmailOnNewVote: boolean = false,
|
public isOwnerNotifiedByEmailOnNewVote: boolean = false,
|
||||||
public isOwnerNotifiedByEmailOnNewComment: boolean = false,
|
public isOwnerNotifiedByEmailOnNewComment: boolean = false,
|
||||||
public isMaybeAnswerAvailable: boolean = false,
|
public isMaybeAnswerAvailable: boolean = false,
|
||||||
public areResultsPublic: boolean = true,
|
public areResultsPublic: boolean = true,
|
||||||
|
public isAllowingtoChangeOwnAnswers: boolean = true,
|
||||||
|
public whoCanChangeAnswers: string = 'everybody',
|
||||||
public dateCreated: Date = new Date(Date.now()),
|
public dateCreated: Date = new Date(Date.now()),
|
||||||
|
public expiresDaysDelay: number = environment.poll.defaultConfig.expiracyInDays,
|
||||||
|
public expiracyAfterLastModificationInDays: number = environment.poll.defaultConfig
|
||||||
|
.expiracyAfterLastModificationInDays,
|
||||||
public expires: Date = DateService.addDaysToDate(
|
public expires: Date = DateService.addDaysToDate(
|
||||||
environment.poll.defaultConfig.expiracyInDays,
|
environment.poll.defaultConfig.expiracyInDays,
|
||||||
new Date(Date.now())
|
new Date(Date.now())
|
||||||
|
@ -13,7 +13,9 @@ export class Poll {
|
|||||||
public description?: string,
|
public description?: string,
|
||||||
public configuration: PollConfiguration = new PollConfiguration(),
|
public configuration: PollConfiguration = new PollConfiguration(),
|
||||||
public comments: Comment[] = [],
|
public comments: Comment[] = [],
|
||||||
public choices: Choice[] = []
|
public choices: Choice[] = [],
|
||||||
|
public dateChoices: Choice[] = [],
|
||||||
|
public timeChoices: Choice[] = []
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
public getAdministrationUrl(): string {
|
public getAdministrationUrl(): string {
|
||||||
|
@ -37,14 +37,16 @@ export class ApiService {
|
|||||||
this.axiosInstance.defaults.timeout = 2500;
|
this.axiosInstance.defaults.timeout = 2500;
|
||||||
this.axiosInstance.defaults.headers.post['Content-Type'] = 'application/json';
|
this.axiosInstance.defaults.headers.post['Content-Type'] = 'application/json';
|
||||||
this.axiosInstance.defaults.headers.post['Accept'] = 'application/json';
|
this.axiosInstance.defaults.headers.post['Accept'] = 'application/json';
|
||||||
|
this.axiosInstance.defaults.headers.post['Charset'] = 'UTF-8';
|
||||||
this.axiosInstance.defaults.headers.post['Access-Control-Allow-Methods'] = 'GET, POST, PUT, DELETE, OPTIONS';
|
this.axiosInstance.defaults.headers.post['Access-Control-Allow-Methods'] = 'GET, POST, PUT, DELETE, OPTIONS';
|
||||||
this.axiosInstance.defaults.headers.post['Access-Control-Allow-Origin'] = '*';
|
this.axiosInstance.defaults.headers.post['Access-Control-Allow-Origin'] = '*';
|
||||||
this.axiosInstance.defaults.headers.post['Charset'] = 'UTF-8';
|
console.log('this.axiosInstance.defaults.headers', this.axiosInstance.defaults.headers);
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////
|
//////////////////////
|
||||||
// CREATE OR UPDATE //
|
// CREATE OR UPDATE //
|
||||||
//////////////////////
|
//////////////////////
|
||||||
|
|
||||||
public async createPoll(poll: Poll): Promise<Subscription> {
|
public async createPoll(poll: Poll): Promise<Subscription> {
|
||||||
// this.loader.setStatus(true);
|
// this.loader.setStatus(true);
|
||||||
console.log('config', poll);
|
console.log('config', poll);
|
||||||
@ -68,7 +70,9 @@ export class ApiService {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
console.log('currentApiRoutes', currentApiRoutes);
|
console.log('currentApiRoutes', currentApiRoutes);
|
||||||
return await this.axiosInstance.post(`${apiBaseHref}${currentApiRoutes['api_new_poll']}`, poll);
|
return await this.axiosInstance.post(`${apiBaseHref}${currentApiRoutes['api_new_poll']}`, {
|
||||||
|
data: poll,
|
||||||
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
ApiService.handleError(error);
|
ApiService.handleError(error);
|
||||||
}
|
}
|
||||||
|
@ -182,12 +182,62 @@ export class PollService implements Resolve<Poll> {
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
newPollFromForm(form: any): Poll {
|
newPollFromForm(form: any): any {
|
||||||
const newpoll = new Poll(
|
const newpoll = new Poll(
|
||||||
this.userService.getCurrentUser(),
|
this.userService.getCurrentUser(),
|
||||||
this.uuidService.getUUID(),
|
this.uuidService.getUUID(),
|
||||||
form.controls.title.value
|
form.controls.title.value
|
||||||
);
|
);
|
||||||
return newpoll;
|
/**
|
||||||
|
* convert to API version 1 config poll
|
||||||
|
*/
|
||||||
|
const apiV1Poll = {
|
||||||
|
menuVisible: true,
|
||||||
|
expiracyDateDefaultInDays: newpoll.configuration.expiresDaysDelay,
|
||||||
|
deletionDateAfterLastModification: newpoll.configuration.expiracyAfterLastModificationInDays,
|
||||||
|
pollType: newpoll.configuration.isAboutDate ? 'dates' : 'classic', // classic or dates
|
||||||
|
title: newpoll.title,
|
||||||
|
description: newpoll.description,
|
||||||
|
myName: newpoll.owner.pseudo,
|
||||||
|
myComment: '',
|
||||||
|
isAdmin: true, // when we create a poll, we are admin on it
|
||||||
|
myVoteStack: {},
|
||||||
|
myTempVoteStack: 0,
|
||||||
|
myEmail: newpoll.owner.email,
|
||||||
|
myPolls: [], // list of retrieved polls from the backend api
|
||||||
|
/*
|
||||||
|
date specific poll, we have the choice to setup different hours (timeList) for all possible dates (dateList), or use the same hours for all dates
|
||||||
|
*/
|
||||||
|
allowSeveralHours: 'true',
|
||||||
|
// access
|
||||||
|
visibility: newpoll.configuration.areResultsPublic, // visible to one with the link:
|
||||||
|
voteChoices: newpoll.configuration.isMaybeAnswerAvailable ? 'yes, maybe, no' : 'yes', // possible answers to a vote choice: only "yes", "yes, maybe, no"
|
||||||
|
creationDate: new Date(),
|
||||||
|
expirationDate: '', // expiracy date
|
||||||
|
voteStackId: null, // id of the vote stack to update
|
||||||
|
pollId: null, // id of the current poll when created. data given by the backend api
|
||||||
|
pollSlug: null, // id of the current poll when created. data given by the backend api
|
||||||
|
currentPoll: null, // current poll selected with createPoll or getPoll of ConfigService
|
||||||
|
passwordAccess: newpoll.configuration.isProtectedByPassword,
|
||||||
|
password: newpoll.configuration.password,
|
||||||
|
customUrl: newpoll.slug, // custom slug in the url, must be unique
|
||||||
|
customUrlIsUnique: null, // given by the backend
|
||||||
|
urlSlugPublic: null,
|
||||||
|
urlPublic: null,
|
||||||
|
urlAdmin: null,
|
||||||
|
adminKey: '', // key to change config of the poll
|
||||||
|
owner_modifier_token: '', // key to change a vote stack
|
||||||
|
canModifyAnswers: newpoll.configuration.isAllowingtoChangeOwnAnswers, // bool for the frontend selector
|
||||||
|
whoModifiesAnswers: newpoll.configuration.whoCanChangeAnswers, // everybody, self, nobody (: just admin)
|
||||||
|
whoCanChangeAnswers: newpoll.configuration.whoCanChangeAnswers, // everybody, self, nobody (: just admin)
|
||||||
|
dateList: newpoll.dateChoices, // sets of days as strings, config to set identical time for days in a special days poll
|
||||||
|
timeList: newpoll.timeChoices, // ranges of time expressed as strings
|
||||||
|
|
||||||
|
answers: newpoll.choices,
|
||||||
|
// modals
|
||||||
|
displayConfirmVoteModalAdmin: false,
|
||||||
|
};
|
||||||
|
console.log('apiV1Poll', apiV1Poll);
|
||||||
|
return apiV1Poll;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -58,7 +58,9 @@ export class FormComponent implements OnInit {
|
|||||||
|
|
||||||
public createPoll(): void {
|
public createPoll(): void {
|
||||||
console.log('this.form', this.form);
|
console.log('this.form', this.form);
|
||||||
this.apiService.createPoll(this.pollService.newPollFromForm(this.form));
|
const newpoll = this.pollService.newPollFromForm(this.form);
|
||||||
|
console.log('newpoll', newpoll);
|
||||||
|
this.apiService.createPoll(newpoll);
|
||||||
// if (this.form.valid) {
|
// if (this.form.valid) {
|
||||||
// console.log('Le sondage est correctement rempli, prêt à enregistrer.');
|
// console.log('Le sondage est correctement rempli, prêt à enregistrer.');
|
||||||
// const newpoll = this.pollService.newPollFromForm(this.form);
|
// const newpoll = this.pollService.newPollFromForm(this.form);
|
||||||
|
7
src/proxy.conf.json
Normal file
7
src/proxy.conf.json
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"/api/*": {
|
||||||
|
"target": "http://localhost:8000",
|
||||||
|
"secure": false,
|
||||||
|
"logLevel": "debug"
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user