import { ajax } from "discourse/lib/ajax"; import ModalFunctionality from "discourse/mixins/modal-functionality"; export default Ember.Controller.extend(ModalFunctionality, { modelChanged: function() { const model = this.get("model"); const copy = Em.A(); const store = this.store; if (model) { model.forEach(function(o) { copy.pushObject(store.createRecord("badge-grouping", o)); }); } this.set("workingCopy", copy); }.observes("model"), moveItem: function(item, delta) { const copy = this.get("workingCopy"); const index = copy.indexOf(item); if (index + delta < 0 || index + delta >= copy.length) { return; } copy.removeAt(index); copy.insertAt(index + delta, item); }, actions: { up: function(item) { this.moveItem(item, -1); }, down: function(item) { this.moveItem(item, 1); }, delete: function(item) { this.get("workingCopy").removeObject(item); }, cancel: function() { this.set("model", null); this.set("workingCopy", null); this.send("closeModal"); }, edit: function(item) { item.set("editing", true); }, save: function(item) { item.set("editing", false); }, add: function() { const obj = this.store.createRecord("badge-grouping", { editing: true, name: I18n.t("admin.badges.badge_grouping") }); this.get("workingCopy").pushObject(obj); }, saveAll: function() { const self = this; var items = this.get("workingCopy"); const groupIds = items.map(function(i) { return i.get("id") || -1; }); const names = items.map(function(i) { return i.get("name"); }); ajax("/admin/badges/badge_groupings", { data: { ids: groupIds, names: names }, method: "POST" }).then( function(data) { items = self.get("model"); items.clear(); data.badge_groupings.forEach(function(g) { items.pushObject(self.store.createRecord("badge-grouping", g)); }); self.set("model", null); self.set("workingCopy", null); self.send("closeModal"); }, function() { bootbox.alert(I18n.t("generic_error")); } ); } } });