Merge branch 'creation-form' of https://framagit.org/framasoft/framadate/funky-framadate-front into creation-form

This commit is contained in:
tykayn 2020-11-13 09:43:34 +01:00
commit b46b57eeba
7 changed files with 79 additions and 7 deletions

View File

@ -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": {

View File

@ -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())

View File

@ -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 {

View File

@ -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);
} }

View File

@ -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;
} }
} }

View File

@ -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
View File

@ -0,0 +1,7 @@
{
"/api/*": {
"target": "http://localhost:8000",
"secure": false,
"logLevel": "debug"
}
}