import { gte, sort } from "@ember/object/computed"; import Controller from "@ember/controller"; import I18n from "I18n"; import bootbox from "bootbox"; import { popupAjaxError } from "discourse/lib/ajax-error"; const MAX_FIELDS = 30; export default Controller.extend({ fieldTypes: null, createDisabled: gte("model.length", MAX_FIELDS), sortedFields: sort("model", "fieldSortOrder"), init() { this._super(...arguments); this.fieldSortOrder = ["position"]; }, actions: { createField() { const f = this.store.createRecord("user-field", { field_type: "text", position: MAX_FIELDS, }); this.model.pushObject(f); }, moveUp(f) { const idx = this.sortedFields.indexOf(f); if (idx) { const prev = this.sortedFields.objectAt(idx - 1); const prevPos = prev.get("position"); prev.update({ position: f.get("position") }); f.update({ position: prevPos }); } }, moveDown(f) { const idx = this.sortedFields.indexOf(f); if (idx > -1) { const next = this.sortedFields.objectAt(idx + 1); const nextPos = next.get("position"); next.update({ position: f.get("position") }); f.update({ position: nextPos }); } }, destroy(f) { const model = this.model; // Only confirm if we already been saved if (f.get("id")) { bootbox.confirm(I18n.t("admin.user_fields.delete_confirm"), function ( result ) { if (result) { f.destroyRecord() .then(function () { model.removeObject(f); }) .catch(popupAjaxError); } }); } else { model.removeObject(f); } }, }, });