Skip to content

Commit

Permalink
fix: Restore ticket clause for saving event (#5105)
Browse files Browse the repository at this point in the history
  • Loading branch information
iamareebjamal authored Sep 21, 2020
1 parent 1d3b2ae commit 0276d00
Showing 1 changed file with 21 additions and 11 deletions.
32 changes: 21 additions & 11 deletions app/mixins/event-wizard.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import Mixin from '@ember/object/mixin';
import MutableArray from '@ember/array/mutable';
import RSVP from 'rsvp';
import RSVP, { allSettled } from 'rsvp';
import { v1 } from 'ember-uuid';
import CustomFormMixin from 'open-event-frontend/mixins/custom-form';

Expand Down Expand Up @@ -70,9 +70,10 @@ export default Mixin.create(MutableArray, CustomFormMixin, {
data[key] = result.value;
}
}
const numberOfTickets = data.tickets ? data.tickets.length : 0;
const numberOfTickets = data.tickets?.length || 0;

if (event.name && event.startsAtDate && event.endsAtDate) {
if (event.name && event.startsAtDate && event.endsAtDate && (event.state === 'draft' || (numberOfTickets > 0 && event.deletedTickets?.length !== numberOfTickets))) {
await destroyDeletedTickets(event.deletedTickets);
await event.save();

await Promise.all((data.tickets ? data.tickets.toArray() : []).map(ticket => {
Expand Down Expand Up @@ -133,8 +134,8 @@ export default Mixin.create(MutableArray, CustomFormMixin, {
if (event.startsAtDate === undefined || event.endsAtDate === undefined) {
errorObject.errors.push({ 'detail': 'Dates have not been provided' });
}
if (numberOfTickets === 0) {
errorObject.errors.push({ 'detail': 'Tickets are required for publishing event' });
if (numberOfTickets === 0 || event.deletedTickets?.length === numberOfTickets) {
errorObject.errors.push({ 'detail': 'Tickets are required for publishing/published event' });
}
throw (errorObject);
}
Expand Down Expand Up @@ -219,12 +220,17 @@ export default Mixin.create(MutableArray, CustomFormMixin, {
},
move(direction) {
this.onValid(() => {
preSaveActions.call(this);
this.sendAction('move', direction, this.data);
});
},
onValidate(callback) {
this.onValid(() => {
callback(true);
const allTicketsDeleted = this.deletedTickets?.length === this.data.event.tickets.length;
if (allTicketsDeleted) {
this.notify.error('Tickets are required for publishing/published event');
}
callback(!allTicketsDeleted);
});
},

Expand All @@ -249,15 +255,19 @@ export default Mixin.create(MutableArray, CustomFormMixin, {
}
});

function destroyDeletedTickets(deletedTickets) {
async function destroyDeletedTickets(deletedTickets) {
if (!deletedTickets) {return} // This mixin may be used in other steps not containing tickets
deletedTickets.forEach(ticket => {
ticket.destroyRecord();
});
await allSettled(deletedTickets.map(ticket => {
try {
return ticket.destroyRecord();
} catch (e) {
console.error('Error while deleting tickets', e);
}
}));
}

function preSaveActions() {
destroyDeletedTickets(this.deletedTickets);
this.data.event.deletedTickets = this.deletedTickets;

if (this.selectedLocationType) {
this.set('data.event.online', ['Online', 'Mixed'].includes(this.selectedLocationType));
Expand Down

1 comment on commit 0276d00

@vercel
Copy link

@vercel vercel bot commented on 0276d00 Sep 21, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.