define([ "require", "backbone", "hbs!tmpl/business_metadata/EnumCreateUpdateItemView_tmpl", "utils/Utils", "utils/UrlLinks" ], function(require, Backbone, EnumCreateUpdateItemViewTmpl, Utils, UrlLinks) { "use strict"; return Backbone.Marionette.ItemView.extend({ template: EnumCreateUpdateItemViewTmpl, regions: {}, ui: { enumTypeSelectorContainer: "[data-id='enumTypeSelectorContainer']", enumSelector: "[data-id='enumSelector']", enumValueSelectorContainer: "[data-id='enumValueSelectorContainer']", valueSelector: "[data-id='valueSelector']", enumCancleBtn: "[data-id='enumCancleBtn']", enumOkBtn: "[data-id='enumOkBtn']" }, events: function() { var events = {}; return events["change " + this.ui.enumSelector] = function(e) { this.model.set({ enumValues: e.target.value.trim() }); }, events["change " + this.ui.enumSelector] = function(e) { var emumValue = this.ui.enumSelector.select2("data")[0] ? this.ui.enumSelector.select2("data")[0].text : this.ui.enumSelector.val(); "" == emumValue || null == emumValue ? this.ui.enumValueSelectorContainer.hide() : (this.ui.enumValueSelectorContainer.show(), this.showEnumValues(emumValue)); }, events["change " + this.ui.valueSelector] = function(e) {}, events["click " + this.ui.enumCancleBtn] = function(e) { return this.options.closeModal ? void this.options.closeModal() : (this.ui.enumValueSelectorContainer.hide(), this.ui.enumSelector.val("").trigger("change"), void this.ui.enumCancleBtn.attr("disabled", "true")); }, events["click " + this.ui.enumOkBtn] = function(e) { this.ui.enumCancleBtn.attr("disabled", "true"), this.onUpdateEnum(); }, events; }, initialize: function(options) { _.extend(this, _.pick(options, "businessMetadataDefCollection", "enumDefCollection")); }, onRender: function() { this.ui.enumValueSelectorContainer.hide(), this.bindEvents(), this.emumTypeSelectDisplay(), this.options.closeModal || (this.ui.enumCancleBtn.attr("disabled", "true"), this.ui.enumCancleBtn.text("Clear")); }, bindEvents: function() { var that = this; this.listenTo(this.enumDefCollection, "reset", function() { that.emumTypeSelectDisplay(); }); }, showEnumValues: function(enumName) { var enumValues = "", selectedValues = [], selectedEnum = this.enumDefCollection.fullCollection.findWhere({ name: enumName }), selectedEnumValues = selectedEnum ? selectedEnum.get("elementDefs") : null; _.each(selectedEnumValues, function(enumVal, index) { selectedValues.push(enumVal.value), enumValues += ""; }), this.ui.enumCancleBtn.removeAttr("disabled"), this.ui.valueSelector.empty(), this.ui.valueSelector.append(enumValues), this.ui.valueSelector.val(selectedValues), this.ui.valueSelector.select2({ placeholder: "Select Enum value", allowClear: !1, tags: !0, multiple: !0 }); }, emumTypeSelectDisplay: function() { var enumTypes = ""; this.enumDefCollection.fullCollection.each(function(model, index) { enumTypes += ""; }), this.ui.enumSelector.empty(), this.ui.enumSelector.append(enumTypes), this.ui.enumSelector.val(""), this.ui.enumSelector.select2({ placeholder: "Select Enum name", tags: !0, allowClear: !0, multiple: !1, templateResult: this.formatSearchResult }); }, formatSearchResult: function(state) { return state.id ? state.element ? $("" + _.escape(state.text) + "") : $("Create new enum : " + _.escape(state.text) + "") : state.text; }, validationEnum: function() { var selectedEnumName = this.ui.enumSelector.val(), selectedEnumValues = this.ui.valueSelector.val(); return "" == selectedEnumName || null == selectedEnumName ? (this.ui.enumOkBtn.hideButtonLoader(), Utils.notifyInfo({ content: "Please enter the Enumeration Name" }), !0) : "" == selectedEnumValues || null == selectedEnumValues ? (this.ui.enumOkBtn.hideButtonLoader(), Utils.notifyInfo({ content: "Please enter the Enum values" }), !0) : void 0; }, onUpdateEnum: function(view, modal) { var that = this, selectedEnumName = this.ui.enumSelector.val(), selectedEnumValues = this.ui.valueSelector.val(), enumName = this.enumDefCollection.fullCollection.findWhere({ name: selectedEnumName }), isPutCall = !1, isPostCallEnum = !1, enumDefs = []; if (!this.validationEnum()) { if (this.ui.enumOkBtn.showButtonLoader(), this.ui.enumSelector.attr("disabled", "true"), this.ui.valueSelector.attr("disabled", "true"), this.ui.enumCancleBtn.attr("disabled", "true"), enumName) { var enumDef = enumName.get("elementDefs"); enumDef.length === selectedEnumValues.length ? _.each(enumDef, function(enumVal, index) { selectedEnumValues.indexOf(enumVal.value) === -1 && (isPutCall = !0); }) : isPutCall = !0; } else isPostCallEnum = !0; var elementValues = []; _.each(selectedEnumValues, function(inputEnumVal, index) { elementValues.push({ ordinal: index + 1, value: inputEnumVal }); }), enumDefs.push({ name: selectedEnumName, elementDefs: elementValues }), this.json = { enumDefs: enumDefs }; var apiObj = { sort: !1, success: function(model, response) { if (that.ui.enumValueSelectorContainer.hide(), isPostCallEnum) that.enumDefCollection.add(model.enumDefs[0]), Utils.notifySuccess({ content: "Enumeration " + selectedEnumName + " added successfully" }); else { var foundEnum = that.enumDefCollection.fullCollection.find({ guid: model.enumDefs[0].guid }); foundEnum && foundEnum.set(model.enumDefs[0]), Utils.notifySuccess({ content: "Enumeration " + selectedEnumName + " updated successfully" }); } that.enumDefCollection.fetch({ reset: !0 }), that.options.onUpdateEnum && that.options.onUpdateEnum(), that.ui.enumCancleBtn.attr("disabled", "true"); }, silent: !0, reset: !0, complete: function(model, status) { that.emumTypeSelectDisplay(), that.ui.enumOkBtn.hideButtonLoader(), that.ui.enumSelector.removeAttr("disabled"), that.ui.valueSelector.removeAttr("disabled"), that.options.closeModal && that.options.closeModal(); } }; $.extend(apiObj, { contentType: "application/json", dataType: "json", data: JSON.stringify(this.json) }), isPostCallEnum ? this.businessMetadataDefCollection.constructor.nonCrudOperation.call(this, UrlLinks.typedefsUrl().defs, "POST", apiObj) : isPutCall ? this.businessMetadataDefCollection.constructor.nonCrudOperation.call(this, UrlLinks.typedefsUrl().defs, "PUT", apiObj) : (Utils.notifySuccess({ content: "No updated values" }), that.ui.enumOkBtn.hideButtonLoader(), that.ui.enumSelector.removeAttr("disabled"), that.ui.valueSelector.removeAttr("disabled"), that.options.closeModal && that.options.closeModal()); } } }); });