Introduce a "Save" button for the admin schedule
The changes were saved after you drop an event, and now it only saves the schedule when you're done with the changes and click the "Save" button.
This commit is contained in:
parent
de2e316fee
commit
6f0cdc64c3
4 changed files with 105 additions and 57 deletions
|
|
@ -1,10 +1,13 @@
|
||||||
var url; // Should be initialize in Schedule.initialize
|
var url; // Should be initialize in Schedule.initialize
|
||||||
var schedule_id; // Should be initialize in Schedule.initialize
|
var schedule_id; // Should be initialize in Schedule.initialize
|
||||||
|
|
||||||
function showError(error){
|
var events_to_save = {};
|
||||||
// Delete other error messages before showing the new one
|
var events_to_remove = {};
|
||||||
|
|
||||||
|
function showMessage(message, type){
|
||||||
|
// Delete other messages before showing the new one
|
||||||
$('.unobtrusive-flash-container').empty();
|
$('.unobtrusive-flash-container').empty();
|
||||||
UnobtrusiveFlash.showFlashMessage(error, {type: 'error'});
|
UnobtrusiveFlash.showFlashMessage(message, {type: type});
|
||||||
}
|
}
|
||||||
|
|
||||||
var Schedule = {
|
var Schedule = {
|
||||||
|
|
@ -14,34 +17,36 @@ var Schedule = {
|
||||||
},
|
},
|
||||||
remove: function(element) {
|
remove: function(element) {
|
||||||
var e = $("#" + element);
|
var e = $("#" + element);
|
||||||
var event_schedule_id = e.attr("event_schedule_id");
|
var event_id = e.attr("event_id");
|
||||||
if(event_schedule_id != null){
|
if(e.attr("event_schedule_id")!= null){
|
||||||
var my_url = url + '/' + event_schedule_id;
|
events_to_remove[event_id] = {
|
||||||
var success_callback = function(data) {
|
event: e,
|
||||||
console.log(data);
|
previous_parent: e.parent()
|
||||||
e.attr("event_schedule_id", null);
|
};
|
||||||
e.appendTo($(".unscheduled-events"));
|
}
|
||||||
|
delete events_to_save[event_id];
|
||||||
|
var unscheduled = $(".unscheduled-events");
|
||||||
|
e.appendTo(unscheduled);
|
||||||
e.find(".schedule-event-delete-button").hide();
|
e.find(".schedule-event-delete-button").hide();
|
||||||
}
|
|
||||||
var error_callback = function(data) {
|
|
||||||
console.log(data);
|
|
||||||
showError($.parseJSON(data.responseText).errors);
|
|
||||||
}
|
|
||||||
$.ajax({
|
|
||||||
url: my_url,
|
|
||||||
type: 'DELETE',
|
|
||||||
success: success_callback,
|
|
||||||
error: error_callback,
|
|
||||||
dataType : 'json'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
showError("The event couldn't be unscheduled");
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
add: function (previous_parent, new_parent, event) {
|
add: function (previous_parent, new_parent, event) {
|
||||||
|
var params = {
|
||||||
|
previous_parent: previous_parent,
|
||||||
|
new_parent: new_parent,
|
||||||
|
event: event
|
||||||
|
}
|
||||||
|
var event_id = event.attr("event_id");
|
||||||
|
events_to_save[event_id] = params;
|
||||||
|
delete events_to_remove[event_id];
|
||||||
event.appendTo(new_parent);
|
event.appendTo(new_parent);
|
||||||
|
$("#event-" + event_id).find(".schedule-event-delete-button").show();
|
||||||
|
},
|
||||||
|
saveEvents: function () {
|
||||||
|
var errors = '';
|
||||||
|
for (var key in events_to_save){
|
||||||
|
var event = events_to_save[key]['event'];
|
||||||
var event_schedule_id = event.attr("event_schedule_id");
|
var event_schedule_id = event.attr("event_schedule_id");
|
||||||
|
var new_parent = events_to_save[key]['new_parent'];
|
||||||
var my_url = url;
|
var my_url = url;
|
||||||
var type = 'POST';
|
var type = 'POST';
|
||||||
var params = { event_schedule: {
|
var params = { event_schedule: {
|
||||||
|
|
@ -56,25 +61,56 @@ var Schedule = {
|
||||||
params['event_schedule']['event_id'] = event.attr("event_id");
|
params['event_schedule']['event_id'] = event.attr("event_id");
|
||||||
params['event_schedule']['schedule_id'] = schedule_id;
|
params['event_schedule']['schedule_id'] = schedule_id;
|
||||||
}
|
}
|
||||||
var success_callback = function(data) {
|
var success_callback_save = function(data) {
|
||||||
console.log(data);
|
console.log(data);
|
||||||
event.attr("event_schedule_id", data.event_schedule_id);
|
event.attr("event_schedule_id", data.event_schedule_id);
|
||||||
event.find(".schedule-event-delete-button").show();
|
|
||||||
}
|
}
|
||||||
var error_callback = function(data) {
|
var error_callback_save = function(data) {
|
||||||
console.log(data);
|
console.log(data);
|
||||||
showError($.parseJSON(data.responseText).errors);
|
errors += $.parseJSON(data.responseText).errors;
|
||||||
event.appendTo(previous_parent);
|
event.appendTo(events_to_save[key]['previous_parent']);
|
||||||
|
if(parent.hasClass('unscheduled-events'))
|
||||||
|
event.find(".schedule-event-delete-button").hide();
|
||||||
}
|
}
|
||||||
$.ajax({
|
$.ajax({
|
||||||
|
async: false,
|
||||||
url: my_url,
|
url: my_url,
|
||||||
type: type,
|
type: type,
|
||||||
data: params,
|
data: params,
|
||||||
success: success_callback,
|
success: success_callback_save,
|
||||||
error: error_callback,
|
error: error_callback_save,
|
||||||
dataType : 'json'
|
dataType : 'json'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
for (var key in events_to_remove){
|
||||||
|
var event = events_to_remove[key]['event'];
|
||||||
|
var success_callback_remove = function(data) {
|
||||||
|
console.log(data);
|
||||||
|
event.attr("event_schedule_id", null);
|
||||||
|
}
|
||||||
|
var error_callback_remove = function(data) {
|
||||||
|
console.log(data);
|
||||||
|
errors += $.parseJSON(data.responseText).errors;
|
||||||
|
events_to_remove[key]['previous_parent'].append(event);
|
||||||
|
if(!parent.hasClass('unscheduled-events'))
|
||||||
|
event.find(".schedule-event-delete-button").show();
|
||||||
|
}
|
||||||
|
$.ajax({
|
||||||
|
async: false,
|
||||||
|
url: url + '/' + event.attr("event_schedule_id"),
|
||||||
|
type: 'DELETE',
|
||||||
|
success: success_callback_remove,
|
||||||
|
error: error_callback_remove,
|
||||||
|
dataType : 'json'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
events_to_remove = {};
|
||||||
|
events_to_save = {};
|
||||||
|
if(errors == '')
|
||||||
|
showMessage('Schedule correctly saved', 'notice');
|
||||||
|
else
|
||||||
|
showMessage(errors, 'error');
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$(document).ready( function() {
|
$(document).ready( function() {
|
||||||
|
|
@ -115,6 +151,10 @@ $(document).ready( function() {
|
||||||
$(this).css("background-color", "#ffffff");
|
$(this).css("background-color", "#ffffff");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$('.schedule-save').on('click', function(e) {
|
||||||
|
Schedule.saveEvents();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
function eventClicked(e, element){
|
function eventClicked(e, element){
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ $(function () {
|
||||||
}
|
}
|
||||||
|
|
||||||
var callback = function(data) {
|
var callback = function(data) {
|
||||||
showError($.parseJSON(data.responseText).errors);
|
showMessage($.parseJSON(data.responseText).errors, 'error');
|
||||||
}
|
}
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: url,
|
url: url,
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ module Admin
|
||||||
if @event_schedule.save
|
if @event_schedule.save
|
||||||
render json: { event_schedule_id: @event_schedule.id }
|
render json: { event_schedule_id: @event_schedule.id }
|
||||||
else
|
else
|
||||||
render json: { errors: "The event couldn't be scheduled. #{@event_schedule.errors.full_messages.join('. ')}" }, status: 422
|
render json: { errors: parse_errors(@event_schedule) }, status: 422
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -14,7 +14,7 @@ module Admin
|
||||||
if @event_schedule.update(event_schedule_params)
|
if @event_schedule.update(event_schedule_params)
|
||||||
render json: { event_schedule_id: @event_schedule.id }
|
render json: { event_schedule_id: @event_schedule.id }
|
||||||
else
|
else
|
||||||
render json: { errors: "The event couldn't be scheduled. #{@event_schedule.errors.full_messages.join('. ')}" }, status: 422
|
render json: { errors: parse_errors(@event_schedule) }, status: 422
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -22,7 +22,7 @@ module Admin
|
||||||
if @event_schedule.destroy
|
if @event_schedule.destroy
|
||||||
render json: {}
|
render json: {}
|
||||||
else
|
else
|
||||||
render json: { errors: "The event couldn't be unscheduled. #{@event_schedule.errors.full_messages.join('. ')}" }, status: 422
|
render json: { errors: parse_errors(@event_schedule) }, status: 422
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -31,5 +31,11 @@ module Admin
|
||||||
def event_schedule_params
|
def event_schedule_params
|
||||||
params.require(:event_schedule).permit(:schedule_id, :event_id, :room_id, :start_time)
|
params.require(:event_schedule).permit(:schedule_id, :event_id, :room_id, :start_time)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def parse_errors(event_schedule)
|
||||||
|
title = event_schedule.event.try(:title).present? ? event_schedule.event.title : 'The event'
|
||||||
|
errors = event_schedule.errors.full_messages.present? ? " (#{event_schedule.errors.full_messages.join('. ')})" : ''
|
||||||
|
"#{title} couldn't be scheduled#{errors}. "
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,8 @@
|
||||||
off_color: 'warning',
|
off_color: 'warning',
|
||||||
on_text: 'Yes',
|
on_text: 'Yes',
|
||||||
off_text: 'No' }
|
off_text: 'No' }
|
||||||
|
%button.btn.btn-success.schedule-save
|
||||||
|
Save
|
||||||
.h4
|
.h4
|
||||||
Unscheduled events
|
Unscheduled events
|
||||||
.unscheduled-events
|
.unscheduled-events
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue