blob: 0560f9863755e252198673cdb6a18d1a45b064cc [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
define(['require',
'backbone',
'hbs!tmpl/entity/EntityUserDefineView_tmpl',
'models/VEntity',
'utils/Utils',
'utils/Enums',
'utils/Messages'
], function(require, Backbone, EntityUserDefineView_tmpl, VEntity, Utils, Enums, Messages) {
'use strict';
return Backbone.Marionette.LayoutView.extend({
_viewName: 'EntityUserDefineView',
template: EntityUserDefineView_tmpl,
templateHelpers: function() {
return {
customAttibutes: this.customAttibutes,
readOnlyEntity : this.readOnlyEntity,
swapItem: this.swapItem,
saveAttrItems: this.saveAttrItems
};
},
ui: {
addAttr: "[data-id='addAttr']",
editAttr: "[data-id='editAttr']",
saveAttrItems: "[data-id='saveAttrItems']"
},
events: function() {
var events = {};
events["click " + this.ui.addAttr] = 'onAddAttrClick';
events["click " + this.ui.editAttr] = 'onEditAttrClick';
events["click " + this.ui.saveAttrItems] = 'onEditAttrClick';
return events;
},
initialize: function(options) {
_.extend(this, _.pick(options, 'entity'));
this.userDefineAttr = this.entity.customAttributes || [];
this.initialCall = false;
this.swapItem = false, this.saveAttrItems = false;
this.readOnlyEntity = Enums.entityStateReadOnly[this.entity.status];
this.entityModel = new VEntity(this.entity);
this.generateTableFields();
},
onRender: function() {
},
renderEntityUserDefinedItems: function() {
var that = this;
require(['views/entity/EntityUserDefineItemView'], function(EntityUserDefineItemView) {
that.itemView = new EntityUserDefineItemView({items: that.customAttibutes});
that.REntityUserDefinedItemView.show(that.itemView);
});
},
bindEvents: {},
addChildRegion: function() {
this.addRegions({
REntityUserDefinedItemView: "#r_entityUserDefinedItemView"
});
this.renderEntityUserDefinedItems();
},
onAddAttrClick: function() {
this.swapItem = !this.swapItem;
this.saveAttrItems = this.swapItem === true ? true : false;
this.initialCall = true;
this.render();
if (this.swapItem === true) {
this.addChildRegion();
}
},
generateTableFields: function() {
var that = this;
this.customAttibutes = [];
_.each(Object.keys(that.userDefineAttr), function(key, i) {
that.customAttibutes.push({
key: key,
value: that.userDefineAttr[key]
});
});
},
onEditAttrClick: function () {
this.initialCall = false;
this.setAttributeModal(this.itemView);
},
structureAttributes: function (list) {
var obj={}
list.map(function (o) {
obj[o.key] = o.value;
});
return obj;
},
saveAttributes: function (list) {
var that = this;
var entityJson = that.entityModel.toJSON();
var properties = that.structureAttributes(list);
entityJson.customAttributes = properties;
var payload = {entity: entityJson};
that.entityModel.createOreditEntity({
data: JSON.stringify(payload),
type: 'POST',
success: function() {
var msg = that.initialCall ? 'addSuccessMessage' : 'editSuccessMessage';
that.customAttibutes = list;
Utils.notifySuccess({
content: "User-defined properties " + Messages[msg]
});
that.swapItem = false;
that.saveAttrItems = false;
that.render();
},
error: function (e) {
that.initialCall = false;
Utils.notifySuccess({
content: e.message
});
that.ui.saveAttrItems.attr("disabled", false);
},
complete: function () {
that.ui.saveAttrItems.attr("disabled", false);
that.initialCall = false;
}
});
},
setAttributeModal: function(itemView) {
var self = this;
this.ui.saveAttrItems.attr("disabled", true);
var list = itemView.$el.find("[data-type]"),
keyMap = new Map(),
validation = true,
hasDup = [],
dataList = [];
Array.prototype.push.apply(dataList, itemView.items);
for(var i = 0; i < list.length ; i++) {
var input = list[i],
type = input.dataset.type,
pEl = itemView.$el.find(input.parentElement).find('p'),
classes = 'form-control',
val = input.value.trim();
pEl[0].innerText = "";
if (val === '') {
classes = 'form-control errorClass';
validation = false;
pEl[0].innerText = 'Required!';
} else {
if (input.tagName === 'INPUT') {
var duplicates = dataList.filter(function(c) {
return c.key === val;
});
if (keyMap.has(val) || duplicates.length > 1 ) {
classes = 'form-control errorClass';
hasDup.push('duplicate');
pEl[0].innerText = 'Duplicate key';
} else {
keyMap.set(val, val);
}
}
}
input.setAttribute('class', classes);
}
if (validation && hasDup.length === 0) {
self.saveAttributes(itemView.items);
} else {
this.ui.saveAttrItems.attr("disabled", false);
}
}
});
});