This is an automated email from the ASF dual-hosted git repository. kbhatt pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/atlas.git
commit 69d403e8ca6b22648457e1df51b7e549b6882f3e Author: kevalbhatt <[email protected]> AuthorDate: Fri Feb 28 22:39:56 2020 +0530 ATLAS-3636 : [Namespace-UI] Issues/ambiguous error messages while adding a new attribute in a Namespace --- dashboardv3/public/css/scss/common.scss | 8 +- dashboardv3/public/css/scss/namespace.scss | 2 +- .../entity/EntityNameSpaceItemView_tmpl.html | 34 +- .../templates/entity/EntityNameSpaceView_tmpl.html | 6 +- .../NameSpaceAttributeItemView_tmpl.html | 2 +- .../js/views/entity/EntityNameSpaceItemView.js | 47 +-- .../public/js/views/entity/EntityNameSpaceView.js | 9 +- .../views/name_space/CreateNameSpaceLayoutView.js | 439 ++++++++++----------- .../views/name_space/EnumCreateUpdateItemView.js | 11 +- .../views/name_space/NameSpaceAttributeItemView.js | 7 + .../views/name_space/NameSpaceTableLayoutView.js | 10 +- 11 files changed, 295 insertions(+), 280 deletions(-) diff --git a/dashboardv3/public/css/scss/common.scss b/dashboardv3/public/css/scss/common.scss index 016c8bf..a30057c 100644 --- a/dashboardv3/public/css/scss/common.scss +++ b/dashboardv3/public/css/scss/common.scss @@ -228,7 +228,6 @@ pre { .custom-col-1, .custom-col-2 { vertical-align: top; - display: inline-block; textarea { resize: vertical; @@ -254,8 +253,13 @@ pre { .custom-col-2 { text-align: center; width: 17%; - margin-left: 1%; + padding-left: 1%; margin-bottom: 10px; + + &>button { + padding: 7px 10px; + margin-bottom: 10px; + } } } } diff --git a/dashboardv3/public/css/scss/namespace.scss b/dashboardv3/public/css/scss/namespace.scss index b5952ae..4b5125c 100644 --- a/dashboardv3/public/css/scss/namespace.scss +++ b/dashboardv3/public/css/scss/namespace.scss @@ -30,7 +30,7 @@ width: 35%; } - word-break: break-all; + word-break: break-word; } } diff --git a/dashboardv3/public/js/templates/entity/EntityNameSpaceItemView_tmpl.html b/dashboardv3/public/js/templates/entity/EntityNameSpaceItemView_tmpl.html index d030ee6..afbf46f 100644 --- a/dashboardv3/public/js/templates/entity/EntityNameSpaceItemView_tmpl.html +++ b/dashboardv3/public/js/templates/entity/EntityNameSpaceItemView_tmpl.html @@ -15,21 +15,25 @@ * limitations under the License. --> {{#ifCond model "has" "isNew"}} -<td class="custom-col-1"> - {{{callmyfunction getNamespaceDroupdown nameSpaceCollection}}} -</td> -<td class="custom-col-0"> : </td> -<td class="custom-col-1" data-id="value"> - <input type="text" data-key disabled class="form-control"> -</td> -<td class="custom-col-2 btn-group"> - <button class="btn btn-default btn-sm" data-id="deleteItem"> - <i class="fa fa-minus"> </i> - </button> - <button class="btn btn-default btn-sm" data-id="addItem"> - <i class="fa fa-plus"> </i> - </button> -</td> +<table class="custom-table" style="font-weight: 100;"> + <tr class="custom-tr"> + <td class="custom-col-1"> + {{{callmyfunction getNamespaceDroupdown nameSpaceCollection}}} + </td> + <td class="custom-col-0"> : </td> + <td class="custom-col-1" data-id="value"> + <input type="text" data-key disabled class="form-control"> + </td> + <td class="custom-col-2 btn-group"> + <button class="btn btn-default btn-sm" data-id="deleteItem"> + <i class="fa fa-minus"> </i> + </button> + <button class="btn btn-default btn-sm" data-id="addItem"> + <i class="fa fa-plus"> </i> + </button> + </td> + </tr> +</table> {{else}} <hr /> <ul class="namespace-tree-parent"> diff --git a/dashboardv3/public/js/templates/entity/EntityNameSpaceView_tmpl.html b/dashboardv3/public/js/templates/entity/EntityNameSpaceView_tmpl.html index 6b622d7..f4a9df3 100644 --- a/dashboardv3/public/js/templates/entity/EntityNameSpaceView_tmpl.html +++ b/dashboardv3/public/js/templates/entity/EntityNameSpaceView_tmpl.html @@ -24,7 +24,7 @@ </div> </div> <div class="panel-actions"> - <button class="btn btn-action btn-sm" title="" data-id="addNameSpace">Add</button> + <button class="btn btn-action btn-sm" data-id="addNameSpace">Add</button> <button class="btn btn-action btn-sm" style="display: none;" data-id="saveNameSpace">Save</button> <button class="btn btn-action btn-sm" style="display: none;" data-id="cancel">Cancel</button> </div> @@ -35,9 +35,7 @@ <div class="form-group"> <a href="javascript:void(0)" class="btn btn-action btn-sm" data-id="addItem" data-type="addAttrButton">Add New Attribute</a> </div> - <table class="custom-table"> - <tbody data-id="itemView"></tbody> - </table> + <ul class="namespace-tree-parent" data-id="itemView"></ul> </div> </div> </div> diff --git a/dashboardv3/public/js/templates/name_space/NameSpaceAttributeItemView_tmpl.html b/dashboardv3/public/js/templates/name_space/NameSpaceAttributeItemView_tmpl.html index f7bc9cd..f374ec4 100644 --- a/dashboardv3/public/js/templates/name_space/NameSpaceAttributeItemView_tmpl.html +++ b/dashboardv3/public/js/templates/name_space/NameSpaceAttributeItemView_tmpl.html @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. --> -<div class="form-group clearfix namespace-attr"> +<div id="{{modalID}}" class="form-group clearfix namespace-attr"> <div class="form-group"> <div class="col-sm-12 attributePlusData " align="right"> <button type="button" class="btn btn-danger btn-sm closeInput" data-id="close"><i class="fa fa-times"></i></button> diff --git a/dashboardv3/public/js/views/entity/EntityNameSpaceItemView.js b/dashboardv3/public/js/views/entity/EntityNameSpaceItemView.js index 29a87cf..4cde4bf 100644 --- a/dashboardv3/public/js/views/entity/EntityNameSpaceItemView.js +++ b/dashboardv3/public/js/views/entity/EntityNameSpaceItemView.js @@ -38,8 +38,8 @@ define(['require', model: this.model.toJSON() } }, - tagName: 'tr', - className: "custom-tr", + tagName: 'li', + className: "namespace-tree-child", /** Layout sub regions */ regions: {}, @@ -142,9 +142,10 @@ define(['require', }); } }, - getAttrElement: function(options) { + getAttrElement: function(opt) { var that = this, - returnEL = "N/A"; + returnEL = "N/A", + options = $.extend(true, {}, opt); if (options) { var key = options.key, typeName = options.val.typeName || "", @@ -153,24 +154,21 @@ define(['require', namespace = options.namespace, allowOnlyNum = false; var elType = isMultiValued ? "select" : "input"; - if (!_.isEmpty(val)) { + if (!isMultiValued && !_.isEmpty(val)) { val = _.escape(val); } if (!_.isUndefinedNull(val) && typeName.indexOf("boolean") > -1) { val = String(val); } if (typeName.indexOf("date") > -1) { - if (isMultiValued && val) { - var dateVlaues = val.split(','); - if (dateVlaues.length) { - var dateStr = []; - _.each(dateVlaues, function(selectedDate) { - selectedDate = parseInt(selectedDate); - dateStr.push(moment(selectedDate).format("MM/DD/YYYY")); - }); - val = dateStr.join(','); - } - } else if (val) { + if (isMultiValued && val && val.length) { + var dateStr = []; + _.each(val, function(selectedDate) { + selectedDate = parseInt(selectedDate); + dateStr.push(moment(selectedDate).format("MM/DD/YYYY")); + }); + val = dateStr.join(','); + } else if (!isMultiValued && val) { val = parseInt(val); val = moment(val).format("MM/DD/YYYY"); } @@ -199,13 +197,14 @@ define(['require', allowOnlyNum = true; returnEL = '<' + elType + ' data-key="' + key + '" data-namespace="' + namespace + '" data-typename="' + typeName + '" type="number" data-multi="' + isMultiValued + '" data-tags="true" placeholder="Enter Number" class="form-control" ' + (!_.isUndefinedNull(val) ? 'value="' + val + '"' : "") + '></' + elType + '>'; } else if (typeName) { + var modTypeName = typeName; if (isMultiValued) { var multipleType = typeName.match("array<(.*)>"); if (multipleType && multipleType[1]) { - typeName = multipleType[1]; + modTypeName = multipleType[1]; } } - var foundEnumType = this.enumDefCollection.fullCollection.find({ name: typeName }); + var foundEnumType = this.enumDefCollection.fullCollection.find({ name: modTypeName }); if (foundEnumType) { var enumOptions = ""; _.forEach(foundEnumType.get("elementDefs"), function(obj) { @@ -214,15 +213,17 @@ define(['require', returnEL = '<select data-key="' + key + '" data-namespace="' + namespace + '" data-typename="' + typeName + '" data-multi="' + isMultiValued + '" >' + enumOptions + '</select>'; } setTimeout(function() { - var selectEl = that.$el.find('.custom-col-1[data-id="value"] select[data-key="' + key + '"]'); - selectEl.val((val || "")); - selectEl.select2(); + if (!isMultiValued) { + var selectEl = that.$el.find('.custom-col-1[data-id="value"] select[data-key="' + key + '"]'); + selectEl.val((val || "")); + selectEl.select2(); + } }, 0); } if (isMultiValued) { setTimeout(function() { var selectEl = that.$el.find('.custom-col-1[data-id="value"] select[data-key="' + key + '"][data-multi="true"]'); - var data = val && val.split(",") || []; + var data = val && val.length && (_.isArray(val) ? val : val.split(",")) || []; if (allowOnlyNum) { selectEl.parent().addClass("select2_only_number"); } @@ -323,7 +324,7 @@ define(['require', '<button class="btn btn-default btn-sm" data-key="' + key + '" data-id="deleteItem">' + '<i class="fa fa-times"> </i>' + '</button></td>'; - trs += "<tr>" + td + "</tr>"; + trs += "<tr class='custom-tr'>" + td + "</tr>"; } }) this.$("[data-id='namespaceTreeChild']").html("<table class='custom-table'>" + trs + "</table>"); diff --git a/dashboardv3/public/js/views/entity/EntityNameSpaceView.js b/dashboardv3/public/js/views/entity/EntityNameSpaceView.js index 645fc3e..3210255 100644 --- a/dashboardv3/public/js/views/entity/EntityNameSpaceView.js +++ b/dashboardv3/public/js/views/entity/EntityNameSpaceView.js @@ -117,10 +117,8 @@ define([ this.$el.find(".panel-heading").addClass("collapsed"); this.$el.find(".panel-collapse.collapse").removeClass("in"); this.ui.addNameSpace.text("Add"); - this.ui.addNameSpace.attr("data-original-title", "Add"); } else { this.ui.addNameSpace.text("Edit"); - this.ui.addNameSpace.attr("data-original-title", "Edit All"); this.$el.find(".panel-heading").removeClass("collapsed"); this.$el.find(".panel-collapse.collapse").addClass("in"); } @@ -157,8 +155,13 @@ define([ if (!this.validate()) { return; } + var nData = this.generateData(); + if (this.actualCollection.length === 0 && _.isEmpty(nData)) { + this.onCancel(); + return; + } this.entityModel.saveNamespaceEntity(this.guid, { - data: JSON.stringify(this.generateData()), + data: JSON.stringify(nData), type: "POST", success: function(data) { Utils.notifySuccess({ diff --git a/dashboardv3/public/js/views/name_space/CreateNameSpaceLayoutView.js b/dashboardv3/public/js/views/name_space/CreateNameSpaceLayoutView.js index de1eedd..5cdd145 100644 --- a/dashboardv3/public/js/views/name_space/CreateNameSpaceLayoutView.js +++ b/dashboardv3/public/js/views/name_space/CreateNameSpaceLayoutView.js @@ -281,17 +281,67 @@ define(['require', return true; } }, + namespaceAttributes: function(modelEl, obj, elementValues) { + obj.options = { + "applicableEntityTypes": JSON.stringify(modelEl.find(".entityTypeSelector").val()), + "maxStrLength": modelEl.find(".stringLengthVal").val() ? modelEl.find(".stringLengthVal").val() : "0" + }; + + if (obj.typeName != "string" && obj.typeName != "boolean" && obj.typeName != "byte" && obj.typeName != "short" && obj.typeName != "int" && obj.typeName != "float" && obj.typeName != "double" && obj.typeName != "long" && obj.typeName != "date") { + var enumName = enumDefCollection.fullCollection.findWhere({ name: obj.typeName }); + if (enumName) { + var enumDef = enumName.get('elementDefs'); + if (enumDef.length === obj.enumValues.length) { + _.each(enumDef, function(enumVal, index) { + if (obj.enumValues.indexOf(enumVal.value) === -1) { + this.isPutCall = true; + }; + }) + } else { + this.isPutCall = true; + } + } else { + this.isPostCallEnum = true; + } + + _.each(obj.enumValues, function(inputEnumVal, index) { + elementValues.push({ + "ordinal": index + 1, + "value": inputEnumVal + }) + }); + } + if (obj.multiValueSelect) { + obj.multiValued = true; + obj.typeName = "array<" + obj.typeName + ">"; + } + }, + highlightAttrinuteName: function(modelEl, obj) { + Utils.notifyInfo({ + content: "Attribute " + obj.name + " already exist" + }); + modelEl.find(".attributeInput").css("borderColor", "red"); + this.loaderStatus(false); + }, + createEnumObject: function(arrayObj, obj, enumVal) { + return arrayObj.push({ + "name": obj.typeName, + "elementDefs": enumVal + }); + }, onCreateNameSpace: function() { var that = this, validate = true, attrNameValidate = true, enumValue = true, stringValidate = true, - isPutCall = false, - isPostCallEnum = false, enumDefs = [], - putEnumDef = []; + putEnumDef = [], + attrNames = [], + isvalidName = true; this.checkLoader = 0; + this.isPutCall = false; + this.isPostCallEnum = false; if (this.validateValues()) { return; @@ -305,51 +355,22 @@ define(['require', } if (attributeObj.length) { _.each(attributeObj, function(obj) { - var isMultiCheck = obj.multiValueSelect; - obj.options = { - "applicableEntityTypes": JSON.stringify(that.$el.find(".entityTypeSelector").val()), - "maxStrLength": that.$el.find(".stringLengthVal").val() ? that.$el.find(".stringLengthVal").val() : "0" - }; - if (obj.typeName != "string" && obj.typeName != "boolean" && obj.typeName != "byte" && obj.typeName != "short" && obj.typeName != "int" && obj.typeName != "float" && obj.typeName != "double" && obj.typeName != "long" && obj.typeName != "date") { - obj.typeName = obj.typeName; - var enumName = enumDefCollection.fullCollection.findWhere({ name: obj.typeName }); - if (enumName) { - var enumDef = enumName.get('elementDefs'); - if (enumDef.length === obj.enumValues.length) { - _.each(enumDef, function(enumVal, index) { - if (obj.enumValues.indexOf(enumVal.value) === -1) { - isPutCall = true; - }; - }) - } else { - isPutCall = true; - } - } else { - isPostCallEnum = true; - } - var elementValues = []; - _.each(obj.enumValues, function(inputEnumVal, index) { - elementValues.push({ - "ordinal": index + 1, - "value": inputEnumVal - }) - }); - if (isPostCallEnum) { - enumDefs.push({ - "name": obj.typeName, - "elementDefs": elementValues - }) - } - if (isPutCall) { - putEnumDef.push({ - "name": obj.typeName, - "elementDefs": elementValues - }) - } + var modelEl = this.$('#' + obj.modalID); + modelEl.find(".attributeInput").css("borderColor", "transparent");; + if (attrNames.indexOf(obj.name) > -1) { + that.highlightAttrinuteName(modelEl, obj); + isvalidName = false; + return true; + } else { + attrNames.push(obj.name); } - if (isMultiCheck) { - obj.multiValued = true; - obj.typeName = "array<" + obj.typeName + ">"; + var elementValues = []; + that.namespaceAttributes(modelEl, obj, elementValues); + if (that.isPostCallEnum) { + that.createEnumObject(enumDefs, obj, elementValues); + } + if (that.isPutCall) { + that.createEnumObject(putEnumDef, obj, elementValues); } }); var notifyObj = { @@ -368,210 +389,178 @@ define(['require', } }; } - this.json = { - "enumDefs": enumDefs, - "structDefs": [], - "classificationDefs": [], - "entityDefs": [], - "namespaceDefs": [{ - "category": "NAMESPACE", - "createdBy": "admin", - "updatedBy": "admin", - "version": 1, - "typeVersion": "1.1", - "name": name.trim(), - "description": description.trim(), - "attributeDefs": attributeObj - }] - }; - - var apiObj = { - sort: false, - success: function(model, response) { - var nameSpaveDef = model.namespaceDefs; - if (nameSpaveDef) { - that.options.nameSpaceCollection.fullCollection.add(nameSpaveDef); - Utils.notifySuccess({ - content: "Namespace " + name + Messages.getAbbreviationMsg(false, 'addSuccessMessage') - }); - } - that.checkLoader--; - if (that.checkLoader == 0) { - that.options.onUpdateNamespace(); + if (isvalidName) { + this.json = { + "enumDefs": enumDefs, + "structDefs": [], + "classificationDefs": [], + "entityDefs": [], + "namespaceDefs": [{ + "category": "NAMESPACE", + "createdBy": "admin", + "updatedBy": "admin", + "version": 1, + "typeVersion": "1.1", + "name": name.trim(), + "description": description.trim(), + "attributeDefs": attributeObj + }] + }; + var apiObj = { + sort: false, + success: function(model, response) { + var nameSpaveDef = model.namespaceDefs; + if (nameSpaveDef) { + that.options.nameSpaceCollection.fullCollection.add(nameSpaveDef); + Utils.notifySuccess({ + content: "Namespace " + name + Messages.getAbbreviationMsg(false, 'addSuccessMessage') + }); + } + that.checkLoader--; + if (that.checkLoader == 0) { + that.options.onUpdateNamespace(); + } + }, + silent: true, + reset: true, + complete: function(model, status) { + attrNames = []; + that.loaderStatus(false); } - }, - silent: true, - reset: true, - complete: function(model, status) { - that.loaderStatus(false); } - } - that.checkLoader++; - $.extend(apiObj, { contentType: 'application/json', dataType: 'json', data: JSON.stringify(that.json) }) - this.options.nameSpaceCollection.constructor.nonCrudOperation.call(this, UrlLinks.nameSpaceApiUrl(), "POST", apiObj); - if (isPutCall) { - var putData = { - "enumDefs": putEnumDef - }; that.checkLoader++; - $.extend(apiObj, { contentType: 'application/json', dataType: 'json', data: JSON.stringify(putData) }) - this.options.nameSpaceCollection.constructor.nonCrudOperation.call(this, UrlLinks.typedefsUrl().defs, "PUT", apiObj); + $.extend(apiObj, { contentType: 'application/json', dataType: 'json', data: JSON.stringify(that.json) }) + this.options.nameSpaceCollection.constructor.nonCrudOperation.call(this, UrlLinks.nameSpaceApiUrl(), "POST", apiObj); + if (that.isPutCall) { + var putData = { + "enumDefs": putEnumDef + }; + that.checkLoader++; + $.extend(apiObj, { contentType: 'application/json', dataType: 'json', data: JSON.stringify(putData) }) + this.options.nameSpaceCollection.constructor.nonCrudOperation.call(this, UrlLinks.typedefsUrl().defs, "PUT", apiObj); + } + } else { + attrNames = []; } + }, onUpdateAttr: function() { var that = this, attrNameValidate = true, enumValue = true, stringValidate = true, - attributeDefs = that.options.selectedNamespace.get('attributeDefs'), enumDefs = [], postEnumDef = [], - isPutCall = false, - isPostCallEnum = false; + selectedNamespace = $.extend(true, {}, that.options.selectedNamespace.toJSON()), + attributeDefs = selectedNamespace['attributeDefs'], + isvalidName = true; this.checkLoader = 0; + this.isPutCall = false; + this.isPostCallEnum = false; if (this.validateValues()) { return; }; if (this.$el.find(".namespace-attr").length > 0 && this.collection.length > 0) { - this.loaderStatus(true); - var attributeObj = this.collection.toJSON(), - name = this.collection.first().get("name"), - multipleName = ''; - if (this.collection.length === 1 && this.collection.first().get("name") === "") { - attributeObj = []; - } - if (attributeObj.length > 0) { - _.each(attributeObj, function(obj) { - var isMultiCheck = obj.multiValueSelect; - multipleName += obj.name + ", "; - obj.options = { - "applicableEntityTypes": JSON.stringify(that.$el.find(".entityTypeSelector").val()), - "maxStrLength": that.$el.find(".stringLengthVal").val() ? that.$el.find(".stringLengthVal").val() : "0" - }; - if (obj.typeName != "string" && obj.typeName != "boolean" && obj.typeName != "byte" && obj.typeName != "short" && obj.typeName != "int" && obj.typeName != "float" && obj.typeName != "double" && obj.typeName != "long" && obj.typeName != "date") { - var enumName = enumDefCollection.fullCollection.findWhere({ name: obj.typeName }); - if (enumName) { - var enumDef = enumName.get('elementDefs'); - if (enumDef.length === obj.enumValues.length) { - _.each(enumDef, function(enumVal, index) { - if (obj.enumValues.indexOf(enumVal.value) === -1) { - isPutCall = true; - }; - }) - } else { - isPutCall = true; - } - } else { - isPostCallEnum = true; - } - var elementValues = []; - _.each(obj.enumValues, function(inputEnumVal, index) { - elementValues.push({ - "ordinal": index + 1, - "value": inputEnumVal - }) - }); - if (isPostCallEnum) { - postEnumDef.push({ - "name": obj.typeName, - "elementDefs": elementValues - }) - - } else if (isPutCall) { - enumDefs.push({ - "name": obj.typeName, - "elementDefs": elementValues - }) - } + if (this.collection.length > 0) { + this.collection.each(function(model) { + var obj = model.toJSON(), + modelEl = this.$('#' + obj.modalID); + modelEl.find(".attributeInput").css("borderColor", "transparent"); + if (that.options.isNewAttr == true && _.find(attributeDefs, { name: obj.name })) { + that.highlightAttrinuteName(modelEl, obj); + isvalidName = false; + return true; } - if (isMultiCheck) { - obj.multiValued = true; - obj.typeName = "array<" + obj.typeName + ">"; + var elementValues = []; + that.namespaceAttributes(modelEl, obj, elementValues); + if (that.isPostCallEnum) { + that.createEnumObject(postEnumDef, obj, elementValues); + } else if (that.isPutCall) { + that.createEnumObject(enumDefs, obj, elementValues); } - }); - var notifyObj = { - modal: true, - confirm: { - confirm: true, - buttons: [{ - text: "Ok", - addClass: "btn-atlas btn-md", - click: function(notice) { - notice.remove(); - } - }, - null - ] - } - }; - if (that.options.isNewAttr == true) { - _.each(attributeObj, function(obj) { - attributeDefs.push(obj); - }) - } else { - var selectedNamespaceUpdateCopy = that.options.selectedNamespace; - var attrDef = selectedNamespaceUpdateCopy.toJSON().attributeDefs; - _.each(attrDef, function(attrObj) { - if (attrObj.name === that.$el.find(".attributeInput")[0].value) { - attrObj.name = attributeObj[0].name; - attrObj.typeName = attributeObj[0].typeName; - attrObj.multiValued = attributeObj[0].multiValueSelect || false; - attrObj.options.applicableEntityTypes = attributeObj[0].options.applicableEntityTypes; - attrObj.enumValues = attributeObj[0].enumValues; - attrObj.options.maxStrLength = attributeObj[0].options.maxStrLength; - } - }); - } - var putNameSpace = function() { - that.checkLoader++; - $.extend(apiObj, { contentType: 'application/json', dataType: 'json', data: JSON.stringify(that.json) }) - that.options.nameSpaceCollection.constructor.nonCrudOperation.call(that, UrlLinks.nameSpaceUpdateUrl(), "PUT", apiObj); - } - this.json = { - "enumDefs": enumDefs, - "structDefs": [], - "classificationDefs": [], - "entityDefs": [], - "namespaceDefs": that.options.isNewAttr ? [that.options.selectedNamespace.toJSON()] : [selectedNamespaceUpdateCopy.toJSON()] - }; - var apiObj = { - sort: false, - success: function(model, response) { - if (model.namespaceDefs.length === 0 && model.enumDefs.length) { - putNameSpace(); - } else { - var selectedNameSpace = that.options.nameSpaceCollection.fullCollection.findWhere({ guid: that.options.guid }); - Utils.notifySuccess({ - content: "One or more Namespace attribute" + Messages.getAbbreviationMsg(false, 'editSuccessMessage') - }); - if (model.namespaceDefs && model.namespaceDefs.length) { - that.options.selectedNamespace.set(model.namespaceDefs[0]); + if (that.options.isNewAttr == true) { + selectedNamespace.attributeDefs.push(obj); + } else { + var attrDef = selectedNamespace.attributeDefs; + _.each(attrDef, function(attrObj) { + if (attrObj.name === that.$el.find(".attributeInput")[0].value) { + attrObj.name = obj.name; + attrObj.typeName = obj.typeName; + attrObj.multiValued = obj.multiValueSelect || false; + attrObj.options.applicableEntityTypes = obj.options.applicableEntityTypes; + attrObj.enumValues = obj.enumValues; + attrObj.options.maxStrLength = obj.options.maxStrLength; } - that.options.onEditCallback(); - } - that.checkLoader--; - if (that.checkLoader == 0) { - that.options.onUpdateNamespace(); + }); + } + }); + if (isvalidName) { + var notifyObj = { + modal: true, + confirm: { + confirm: true, + buttons: [{ + text: "Ok", + addClass: "btn-atlas btn-md", + click: function(notice) { + notice.remove(); + } + }, + null + ] } + }; - }, - silent: true, - reset: true, - complete: function(model, status) { - that.loaderStatus(false); + var putNameSpace = function() { + that.checkLoader++; + $.extend(apiObj, { contentType: 'application/json', dataType: 'json', data: JSON.stringify(that.json) }) + that.options.nameSpaceCollection.constructor.nonCrudOperation.call(that, UrlLinks.nameSpaceUpdateUrl(), "PUT", apiObj); } - } - if (isPostCallEnum) { - var postData = { - "enumDefs": postEnumDef + this.json = { + "enumDefs": enumDefs, + "structDefs": [], + "classificationDefs": [], + "entityDefs": [], + "namespaceDefs": that.options.isNewAttr ? [selectedNamespace] : [selectedNamespace] }; - this.checkLoader++; - $.extend(apiObj, { contentType: 'application/json', dataType: 'json', data: JSON.stringify(postData) }) - this.options.nameSpaceCollection.constructor.nonCrudOperation.call(this, UrlLinks.typedefsUrl().defs, "POST", apiObj); - } else { - putNameSpace(); + var apiObj = { + sort: false, + success: function(model, response) { + if (model.namespaceDefs.length === 0 && model.enumDefs.length) { + putNameSpace(); + } else { + var selectedNameSpace = that.options.nameSpaceCollection.fullCollection.findWhere({ guid: that.options.guid }); + Utils.notifySuccess({ + content: "One or more Namespace attribute" + Messages.getAbbreviationMsg(false, 'editSuccessMessage') + }); + if (model.namespaceDefs && model.namespaceDefs.length) { + that.options.selectedNamespace.set(model.namespaceDefs[0]); + } + that.options.onEditCallback(); + } + that.checkLoader--; + if (that.checkLoader == 0) { + that.options.onUpdateNamespace(); + } + }, + silent: true, + reset: true, + complete: function(model, status) { + that.loaderStatus(false); + } + } + if (that.isPostCallEnum) { + var postData = { + "enumDefs": postEnumDef + }; + this.checkLoader++; + $.extend(apiObj, { contentType: 'application/json', dataType: 'json', data: JSON.stringify(postData) }) + this.options.nameSpaceCollection.constructor.nonCrudOperation.call(this, UrlLinks.typedefsUrl().defs, "POST", apiObj); + } else { + putNameSpace(); + } } } } else { diff --git a/dashboardv3/public/js/views/name_space/EnumCreateUpdateItemView.js b/dashboardv3/public/js/views/name_space/EnumCreateUpdateItemView.js index 2388ce3..4f42288 100644 --- a/dashboardv3/public/js/views/name_space/EnumCreateUpdateItemView.js +++ b/dashboardv3/public/js/views/name_space/EnumCreateUpdateItemView.js @@ -89,12 +89,20 @@ define(["require", "backbone", "hbs!tmpl/name_space/EnumCreateUpdateItemView_tmp entitytypes = "", enumTypes = []; this.ui.enumValueSelectorContainer.hide(); + this.bindEvents(); this.emumTypeSelectDisplay(); if (!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 = [], @@ -225,7 +233,8 @@ define(["require", "backbone", "hbs!tmpl/name_space/EnumCreateUpdateItemView_tmp content: "Enumeration " + selectedEnumName + " updated successfully" }); } - if (that.options.onUpdateEnum) { + that.enumDefCollection.fetch({ reset: true }); + if (that.options.onUpdateEnum) { //callback from namespaceattributeItemView that.options.onUpdateEnum(); } that.ui.enumCancleBtn.attr("disabled", "true"); diff --git a/dashboardv3/public/js/views/name_space/NameSpaceAttributeItemView.js b/dashboardv3/public/js/views/name_space/NameSpaceAttributeItemView.js index b537e41..a8837f9 100644 --- a/dashboardv3/public/js/views/name_space/NameSpaceAttributeItemView.js +++ b/dashboardv3/public/js/views/name_space/NameSpaceAttributeItemView.js @@ -30,6 +30,11 @@ define(['require', { template: NameSpaceAttributeItemViewTmpl, + templateHelpers: function() { + return { + modalID: this.viewId + }; + }, /** Layout sub regions */ regions: {}, @@ -109,12 +114,14 @@ define(['require', */ initialize: function(options) { this.parentView = options.parentView; + this.viewId = options.model ? options.model.cid : this.parentView.cid; }, onRender: function() { var that = this, entitytypes = '', enumTypes = []; + this.model.set({ "modalID": this.viewId }); this.parentView.typeHeaders.fullCollection.each(function(model) { if (model.toJSON().category == "ENTITY") { that.ui.entityTypeSelector.append("<option>" + model.get('name') + "</option>"); diff --git a/dashboardv3/public/js/views/name_space/NameSpaceTableLayoutView.js b/dashboardv3/public/js/views/name_space/NameSpaceTableLayoutView.js index 390542b..3697d91 100644 --- a/dashboardv3/public/js/views/name_space/NameSpaceTableLayoutView.js +++ b/dashboardv3/public/js/views/name_space/NameSpaceTableLayoutView.js @@ -151,15 +151,15 @@ define(['require', }, onEditAttr: function(e) { var that = this, - isAttrEdit = e.target.dataset && e.target.dataset.id === 'attributeEdit' ? true : false, - guid = e.target.dataset && e.target.dataset.guid ? e.target.dataset.guid : null, + isAttrEdit = e.currentTarget.dataset && e.currentTarget.dataset.id === 'attributeEdit' ? true : false, + guid = e.currentTarget.dataset && e.currentTarget.dataset.guid ? e.currentTarget.dataset.guid : null, selectedNamespace = that.nameSpaceCollection.fullCollection.findWhere({ guid: guid }), attrributes = selectedNamespace ? selectedNamespace.get('attributeDefs') : null, - attrName = e.target.dataset.name ? e.target.dataset.name : null, + attrName = e.currentTarget.dataset.name ? e.currentTarget.dataset.name : null, attrDetails = { name: attrName }; if (selectedNamespace) { that.ui.namespaceAttrPageOk.text("Save"); - that.newAttr = e.target && e.target.dataset.action === "createAttr" ? true : false; + that.newAttr = e.currentTarget && e.currentTarget.dataset.action === "createAttr" ? true : false; that.guid = guid; _.each(attrributes, function(attrObj) { if (attrObj.name === attrName) { @@ -176,7 +176,7 @@ define(['require', that.showDetails = false; that.toggleNamespaceDetailsAttrView(); - that.ui.namespaceAttrPageOk.attr('data-action', e.target.dataset.id); + that.ui.namespaceAttrPageOk.attr('data-action', e.currentTarget.dataset.id); require(["views/name_space/CreateNameSpaceLayoutView"], function(CreateNameSpaceLayoutView) { that.view = new CreateNameSpaceLayoutView({ onEditCallback: function() {
