|
| 1 | +const alertTemplate = require('./templates/alert_template'); |
| 2 | + |
| 3 | +module.exports = class SortableList { |
| 4 | + constructor(holder) { |
| 5 | + let listElm = $(holder).find('ul.list-group')[0] |
| 6 | + let sortable = new Sortable(listElm, { |
| 7 | + group: { name: 'lists', pull: true, put: true}, |
| 8 | + onAdd: this.changeState.bind(this) |
| 9 | + }); |
| 10 | + } |
| 11 | + |
| 12 | + changeState(event) { |
| 13 | + let mountedPath = $("body")[0].dataset.mountedPath |
| 14 | + let itemEl = event.item; |
| 15 | + let resourceId = itemEl.dataset.id; |
| 16 | + let to_state = $(event.to).parents('.holder')[0].dataset.state; |
| 17 | + let url = `${mountedPath}/api/resources/${resourceId}` |
| 18 | + let data = {state: to_state} |
| 19 | + |
| 20 | + $.post(url, data, function(response) { |
| 21 | + if(response[0] == "error") { |
| 22 | + this.rollbackTransition(response[1], event); |
| 23 | + } |
| 24 | + }.bind(this)).fail(function() { |
| 25 | + let message = "Error on the request, check logs and try again." |
| 26 | + this.rollbackTransition(message, event); |
| 27 | + }.bind(this)); |
| 28 | + } |
| 29 | + |
| 30 | + rollbackTransition(message, event) { |
| 31 | + let error_message = `${message} Item moved back to it's original state.` |
| 32 | + let template = alertTemplate.render(error_message); |
| 33 | + $('main').prepend(template); |
| 34 | + this.moveItemBack(event.item, event.from, event.oldIndex); |
| 35 | + } |
| 36 | + |
| 37 | + moveItemBack(item, state, index) { |
| 38 | + let _index = (index == 0) ? 0 : index - 1 |
| 39 | + let _item = $(state).find("li.resource-item").eq(_index) |
| 40 | + |
| 41 | + if(index == 0){ |
| 42 | + $(item).insertBefore(_item); |
| 43 | + } |
| 44 | + else { |
| 45 | + $(item).insertAfter(_item); |
| 46 | + } |
| 47 | + } |
| 48 | +} |
0 commit comments