From 90f9c0e986a4a9bb2fba42237af4c12954168fdc Mon Sep 17 00:00:00 2001 From: Sandro Lutz <code@temparus.ch> Date: Sun, 18 Feb 2018 09:46:03 +0100 Subject: [PATCH] Allow edits of signup data --- src/models/events.js | 27 ++++++++++++++++++++++++++ src/views/eventDetails.js | 40 ++++++++++++++++++++++++++++++++------- 2 files changed, 60 insertions(+), 7 deletions(-) diff --git a/src/models/events.js b/src/models/events.js index 54f1810f..c779be86 100644 --- a/src/models/events.js +++ b/src/models/events.js @@ -47,6 +47,20 @@ export function loadSignupForSelectedEvent() { } export function _signupUserForSelectedEvent(additionalFieldsString) { + if (typeof this.selectedEventSignup !== 'undefined') { + return m.request({ + method: 'PATCH', + url: `${apiUrl}/eventsignups/${this.selectedEventSignup._id}`, + data: { + additional_fields: additionalFieldsString, + }, + headers: getToken() ? { + Authorization: `Token ${getToken()}`, + 'If-Match': this.selectedEventSignup._etag, + } : { 'If-Match': this.selectedEventSignup._etag }, + }).then(() => { this.loadSignupForSelectedEvent(); }); + } + return m.request({ method: 'POST', url: `${apiUrl}/eventsignups`, @@ -93,6 +107,19 @@ export function signupForSelectedEvent(additionalFields, email = '') { return Promise.reject(new Error('Signup not allowed')); } +export function signoffForSelectedEvent() { + if (isLoggedIn() && typeof this.selectedEventSignup !== 'undefined') { + m.request({ + method: 'DELETE', + url: `${apiUrl}/eventsignups/${this.selectedEventSignup._id}`, + headers: getToken() ? { + Authorization: `Token ${getToken()}`, + 'If-Match': this.selectedEventSignup._etag, + } : { 'If-Match': this.selectedEventSignup._etag }, + }).then(() => { this.loadSignupForSelectedEvent(); }); + } +} + export function load(query = {}) { querySaved = query; diff --git a/src/views/eventDetails.js b/src/views/eventDetails.js index 7c209999..d8720405 100644 --- a/src/views/eventDetails.js +++ b/src/views/eventDetails.js @@ -13,7 +13,12 @@ class EventSignupForm extends JSONSchemaForm { this.emailErrors = []; this.emailValid = false; if (isLoggedIn()) { - events.loadSignupForSelectedEvent(); + events.loadSignupForSelectedEvent() + .then(() => { + if (typeof events.getSignupForSelectedEvent() !== 'undefined') { + this.data = JSON.parse(events.getSignupForSelectedEvent().additional_fields) || {}; + } + }); } } @@ -23,6 +28,11 @@ class EventSignupForm extends JSONSchemaForm { .catch(() => log('Could not sign up of the event!')); } + signoff() { + events.signoffForSelectedEvent(); + this.validate(); + } + view() { // do not render anything if there is no data yet if (typeof events.getSelectedEvent() === 'undefined') return m(); @@ -30,12 +40,14 @@ class EventSignupForm extends JSONSchemaForm { if (isLoggedIn()) { // do not render form if there is no signup data of the current user if (!events.signupForSelectedEventHasLoaded()) return m('span', 'Loading...'); - if (typeof events.getSignupForSelectedEvent() === 'undefined') { - const elements = this.renderFormElements(); - elements.push(this._renderSignupButton()); - return m('form', elements); + + const elements = this.renderFormElements(); + elements.push(this._renderSignupButton()); + if (typeof events.getSignupForSelectedEvent() !== 'undefined') { + elements.unshift(m('div', 'You have already signed up. Update your data below.')); + elements.push(this._renderSignoffButton()); } - return m('div', 'You have already signed up for this event.'); + return m('form', elements); } else if (events.getSelectedEvent().allow_email_signup) { const elements = this.renderFormElements(); elements.push(this._renderEmailField()); @@ -86,6 +98,16 @@ class EventSignupForm extends JSONSchemaForm { text: 'Signup', }); } + + _renderSignoffButton() { + return m(submitButton, { + active: true, + args: { + onclick: () => this.signoff(), + }, + text: 'Delete signup', + }); + } } export default class EventDetails { @@ -108,7 +130,11 @@ export default class EventDetails { undefined : JSON.parse(events.getSelectedEvent().additional_fields), }); } else { - eventSignupForm = m('div', 'The registration period is over.'); + let participantNotice = ''; + if (events.getSignupForSelectedEvent() !== 'undefined') { + participantNotice = m('You signed up for this event.'); + } + eventSignupForm = m('div', ['The registration period is over.', participantNotice]); } } else { eventSignupForm = m('div', `The registration starts at ${registerStart}`); -- GitLab