You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by ma...@apache.org on 2019/04/15 19:23:38 UTC
[atlas] 03/04: ATLAS-3128: UI: Create entity is not working after
new relationship attribute introduce
This is an automated email from the ASF dual-hosted git repository.
madhan pushed a commit to branch branch-1.0
in repository https://gitbox.apache.org/repos/asf/atlas.git
commit 1dff81af649b51b4607fa42262b588cc64885aba
Author: kevalbhatt <kb...@apache.org>
AuthorDate: Wed Apr 10 14:09:53 2019 -0700
ATLAS-3128: UI: Create entity is not working after new relationship attribute introduce
Signed-off-by: Sarath Subramanian <ss...@hortonworks.com>
(cherry picked from commit 39b059e03d3cc728745e7b1c90a7be774ebca0fa)
---
dashboardv2/public/css/scss/form.scss | 87 +++++++
dashboardv2/public/css/scss/override.scss | 2 +-
dashboardv2/public/css/scss/theme.scss | 11 +-
.../entity/CreateEntityLayoutView_tmpl.html | 2 +-
dashboardv2/public/js/utils/Helper.js | 3 +
dashboardv2/public/js/utils/Utils.js | 79 ++++--
.../js/views/entity/CreateEntityLayoutView.js | 272 +++++++++++++++++----
7 files changed, 385 insertions(+), 71 deletions(-)
diff --git a/dashboardv2/public/css/scss/form.scss b/dashboardv2/public/css/scss/form.scss
index b7ade88..3e63e8b 100644
--- a/dashboardv2/public/css/scss/form.scss
+++ b/dashboardv2/public/css/scss/form.scss
@@ -23,10 +23,12 @@
.control-label-sm {
padding-top: 3px;
}
+
.control-label-sm-pl {
@extend .control-label-sm;
padding-left: 10px;
}
+
.control-label-sm-pr {
@extend .control-label-sm;
padding-right: 10px;
@@ -44,6 +46,7 @@
&.text-left {
text-align: left;
}
+
&.text-right {
text-align: right;
}
@@ -53,6 +56,7 @@
//Instead of the line below you could use @include border-radius($radius, $vertical-radius)
background-color: $color_mystic_approx;
border: 1px $color_mystic_approx solid;
+
&:focus {
border-color: $color_bali_hai_approx;
outline: 0; //Instead of the line below you could use @include box-shadow($shadow-1, $shadow-2, $shadow-3, $shadow-4, $shadow-5, $shadow-6, $shadow-7, $shadow-8, $shadow-9, $shadow-10)
@@ -62,6 +66,7 @@
}
.form-color {
+
.form-group span[class^="select2-selection select2-selection--"],
.form-control {
background-color: #e8e8e8 !important;
@@ -70,6 +75,7 @@
.sidebar-wrapper {
z-index: 9 !important;
+
.form-control {
background-color: $white;
border: 1px $white solid;
@@ -83,6 +89,7 @@
textarea {
resize: none;
+
&:focus {
outline: none !important;
}
@@ -99,6 +106,7 @@ button:focus {
.btn {
//Instead of the line below you could use @include border-radius($radius, $vertical-radius)
border-radius: 4px;
+
&:hover {
text-decoration: none;
}
@@ -106,6 +114,7 @@ button:focus {
[class^="col-md-"],
[class^="col-sm-"] {
+
.btn.checkbox-inline,
.btn.radio-inline {
padding-left: 19px;
@@ -116,6 +125,7 @@ button:focus {
color: $white;
background-color: $color_blue_bayoux_approx;
border-color: $color_blue_bayoux_approx;
+
&:hover {
color: $white;
background-color: $color_pickled_bluewood_approx;
@@ -127,11 +137,13 @@ button:focus {
color: $white;
background-color: $color_jungle_green_approx;
border-color: $color_jungle_green_approx;
+
&:hover {
color: $white;
background-color: $color_jungle_green_approx;
border-color: $color_jungle_green_approx;
}
+
&:focus {
color: $white;
background-color: $color_jungle_green_approx;
@@ -143,11 +155,13 @@ button:focus {
color: $white;
background-color: $color_picton_blue_approx;
border-color: $color_picton_blue_approx;
+
&:hover {
color: $white;
background-color: $color_curious_blue_approx;
border-color: $color_curious_blue_approx;
}
+
&:focus {
color: $white;
background-color: $color_curious_blue_approx;
@@ -159,11 +173,13 @@ button:focus {
color: $white;
background-color: $color_yellow_sea_approx;
border-color: $color_yellow_sea_approx;
+
&:hover {
color: $white;
background-color: $color_gamboge_approx;
border-color: $color_gamboge_approx;
}
+
&:focus {
color: $white;
background-color: $color_gamboge_approx;
@@ -175,11 +191,13 @@ button:focus {
color: $white;
background-color: $color_trinidad_approx;
border-color: $color_trinidad_approx;
+
&:hover {
color: $white;
background-color: $color_grenadier_approx;
border-color: $color_grenadier_approx;
}
+
&:focus {
color: $white;
background-color: $color_grenadier_approx;
@@ -196,17 +214,21 @@ button:focus {
border-radius: 4px; //Instead of the line below you could use @include transition($transition-1, $transition-2, $transition-3, $transition-4, $transition-5, $transition-6, $transition-7, $transition-8, $transition-9, $transition-10)
transition: all .3s ease;
margin: 2px;
+
&:hover {
@include btn-action-effect('default');
background-color: $transparent;
}
+
&:focus {
@include btn-action-effect('default');
background-color: $transparent;
}
+
&.btn-sm {
padding: 2px 6px;
}
+
&.btn-md {
padding: 6px 10px;
}
@@ -222,17 +244,20 @@ button:focus {
.btn-fixed-width {
.btn-icon {
min-width: 100px;
+
&.propagte-classification {
>span {
width: 98px;
}
}
+
>span {
@include ellipsis();
float: left;
width: 76px;
padding: 2px 5px !important;
}
+
>i {
float: right;
line-height: 15px;
@@ -246,6 +271,7 @@ button:focus {
border-radius: 4px;
font-size: 14px;
background-color: $transparent;
+
&.active {
@include btn-action-hover-effect('default');
}
@@ -262,33 +288,41 @@ button:focus {
&.btn-sm {
padding: 2px 6px;
}
+
&.btn-md {
padding: 5px 10px;
}
&.btn-blue {
@include btn-action-effect('blue');
+
&.active {
@include btn-action-hover-effect('blue');
}
+
&:hover {
@include btn-action-hover-effect('blue');
}
+
&:focus {
@include btn-action-effect('blue');
}
+
&.btn-icon {
@include btn-action-effect('blue');
color: $tag_color !important;
+
&:hover {
color: $color_havelock_blue_approx;
background-color: $transparent;
}
+
>span {
&:hover {
@include btn-action-hover-effect('blue');
}
}
+
i.fa {
&:hover {
@include btn-action-hover-effect('blue');
@@ -301,10 +335,12 @@ button:focus {
border: 1px $action_gray solid;
color: $action_gray;
cursor: default;
+
i.fa {
position: relative;
right: -5px;
}
+
&:hover {
color: $white;
background-color: $action_gray;
@@ -315,25 +351,31 @@ button:focus {
padding: 0px;
overflow: hidden;
background-color: $transparent;
+
&:hover {
color: $color_keppel_approx;
background-color: $transparent;
}
+
>span {
padding: 5px;
+
&:hover {
@include btn-action-hover-effect('default');
}
}
+
i.fa {
position: relative;
padding: 5px;
cursor: pointer;
+
&:hover {
@include btn-action-hover-effect('default');
}
}
}
+
&.btn-icon-pd {
i.fa {
padding: 5px;
@@ -343,6 +385,7 @@ button:focus {
}
.btn-group {
+
.btn-atlas,
.btn-action {
margin: 0px;
@@ -353,10 +396,12 @@ button:focus {
>a {
background-color: $color_curious_blue_approx;
border-color: $color_curious_blue_approx;
+
&:focus {
background-color: $color_curious_blue_approx;
border-color: $color_curious_blue_approx;
}
+
&:hover {
background-color: $color_curious_blue_approx;
border-color: $color_curious_blue_approx;
@@ -366,10 +411,12 @@ button:focus {
>span {
background-color: $color_curious_blue_approx;
border-color: $color_curious_blue_approx;
+
&:focus {
background-color: $color_curious_blue_approx;
border-color: $color_curious_blue_approx;
}
+
&:hover {
background-color: $color_curious_blue_approx;
border-color: $color_curious_blue_approx;
@@ -382,6 +429,7 @@ button:focus {
color: $color_mountain_mist_approx;
cursor: default;
margin: 5px 10px;
+
&:hover {
border-color: $color_mountain_mist_approx;
color: $color_mountain_mist_approx !important;
@@ -401,4 +449,43 @@ button:focus {
.list-style-disc {
list-style: disc;
+}
+
+.create-entity-form {
+
+ &.all {
+ .attribute-dash-box {
+ &.alloptional {
+ display: block;
+ }
+ }
+ }
+
+ .attribute-dash-box {
+ border-style: dashed;
+ border-width: 2px;
+ border-spacing: 8px;
+ border-radius: 12px;
+ border-color: #cbcbcb;
+ position: relative;
+ padding: 0px 10px;
+ margin-top: 25px;
+
+ span.required:after {
+ content: "*";
+ padding-left: 1%;
+ color: $red
+ }
+
+ &.alloptional {
+ display: none;
+ }
+
+ .attribute-type-label {
+ background: $white;
+ padding: 5px 10px;
+ position: absolute;
+ top: -16px;
+ }
+ }
}
\ No newline at end of file
diff --git a/dashboardv2/public/css/scss/override.scss b/dashboardv2/public/css/scss/override.scss
index 5754aac..f388c0b 100644
--- a/dashboardv2/public/css/scss/override.scss
+++ b/dashboardv2/public/css/scss/override.scss
@@ -50,7 +50,7 @@
.modal-body {
position: relative;
padding: 15px;
- max-height: 72vh;
+ max-height: calc(100vh - 200px);
min-height: 70px;
overflow: auto;
diff --git a/dashboardv2/public/css/scss/theme.scss b/dashboardv2/public/css/scss/theme.scss
index d603c4a..25ca868 100644
--- a/dashboardv2/public/css/scss/theme.scss
+++ b/dashboardv2/public/css/scss/theme.scss
@@ -112,7 +112,9 @@ header {
h1 {
&.title {
word-break: break-all;
- } // margin-top: 50px;
+ }
+
+ // margin-top: 50px;
margin-bottom: 10px;
font-weight: 600;
@include ellipsis();
@@ -286,15 +288,18 @@ hr[size="10"] {
.panel-title {
display: inline-block;
}
+
i.ec-icon:before {
content: "\f078"
}
+
&.collapsed,
&[aria-expanded="false"] {
i.ec-icon:before {
content: "\f078"
}
}
+
&[aria-expanded="true"] {
i.ec-icon:before {
content: "\f077"
@@ -388,10 +393,6 @@ hr[size="10"] {
box-shadow: none !important;
}
-fieldset.fieldset-child-pd>div {
- padding-left: 12px;
-}
-
.inline-content {
>.inline {
display: inline-block;
diff --git a/dashboardv2/public/js/templates/entity/CreateEntityLayoutView_tmpl.html b/dashboardv2/public/js/templates/entity/CreateEntityLayoutView_tmpl.html
index 689fa29..65ca406 100644
--- a/dashboardv2/public/js/templates/entity/CreateEntityLayoutView_tmpl.html
+++ b/dashboardv2/public/js/templates/entity/CreateEntityLayoutView_tmpl.html
@@ -37,7 +37,7 @@
</div>
</div>
</div>
- <div class="col-sm-12 entityInputData" data-id="entityInputData"></div>
+ <div class="col-sm-12 entityInputData create-entity-form" data-id="entityInputData"></div>
</div>
</form>
<div class="fontLoader-relative entityLoader" style="display:none">
diff --git a/dashboardv2/public/js/utils/Helper.js b/dashboardv2/public/js/utils/Helper.js
index 3f211e9..8a7a521 100644
--- a/dashboardv2/public/js/utils/Helper.js
+++ b/dashboardv2/public/js/utils/Helper.js
@@ -32,6 +32,9 @@ define(['require',
return false;
}
},
+ toArrayifObject: function(val) {
+ return _.isObject(val) ? [val] : val;
+ },
startsWith: function(str, matchStr) {
if (str && matchStr && _.isString(str) && _.isString(matchStr)) {
return str.lastIndexOf(matchStr, 0) === 0
diff --git a/dashboardv2/public/js/utils/Utils.js b/dashboardv2/public/js/utils/Utils.js
index 058bdbf..afbad1f 100644
--- a/dashboardv2/public/js/utils/Utils.js
+++ b/dashboardv2/public/js/utils/Utils.js
@@ -592,27 +592,56 @@ define(['require', 'utils/Globals', 'pnotify', 'utils/Messages', 'utils/Enums',
return _.uniq(superTypes);
}
Utils.getNestedSuperTypeObj = function(options) {
- var flag = 0,
- data = options.data,
- collection = options.collection;
- if (options.attrMerge) {
- var attributeDefs = [];
- } else {
- var attributeDefs = {};
+ var mainData = options.data,
+ collection = options.collection,
+ attrMerge = options.attrMerge,
+ mergeRelationAttributes = options.mergeRelationAttributes || false,
+ seperateRelatioshipAttr = options.seperateRelatioshipAttr || false;
+ if (mergeRelationAttributes && seperateRelatioshipAttr) {
+ throw "Both mergeRelationAttributes & seperateRelatioshipAttr cannot be true!"
+ }
+ var attributeDefs = {};
+ if (attrMerge && !seperateRelatioshipAttr) {
+ attributeDefs = [];
+ } else if (options.attrMerge && seperateRelatioshipAttr) {
+ attributeDefs = {
+ attributeDefs: [],
+ relationshipAttributeDefs: []
+ }
+ }
+ var getRelationshipAttributeDef = function(data) {
+ return _.filter(
+ data.relationshipAttributeDefs,
+ function(obj, key) {
+ return obj;
+ })
}
var getData = function(data, collection) {
if (options.attrMerge) {
- attributeDefs = attributeDefs.concat(data.attributeDefs);
+ if (seperateRelatioshipAttr) {
+ attributeDefs.attributeDefs = attributeDefs.attributeDefs.concat(data.attributeDefs);
+ attributeDefs.relationshipAttributeDefs = attributeDefs.relationshipAttributeDefs.concat(getRelationshipAttributeDef(data));
+ } else {
+ attributeDefs = attributeDefs.concat(data.attributeDefs);
+ if (mergeRelationAttributes) {
+ attributeDefs = attributeDefs.concat(getRelationshipAttributeDef(data));
+ }
+ }
} else {
if (attributeDefs[data.name]) {
- if (_.isArray(attributeDefs[data.name])) {
- attributeDefs[data.name] = attributeDefs[data.name].concat(data.attributeDefs);
+ attributeDefs[data.name] = _.toArrayifObject(attributeDefs[data.name]).concat(data.attributeDefs);
+ } else {
+ if (seperateRelatioshipAttr) {
+ attributeDefs[data.name] = {
+ attributeDefs: data.attributeDefs,
+ relationshipAttributeDefs: data.relationshipAttributeDefs
+ };
} else {
- _.extend(attributeDefs[data.name], data.attributeDefs);
+ attributeDefs[data.name] = data.attributeDefs;
+ if (mergeRelationAttributes) {
+ attributeDefs[data.name] = _.toArrayifObject(attributeDefs[data.name]).concat(getRelationshipAttributeDef(data));
+ }
}
-
- } else {
- attributeDefs[data.name] = data.attributeDefs;
}
}
if (data.superTypes && data.superTypes.length) {
@@ -631,7 +660,27 @@ define(['require', 'utils/Globals', 'pnotify', 'utils/Messages', 'utils/Enums',
});
}
}
- getData(data, collection);
+ getData(mainData, collection);
+ if (attrMerge) {
+ if (seperateRelatioshipAttr) {
+ attributeDefs = {
+ attributeDefs: _.uniq(_.sortBy(attributeDefs.attributeDefs, 'name'), true, function(obj) {
+ return obj.name
+ }),
+ relationshipAttributeDefs: _.uniq(_.sortBy(attributeDefs.relationshipAttributeDefs, 'name'), true, function(obj) {
+ return (obj.name + obj.relationshipTypeName)
+ })
+ }
+ } else {
+ attributeDefs = _.uniq(_.sortBy(attributeDefs, 'name'), true, function(obj) {
+ if (obj.relationshipTypeName) {
+ (obj.name + obj.relationshipTypeName)
+ } else {
+ (obj.name)
+ }
+ });
+ }
+ }
return attributeDefs;
}
diff --git a/dashboardv2/public/js/views/entity/CreateEntityLayoutView.js b/dashboardv2/public/js/views/entity/CreateEntityLayoutView.js
index 6df1af0..a7bef78 100644
--- a/dashboardv2/public/js/views/entity/CreateEntityLayoutView.js
+++ b/dashboardv2/public/js/views/entity/CreateEntityLayoutView.js
@@ -236,7 +236,7 @@ define(['require',
var str = '<option disabled="disabled" selected>--Select entity-type--</option>';
this.entityDefCollection.fullCollection.each(function(val) {
var name = Utils.getName(val.toJSON());
- if (Globals.entityTypeConfList) {
+ if (Globals.entityTypeConfList && name.indexOf("__") !== 0) {
if (_.isEmptyArray(Globals.entityTypeConfList)) {
str += '<option>' + name + '</option>';
} else {
@@ -256,11 +256,13 @@ define(['require',
},
requiredAllToggle: function(checked) {
if (checked) {
+ this.ui.entityInputData.addClass('all').removeClass('required');
this.ui.entityInputData.find('div.true').show();
this.ui.entityInputData.find('fieldset div.true').show();
this.ui.entityInputData.find('fieldset').show();
this.required = false;
} else {
+ this.ui.entityInputData.addClass('required').removeClass('all');
this.ui.entityInputData.find('fieldset').each(function() {
if (!$(this).find('div').hasClass('false')) {
$(this).hide();
@@ -296,26 +298,111 @@ define(['require',
silent: true
});
},
+ renderAttribute: function(object) {
+ var that = this,
+ visitedAttr = {},
+ attributeObj = object.attributeDefs,
+ isAllAttributeOptinal = true,
+ isAllRelationshipAttributeOptinal = true,
+ attributeDefList = attributeObj.attributeDefs,
+ relationshipAttributeDefsList = attributeObj.relationshipAttributeDefs,
+ attributeHtml = "",
+ relationShipAttributeHtml = "",
+ fieldElemetHtml = '',
+ commonInput = function(object) {
+ var value = object.value,
+ containerHtml = '';
+ containerHtml += that.getContainer(object);
+ return containerHtml;
+ };
+ if (attributeDefList.length || relationshipAttributeDefsList.length) {
+ _.each(attributeDefList, function(value) {
+ if (value.isOptional === false) {
+ isAllAttributeOptinal = false;
+ }
+ attributeHtml += commonInput({
+ "value": value,
+ "duplicateValue": false,
+ "isAttribute": true
+ });
+ });
+ _.each(relationshipAttributeDefsList, function(value) {
+ if (value.isOptional === false) {
+ isAllRelationshipAttributeOptinal = false;
+ }
+ if (visitedAttr[value.name] === null) {
+ // on second visited set it to true;and now onwords ignore if same value come.
+ var duplicateRelationship = _.where(relationshipAttributeDefsList, { name: value.name });
+ var str = '<option value="">--Select a Relationship Type--</option>';
+ _.each(duplicateRelationship, function(val, index, list) {
+ str += '<option>' + _.escape(val.relationshipTypeName) + '</option>';
+ });
+ var isOptional = value.isOptional;
+ visitedAttr[value.name] = '<div class="form-group"><select class="form-control row-margin-bottom entityInputBox ' + (value.isOptional === true ? "false" : "true") + '" data-for-key= "' + value.name + '"> ' + str + '</select></div>';
+ } else {
+ relationShipAttributeHtml += commonInput({
+ "value": value,
+ "duplicateValue": true,
+ "isRelation": true
+ });
+ // once visited set it to null;
+ visitedAttr[value.name] = null;
+ }
+ });
+ if (attributeHtml.length) {
+ fieldElemetHtml += that.getFieldElementContainer({
+ "htmlField": attributeHtml,
+ "attributeType": true,
+ "alloptional": isAllAttributeOptinal
+ });
+ }
+ if (relationShipAttributeHtml.length) {
+ fieldElemetHtml += that.getFieldElementContainer({
+ "htmlField": relationShipAttributeHtml,
+ "relationshipType": true,
+ "alloptional": isAllRelationshipAttributeOptinal
+ });
+ }
+ if (fieldElemetHtml.length) {
+ that.ui.entityInputData.append(fieldElemetHtml);
+ _.each(_.keys(visitedAttr), function(key) {
+ if (visitedAttr[key] === null) {
+ return;
+ }
+ var elFound = that.ui.entityInputData.find('[data-key="' + key + '"]');
+ elFound.parent().prepend(visitedAttr[key]);
+ });
+ } else {
+ fieldElemetHtml = "<h4 class='text-center'>Defination not found</h4>";
+ that.ui.entityInputData.append(fieldElemetHtml);
+ }
+
+ }
+ that.ui.entityInputData.find("select[data-for-key]").select2({})
+ return false;
+ },
subAttributeData: function(data) {
var that = this,
attributeInput = "",
alloptional = false,
- attributeDefs = Utils.getNestedSuperTypeObj({ data: data, collection: this.entityDefCollection });
- _.each(_.sortBy(_.keys(attributeDefs)), function(key) {
- if (attributeDefs[key].length) {
- attributeInput = "";
- _.each(_.sortBy(attributeDefs[key], 'name'), function(value) {
- if (value.isOptional == true) {
- alloptional = true;
- }
- attributeInput += that.getContainer(value);
- });
- if (attributeInput !== "") {
- entityTitle = that.getFieldSet(key, alloptional, attributeInput);
- that.ui.entityInputData.append(entityTitle);
+ attributeDefs = Utils.getNestedSuperTypeObj({
+ seperateRelatioshipAttr: true,
+ attrMerge: true,
+ data: data,
+ collection: this.entityDefCollection
+ });
+ if (attributeDefs && attributeDefs.relationshipAttributeDefs.length) {
+ attributeDefs.attributeDefs = _.filter(attributeDefs.attributeDefs, function(obj) {
+ if (_.find(attributeDefs.relationshipAttributeDefs, { name: obj.name }) === undefined) {
+ return true;
}
- }
+ })
+ }
+ //make a function call.
+ this.renderAttribute({
+ attributeDefs: attributeDefs
});
+
if (this.required) {
this.ui.entityInputData.find('fieldset div.true').hide()
this.ui.entityInputData.find('div.true').hide();
@@ -395,19 +482,35 @@ define(['require',
}
});
},
- getContainer: function(value) {
- var entityLabel = this.capitalize(value.name);
- return '<div class="row form-group ' + value.isOptional + '"><span class="col-sm-3">' +
+ getContainer: function(object) {
+ var value = object.value,
+ entityLabel = this.capitalize(value.name);
+
+ return '<div class=" row ' + value.isOptional + '"><span class="col-sm-3">' +
'<label><span class="' + (value.isOptional ? 'true' : 'false required') + '">' + entityLabel + '</span><span class="center-block ellipsis text-gray" title="Data Type : ' + value.typeName + '">' + '(' + Utils.escapeHtml(value.typeName) + ')' + '</span></label></span>' +
- '<span class="col-sm-9">' + (this.getElement(value)) +
+ '<span class="col-sm-9">' + (this.getElement(object)) +
'</input></span></div>';
},
- getFieldSet: function(name, alloptional, attributeInput) {
- return '<fieldset class="form-group fieldset-child-pd ' + (alloptional ? "alloptional" : "") + '"><legend class="legend-sm">' + name + '</legend>' + attributeInput + '</fieldset>';
+ getFieldElementContainer: function(object) {
+ var htmlField = object.htmlField,
+ attributeType = object.attributeType ? object.attributeType : false,
+ relationshipType = object.relationshipType ? object.relationshipType : false,
+ alloptional = object.alloptional,
+ typeOfDefination = (relationshipType ? "Relationships" : "Attributes");
+ return '<div class="attribute-dash-box ' + (alloptional ? "alloptional" : "") + ' "><span class="attribute-type-label">' + (typeOfDefination) + '</span>' + htmlField + '</div>';
},
- getSelect: function(value, entityValue) {
+ getSelect: function(object) {
+ var value = object.value,
+ entityValue = object.entityValue,
+ isAttribute = object.isAttribute,
+ isRelation = object.isRelation;
if (value.typeName === "boolean") {
- return '<select class="form-control row-margin-bottom ' + (value.isOptional === true ? "false" : "true") + '" data-type="' + value.typeName + '" data-key="' + value.name + '" data-id="entityInput">' +
+ return '<select class="form-control row-margin-bottom ' + (value.isOptional === true ? "false" : "true") +
+ '" data-type="' + value.typeName +
+ '" data-attribute="' + isAttribute +
+ '" data-relation="' + isRelation +
+ '" data-key="' + value.name +
+ '" data-id="entityInput">' +
'<option value="">--Select true or false--</option><option value="true">true</option>' +
'<option value="false">false</option></select>';
} else {
@@ -417,13 +520,21 @@ define(['require',
} else {
splitTypeName = value.typeName;
}
- return '<select class="form-control row-margin-bottom entityInputBox ' + (value.isOptional === true ? "false" : "true") + '" data-type="' + value.typeName +
- '" data-key="' + value.name + '" data-id="entitySelectData" data-queryData="' + splitTypeName + '">' + (this.guid ? entityValue : "") + '</select>';
+ return '<select class="form-control row-margin-bottom entityInputBox ' + (value.isOptional === true ? "false" : "true") +
+ '" data-type="' + value.typeName +
+ '" data-attribute="' + isAttribute +
+ '" data-relation="' + isRelation +
+ '" data-key="' + value.name +
+ '" data-id="entitySelectData" data-queryData="' + splitTypeName + '">' + (this.guid ? entityValue : "") + '</select>';
}
},
- getTextArea: function(value, entityValue, structType) {
- var setValue = entityValue
+ getTextArea: function(object) {
+ var value = object.value,
+ setValue = object.entityValue,
+ isAttribute = object.isAttribute,
+ isRelation = object.isRelation,
+ structType = object.structType;
try {
if (structType && entityValue && entityValue.length) {
var parseValue = JSON.parse(entityValue);
@@ -436,20 +547,31 @@ define(['require',
return '<textarea class="form-control entityInputBox ' + (value.isOptional === true ? "false" : "true") + '"' +
' data-type="' + value.typeName + '"' +
' data-key="' + value.name + '"' +
+ ' data-attribute="' + isAttribute + '"' +
+ ' data-relation="' + isRelation + '"' +
' placeholder="' + value.name + '"' +
' data-id="entityInput">' + setValue + '</textarea>';
},
- getInput: function(value, entityValue) {
+ getInput: function(object) {
+ var value = object.value,
+ entityValue = object.entityValue,
+ isAttribute = object.isAttribute,
+ isRelation = object.isRelation;
return '<input class="form-control entityInputBox ' + (value.isOptional === true ? "false" : "true") + '"' +
' data-type="' + value.typeName + '"' +
' value="' + entityValue + '"' +
' data-key="' + value.name + '"' +
+ ' data-attribute="' + isAttribute + '"' +
+ ' data-relation="' + isRelation + '"' +
' placeholder="' + value.name + '"' +
' data-id="entityInput">';
},
- getElement: function(value) {
- var typeName = value.typeName,
+ getElement: function(object) {
+ var value = object.value,
+ isAttribute = object.isAttribute,
+ isRelation = object.isRelation,
+ typeName = value.typeName,
entityValue = "";
if (this.guid) {
var dataValue = this.entityData.get("entity").attributes[value.name];
@@ -469,15 +591,38 @@ define(['require',
}
}
if ((typeName && this.entityDefCollection.fullCollection.find({ name: typeName })) || typeName === "boolean" || typeName.indexOf("array") > -1) {
- return this.getSelect(value, entityValue);
+ return this.getSelect({
+ "value": value,
+ "entityValue": entityValue,
+ "isAttribute": isAttribute,
+ "isRelation": isRelation
+
+ });
} else if (typeName.indexOf("map") > -1) {
- return this.getTextArea(value, entityValue);
+ return this.getTextArea({
+ "value": value,
+ "entityValue": entityValue,
+ "isAttribute": isAttribute,
+ "isRelation": isRelation,
+ "structType": false
+ });
} else {
var typeNameCategory = this.typeHeaders.fullCollection.findWhere({ name: typeName });
if (typeNameCategory && typeNameCategory.get('category') === 'STRUCT') {
- return this.getTextArea(value, entityValue, true);
+ return this.getTextArea({
+ "value": value,
+ "entityValue": entityValue,
+ "isAttribute": isAttribute,
+ "isRelation": isRelation,
+ "structType": true
+ });
} else {
- return this.getInput(value, entityValue);
+ return this.getInput({
+ "value": value,
+ "entityValue": entityValue,
+ "isAttribute": isAttribute,
+ "isRelation": isRelation,
+ });
}
}
},
@@ -485,8 +630,9 @@ define(['require',
var that = this;
this.showLoader();
this.parentEntity = this.ui.entityList.val();
- var entity = {};
- var referredEntities = {};
+ var entityAttribute = {},
+ referredEntities = {},
+ relationshipAttribute = {};
var extractValue = function(value, typeName) {
if (!value) {
return value;
@@ -503,7 +649,8 @@ define(['require',
}
try {
this.ui.entityInputData.find("input,select,textarea").each(function() {
- var value = $(this).val();
+ var value = $(this).val(),
+ el = this;
if ($(this).val() && $(this).val().trim) {
value = $(this).val().trim();
}
@@ -534,19 +681,21 @@ define(['require',
var dataTypeEnitity = $(this).data('type'),
datakeyEntity = $(this).data('key'),
typeName = $(this).data('querydata'),
- typeNameCategory = that.typeHeaders.fullCollection.findWhere({ name: dataTypeEnitity });
-
+ attribute = $(this).data('attribute') == 'undefined' ? false : true,
+ relation = $(this).data('relation') == 'undefined' ? false : true,
+ typeNameCategory = that.typeHeaders.fullCollection.findWhere({ name: dataTypeEnitity }),
+ val = null;
// Extract Data
if (dataTypeEnitity && datakeyEntity) {
if (that.entityDefCollection.fullCollection.find({ name: dataTypeEnitity })) {
- entity[datakeyEntity] = extractValue(value, typeName);
+ val = extractValue(value, typeName);
} else if (dataTypeEnitity === 'date' || dataTypeEnitity === 'time') {
- entity[datakeyEntity] = Date.parse(value);
+ val = Date.parse(value);
} else if (dataTypeEnitity.indexOf("map") > -1 || (typeNameCategory && typeNameCategory.get('category') === 'STRUCT')) {
try {
if (value && value.length) {
parseData = JSON.parse(value);
- entity[datakeyEntity] = parseData;
+ val = parseData;
}
} catch (err) {
$(this).addClass('errorClass');
@@ -554,24 +703,44 @@ define(['require',
return;
}
} else if (dataTypeEnitity.indexOf("array") > -1 && dataTypeEnitity.indexOf("string") === -1) {
- entity[datakeyEntity] = extractValue(value, typeName);
+ val = extractValue(value, typeName);
} else {
if (_.isString(value)) {
if (value.length) {
- entity[datakeyEntity] = value;
+ val = value;
} else {
- entity[datakeyEntity] = null;
+ val = null;
}
} else {
- entity[datakeyEntity] = value;
+ val = value;
}
}
+ if (attribute) {
+ entityAttribute[datakeyEntity] = val;
+ } else if (relation) {
+ relationshipAttribute[datakeyEntity] = val;
+ }
+ } else {
+ var dataRelEntity = $(this).data('forKey');
+ if (dataRelEntity && relationshipAttribute[dataRelEntity]) {
+ if (_.isArray(relationshipAttribute[dataRelEntity])) {
+ _.each(relationshipAttribute[dataRelEntity], function(obj) {
+ if (obj) {
+ obj["relationshipType"] = $(el).val();
+ }
+ });
+ } else {
+ relationshipAttribute[dataRelEntity]["relationshipType"] = $(this).val();
+ }
+
+ }
}
});
var entityJson = {
"entity": {
"typeName": (this.guid ? this.entityData.get("entity").typeName : this.parentEntity),
- "attributes": entity,
+ "attributes": entityAttribute,
+ "relationshipAttributes": relationshipAttribute,
"guid": (this.guid ? this.guid : -1)
},
"referredEntities": referredEntities
@@ -628,17 +797,16 @@ define(['require',
queryData = $(this).data("querydata"),
skip = $(this).data('skip'),
placeholderName = "Select a " + typeData + " from the dropdown list";
-
$this.attr("multiple", ($this.data('type').indexOf("array") === -1 ? false : true));
// Select Value.
if (that.guid) {
var dataValue = that.entityData.get("entity").attributes[keyData],
entities = that.entityData.get("entity").attributes,
+ relationshipType = that.entityData.get("entity").relationshipAttributes[keyData],
referredEntities = that.entityData.get("referredEntities"),
selectedValue = [],
select2Options = [];
-
if (dataValue) {
if (_.isObject(dataValue) && !_.isArray(dataValue)) {
dataValue = [dataValue];
@@ -653,6 +821,12 @@ define(['require',
}
}
});
+ if (!_.isUndefined(relationshipType)) {
+ if (relationshipType && relationshipType.relationshipAttributes && relationshipType.relationshipAttributes.typeName) {
+ that.$("select[data-for-key=" + keyData + "]").val(relationshipType.relationshipAttributes.typeName).trigger("change");
+ }
+
+ }
}
// Array of string.