Skip to content
Snippets Groups Projects
Commit 90f9c0e9 authored by Sandro Lutz's avatar Sandro Lutz
Browse files

Allow edits of signup data

parent 287313f1
No related branches found
No related tags found
1 merge request!28Events
......@@ -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;
......
......@@ -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}`);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment