This is an automated email from the ASF dual-hosted git repository.

ppawar pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/atlas.git


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new 1e64023e4 ATLAS-4824: UI: Enable/Disable Propagation window usability 
needs improvement
1e64023e4 is described below

commit 1e64023e40d47c97a40c485640519a29eae58d07
Author: Brijesh Bhalala <brijeshbhalala2...@gmail.com>
AuthorDate: Wed Feb 28 16:07:46 2024 +0530

    ATLAS-4824: UI: Enable/Disable Propagation window usability needs 
improvement
    
    Signed-off-by: Prasad Pawar <prasad.pa...@cloudera.com>
---
 .../graph/PropagationPropertyModalView_tmpl.html   |   4 +-
 .../js/views/graph/PropagationPropertyModal.js     | 233 +++++++++++++--------
 .../graph/PropagationPropertyModalView_tmpl.html   |   4 +-
 .../js/views/graph/PropagationPropertyModal.js     | 233 +++++++++++++--------
 4 files changed, 294 insertions(+), 180 deletions(-)

diff --git 
a/dashboardv2/public/js/templates/graph/PropagationPropertyModalView_tmpl.html 
b/dashboardv2/public/js/templates/graph/PropagationPropertyModalView_tmpl.html
index 7dc4850ca..0e0faae5a 100644
--- 
a/dashboardv2/public/js/templates/graph/PropagationPropertyModalView_tmpl.html
+++ 
b/dashboardv2/public/js/templates/graph/PropagationPropertyModalView_tmpl.html
@@ -76,5 +76,7 @@
             </ul>
         </div>
     </div>
-    <div data-id="PropagatedClassificationTable" 
class="propagatedClassificationTable col-sm-12" style="display: none"></div>
+    <div data-id="PropagatedClassificationTable" 
class="propagatedClassificationTable col-sm-12" style="display: none">
+        <div id="r_PropagatedClassificationTable"></div>
+    </div>
 </div>
\ No newline at end of file
diff --git a/dashboardv2/public/js/views/graph/PropagationPropertyModal.js 
b/dashboardv2/public/js/views/graph/PropagationPropertyModal.js
index d9ef604b6..914bbcc71 100644
--- a/dashboardv2/public/js/views/graph/PropagationPropertyModal.js
+++ b/dashboardv2/public/js/views/graph/PropagationPropertyModal.js
@@ -23,14 +23,17 @@ define(['require',
     'modules/Modal',
     'utils/Utils',
     'utils/UrlLinks',
-    'utils/Messages'
-], function(require, PropagationPropertyModalViewTmpl, VRelationship, VEntity, 
Modal, Utils, UrlLinks, Messages) {
+    'utils/Messages',
+    'collection/VRelationshipList',
+], function (require, PropagationPropertyModalViewTmpl, VRelationship, 
VEntity, Modal, Utils, UrlLinks, Messages, VRelationshipList) {
     'use strict';
 
-    var PropogationPropertyModal = Backbone.Marionette.CompositeView.extend({
+    var PropogationPropertyModal = Backbone.Marionette.LayoutView.extend({
         template: PropagationPropertyModalViewTmpl,
-        templateHelpers: function() {},
-        regions: {},
+        templateHelpers: function () { },
+        regions: {
+            RPropagatedClassificationTable: "#r_PropagatedClassificationTable"
+        },
         ui: {
             propagationOptions: '[data-id="propagationOptions"]',
             edgeDetailName: '[data-id="edgeDetailName"]',
@@ -40,20 +43,20 @@ define(['require',
             PropagatedClassificationTable: 
"[data-id='PropagatedClassificationTable']"
 
         },
-        events: function() {
+        events: function () {
             var events = {},
                 that = this;
-            events["change " + this.ui.propagationOptions] = function() {
+            events["change " + this.ui.propagationOptions] = function () {
                 this.modalEdited = true;
                 this.modal.$el.find('button.ok').attr("disabled", false);
             };
-            events["click " + this.ui.editPropagationType] = function(e) {
+            events["click " + this.ui.editPropagationType] = function (e) {
                 if (this.modalEdited === true) {
                     e.preventDefault();
                     that.notifyModal();
                 }
             };
-            events["change " + this.ui.editPropagationType] = function(e) {
+            events["change " + this.ui.editPropagationType] = function (e) {
                 if (e.target.checked) {
                     this.showPropagatedClassificationTable();
                     this.viewType = "table";
@@ -62,13 +65,13 @@ define(['require',
                     this.viewType = "flow";
                 }
             };
-            events["click " + this.ui.entityClick] = function(e) {
+            events["click " + this.ui.entityClick] = function (e) {
                 var that = this,
                     url = "",
                     notifyObj = {
                         modal: true,
                         text: "Are you sure you want to navigate away from 
this page ?",
-                        ok: function(argument) {
+                        ok: function (argument) {
                             that.modal.trigger('cancel');
                             Utils.setUrl({
                                 url: url,
@@ -77,37 +80,31 @@ define(['require',
                             });
 
                         },
-                        cancel: function(argument) {}
+                        cancel: function (argument) { }
                     },
-                    $el = $(e.currentTarget),
-                    guid = $el.parents('tr').data('entityguid');
-                if ($el.hasClass('entityName')) {
-                    url = '#!/detailPage/' + guid + '?tabActive=lineage';
-                } else {
-                    url = '#!/tag/tagAttribute/' + $el.data('name');
-                }
+                    $entityName = $(e.currentTarget),
+                    url = $entityName.hasClass('entityName') ? 
'#!/detailPage/' + $entityName[0].dataset.entityguid + '?tabActive=lineage' : 
'#!/tag/tagAttribute/' + $entityName.data('name');
                 Utils.notifyConfirm(notifyObj);
             };
-            events["change " + this.ui.propagationState] = function(e) {
+            events["change " + this.ui.propagationState] = function (e) {
                 this.modalEdited = true;
                 this.modal.$el.find('button.ok').attr("disabled", false);
-                var $el = $(e.currentTarget).parents('tr'),
-                    entityguid = $el.data("entityguid"),
-                    classificationName = $el.find('[data-name]').data('name');
+                var $el = $(e.currentTarget),
+                    entityguid = $el[0].dataset.entityguid,
+                    classificationName = $el[0].dataset.typename,
+                    updateClassificationLists = function (fromClassifications, 
toClassifications) {
+                        return _.reject(fromClassifications, function (val, 
key) {
+                            if (val.entityGuid == entityguid && 
classificationName == val.typeName) {
+                                toClassifications.push(val);
+                                return true;
+                            }
+                        });
+                    };
+
                 if (e.target.checked) {
-                    this.propagatedClassifications = 
_.reject(this.propagatedClassifications, function(val, key) {
-                        if (val.entityGuid == entityguid && classificationName 
== val.typeName) {
-                            that.blockedPropagatedClassifications.push(val);
-                            return true;
-                        }
-                    });
+                    this.propagatedClassifications = 
updateClassificationLists(this.propagatedClassifications, 
this.blockedPropagatedClassifications)
                 } else {
-                    this.blockedPropagatedClassifications = 
_.reject(this.blockedPropagatedClassifications, function(val, key) {
-                        if (val.entityGuid == entityguid && classificationName 
== val.typeName) {
-                            that.propagatedClassifications.push(val);
-                            return true;
-                        }
-                    });
+                    this.blockedPropagatedClassifications = 
updateClassificationLists(this.blockedPropagatedClassifications, 
this.propagatedClassifications)
                 }
             };
             return events;
@@ -116,15 +113,16 @@ define(['require',
          * intialize a new PropogationPropertyModal Layout
          * @constructs
          */
-        initialize: function(options) {
+        initialize: function (options) {
             _.extend(this, _.pick(options, 'edgeInfo', 'relationshipId', 
'lineageData', 'apiGuid', 'detailPageFetchCollection'));
             this.entityModel = new VRelationship();
             this.VEntityModel = new VEntity();
+            this.relationShipCollection = new VRelationshipList();
             this.modalEdited = false;
             this.viewType = 'flow';
             var that = this,
                 modalObj = {
-                    title: 'Enable/Disable Propagation',
+                    title: 'Classification Propagation Control',
                     content: this,
                     okText: 'Update',
                     okCloses: false,
@@ -132,21 +130,96 @@ define(['require',
                     mainClass: 'modal-lg',
                     allowCancel: true,
                 };
-
+            this.commonTableOptions = {
+                collection: this.relationShipCollection,
+                includeFilter: false,
+                includePagination: false,
+                includeFooterRecords: false,
+                includePageSize: false,
+                includeGotoPage: false,
+                includeAtlasTableSorting: false,
+                gridOpts: {
+                    className: "table table-hover backgrid table-quickMenu",
+                    emptyText: 'No records found!'
+                },
+                filterOpts: {},
+                paginatorOpts: {}
+            };
             this.modal = new Modal(modalObj)
             this.modal.open();
             this.modal.$el.find('button.ok').attr("disabled", true);
-            this.on('ok', function() {
+            this.on('ok', function () {
                 that.updateRelation();
             });
-            this.on('closeModal', function() {
+            this.on('closeModal', function () {
                 this.modal.trigger('cancel');
             });
             this.updateEdgeView(this.edgeInfo);
         },
 
-        onRender: function() {},
-        updateEdgeView: function(options) {
+        onRender: function () { },
+        renderTableLayoutView: function () {
+            var that = this;
+
+            require(['utils/TableLayout'], function (TableLayout) {
+                var cols = new Backgrid.Columns(that.getSchemaTableColumns());
+                that.RPropagatedClassificationTable.show(new 
TableLayout(_.extend({}, that.commonTableOptions, {
+                    columns: cols
+                })));
+            });
+
+        },
+        getSchemaTableColumns: function (options) {
+            var that = this;
+
+            return this.relationShipCollection.constructor.getTableCols({
+                typeName: {
+                    label: "Classification",
+                    cell: "html",
+                    editable: false,
+                    sortable: false,
+                    formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+                        fromRaw: function (rawValue, model) {
+                            return "<a class='classificationName' 
data-id='entityClick' title='" + rawValue + "' data-name='" + rawValue + "''>" 
+ rawValue + "</a>"
+
+                        }
+                    })
+                },
+                entityGuid: {
+                    label: "Entity Name",
+                    cell: "html",
+                    editable: false,
+                    sortable: false,
+                    formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+                        fromRaw: function (rawValue, model) {
+                            var guid = rawValue,
+                                entityObj = 
that.apiGuid[that.relationshipId].referredEntities[guid],
+                                name = guid;
+                            if (entityObj) {
+                                name = Utils.getName(entityObj) + " (" + 
entityObj.typeName + ")";
+                            }
+                            return "<a class='entityName' 
data-id='entityClick' data-entityguid =" + guid + ">" + name + "</a>";
+                        }
+                    })
+                },
+                fromBlockClassification: {
+                    label: "Block Propagation",
+                    cell: "html",
+                    fixWidth: "150",
+                    editable: false,
+                    sortable: false,
+                    formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+                        fromRaw: function (rawValue, model) {
+
+                            return "<div class='text-center'><input 
type='checkbox' " + (rawValue ? "checked" : "") + " data-entityguid ='" + 
model.attributes.entityGuid + "' + data-typeName ='" + 
model.attributes.typeName + "' data-id='propagationState' class='input'></div>"
+                        }
+                    })
+                },
+
+            },
+                this.relationShipCollection);
+        },
+        updateEdgeView: function (options) {
             var obj = options,
                 fromEntity = this.lineageData.guidEntityMap[obj.fromEntityId],
                 toEntity = this.lineageData.guidEntityMap[obj.toEntityId];
@@ -158,7 +231,7 @@ define(['require',
                 this.getEdgeEntity({ id: obj.relationshipId, from: fromEntity, 
to: toEntity });
             }
         },
-        getPropagationFlow: function(options) {
+        getPropagationFlow: function (options) {
             var relationshipData = options.relationshipData,
                 graphData = options.graphData,
                 propagateTags = relationshipData.propagateTags;
@@ -172,12 +245,12 @@ define(['require',
                 return propagateTags;
             }
         },
-        getEdgeEntity: function(options) {
+        getEdgeEntity: function (options) {
             var that = this,
                 id = options.id,
                 from = options.from,
                 to = options.to,
-                enableOtherFlow = function(relationshipObj) {
+                enableOtherFlow = function (relationshipObj) {
                     var isTwoToOne = false;
                     if (relationshipObj.propagateTags == "BOTH") {
                         that.ui.propagationOptions.find('.both').show();
@@ -195,7 +268,7 @@ define(['require',
                         }
                     }
                 },
-                updateValue = function(relationshipData) {
+                updateValue = function (relationshipData) {
                     var relationshipObj = relationshipData.relationship;
                     if (relationshipObj) {
                         that.$("input[name='propagateRelation'][value=" + 
that.getPropagationFlow({
@@ -221,17 +294,17 @@ define(['require',
                     this.edgeCall.abort();
                 }
                 this.edgeCall = this.entityModel.getRelationship(id, {
-                    success: function(relationshipData) {
+                    success: function (relationshipData) {
                         that.apiGuid[relationshipData.relationship.guid] = 
relationshipData;
                         updateValue(relationshipData);
                     },
-                    cust_error: function() {
+                    cust_error: function () {
                         that.hideLoader();
                     }
                 });
             }
         },
-        updateRelation: function() {
+        updateRelation: function () {
             var that = this,
                 entityId = that.ui.propagationOptions.attr('entity-id'),
                 PropagationValue = 
this.$("input[name='propagateRelation']:checked").val(),
@@ -253,7 +326,7 @@ define(['require',
             this.showLoader();
             this.entityModel.saveRelationship({
                 data: JSON.stringify(_.extend({}, 
that.apiGuid[entityId].relationship, relationshipProp)),
-                success: function(relationshipData) {
+                success: function (relationshipData) {
                     if (relationshipData) {
                         that.hideLoader({ buttonDisabled: true });
                         that.modal.trigger('cancel');
@@ -264,79 +337,61 @@ define(['require',
                         });
                     }
                 },
-                cust_error: function() {
+                cust_error: function () {
                     that.hideLoader();
                 }
             });
         },
-        showBlockedClassificationTable: function(options) {
-            var that = this,
-                propagationStringValue = "",
-                classificationTableValue = "",
+        showBlockedClassificationTable: function (options) {
+            var propagationData = [],
                 relationship = options.relationship,
-                referredEntities = options.referredEntities,
-                getEntityName = function(guid) {
-                    var entityObj = referredEntities[guid],
-                        name = guid;
-                    if (entityObj) {
-                        name = Utils.getName(entityObj) + " (" + 
entityObj.typeName + ")";
-                    }
-                    return "<a class='entityName' data-id='entityClick'>" + 
name + "</a>";
-                },
-                getTableRow = function(options) {
-                    var val = options.val,
-                        fromBlockClassification = 
options.fromBlockClassification;
-                    return "<tr data-entityguid=" + val.entityGuid + "><td 
class='text-center w30'><a class='classificationName' data-id='entityClick' 
title='" + val.typeName + "' data-name='" + val.typeName + "''>" + val.typeName 
+ "</a></td><td class='text-center'>" + getEntityName(val.entityGuid) + 
"</td><td class='text-center w30'><input type='checkbox' " + 
(fromBlockClassification ? "checked" : "") + " data-id='propagationState' 
class='input'></td></tr>";
-                };
-
-            this.blockedPropagatedClassifications = 
_.isUndefined(relationship.blockedPropagatedClassifications) ? [] : 
_.clone(relationship.blockedPropagatedClassifications);
-            this.propagatedClassifications = 
_.isUndefined(relationship.propagatedClassifications) ? [] : 
_.clone(relationship.propagatedClassifications);
-            _.each(this.blockedPropagatedClassifications, function(val, key) {
-                propagationStringValue += getTableRow({ "val": val, 
fromBlockClassification: true });
-            });
-            _.each(this.propagatedClassifications, function(val, key) {
-                propagationStringValue += getTableRow({ "val": val, 
fromBlockClassification: false });
-            });
+                updateClassification = function (classificationList, 
isChecked) {
+                    _.each(classificationList, function (val, key) {
+                        propagationData.push(_.extend(val, { 
fromBlockClassification: isChecked }));
+                    });
 
-            classificationTableValue = "<table class='attriTable'><tr><th 
class='w30'>Classification</th><th>Entity Name</th><th class='w30'>Block 
Propagatation</th>" + propagationStringValue + "</table>";
+                };
+            this.blockedPropagatedClassifications = 
_.clone(relationship.blockedPropagatedClassifications) || [];
+            this.propagatedClassifications = 
_.clone(relationship.propagatedClassifications) || [];
+            updateClassification(this.blockedPropagatedClassifications, true);
+            updateClassification(this.propagatedClassifications, false);
+            this.relationShipCollection.fullCollection.reset(propagationData);
+            this.renderTableLayoutView();
 
-            
this.ui.PropagatedClassificationTable.append(_.isEmpty(propagationStringValue) 
? "No Records Found." : classificationTableValue);
         },
-        showLoader: function() {
+        showLoader: function () {
             this.modal.$el.find('button.ok').showButtonLoader();
             this.$('.overlay').removeClass('hide').addClass('show');
         },
-        hideLoader: function(options) {
+        hideLoader: function (options) {
             var buttonDisabled = options && options.buttonDisabled;
             this.modal.$el.find('button.ok').hideButtonLoader();
             this.modal.$el.find('button.ok').attr("disabled", buttonDisabled ? 
buttonDisabled : false);
             this.$('.overlay').removeClass('show').addClass('hide');
         },
-        notifyModal: function(options) {
+        notifyModal: function (options) {
             var that = this,
                 notifyObj = {
                     modal: true,
                     text: "It looks like you have edited something. If you 
leave before saving, your changes will be lost.",
-                    ok: function(argument) {
+                    ok: function (argument) {
                         that.viewType = 
that.ui.editPropagationType.is(":checked") ? "flow" : "table";
                         that.ui.editPropagationType.prop("checked", 
that.viewType === "flow" ? false : true).trigger("change");
                         that.modal.$el.find('button.ok').attr("disabled", 
true);
                     },
-                    cancel: function(argument) {
+                    cancel: function (argument) {
                         that.viewType = 
that.ui.editPropagationType.is(":checked") ? "table" : "flow";
                     }
                 };
             Utils.notifyConfirm(notifyObj);
         },
-        showEditPropagation: function() {
+        showEditPropagation: function () {
             this.$('.editPropagation').show();
             this.$('.propagatedClassificationTable').hide();
-            this.modal.$el.find('.modal-title').text("Enable/Disable 
Propagation");
         },
-        showPropagatedClassificationTable: function() {
+        showPropagatedClassificationTable: function () {
             this.$('.editPropagation').hide();
             this.$('.propagatedClassificationTable').show();
-            this.modal.$el.find('.modal-title').text("Select Classifications 
to Block Propagation");
         }
 
     });
diff --git 
a/dashboardv3/public/js/templates/graph/PropagationPropertyModalView_tmpl.html 
b/dashboardv3/public/js/templates/graph/PropagationPropertyModalView_tmpl.html
index 7dc4850ca..0e0faae5a 100644
--- 
a/dashboardv3/public/js/templates/graph/PropagationPropertyModalView_tmpl.html
+++ 
b/dashboardv3/public/js/templates/graph/PropagationPropertyModalView_tmpl.html
@@ -76,5 +76,7 @@
             </ul>
         </div>
     </div>
-    <div data-id="PropagatedClassificationTable" 
class="propagatedClassificationTable col-sm-12" style="display: none"></div>
+    <div data-id="PropagatedClassificationTable" 
class="propagatedClassificationTable col-sm-12" style="display: none">
+        <div id="r_PropagatedClassificationTable"></div>
+    </div>
 </div>
\ No newline at end of file
diff --git a/dashboardv3/public/js/views/graph/PropagationPropertyModal.js 
b/dashboardv3/public/js/views/graph/PropagationPropertyModal.js
index d9ef604b6..914bbcc71 100644
--- a/dashboardv3/public/js/views/graph/PropagationPropertyModal.js
+++ b/dashboardv3/public/js/views/graph/PropagationPropertyModal.js
@@ -23,14 +23,17 @@ define(['require',
     'modules/Modal',
     'utils/Utils',
     'utils/UrlLinks',
-    'utils/Messages'
-], function(require, PropagationPropertyModalViewTmpl, VRelationship, VEntity, 
Modal, Utils, UrlLinks, Messages) {
+    'utils/Messages',
+    'collection/VRelationshipList',
+], function (require, PropagationPropertyModalViewTmpl, VRelationship, 
VEntity, Modal, Utils, UrlLinks, Messages, VRelationshipList) {
     'use strict';
 
-    var PropogationPropertyModal = Backbone.Marionette.CompositeView.extend({
+    var PropogationPropertyModal = Backbone.Marionette.LayoutView.extend({
         template: PropagationPropertyModalViewTmpl,
-        templateHelpers: function() {},
-        regions: {},
+        templateHelpers: function () { },
+        regions: {
+            RPropagatedClassificationTable: "#r_PropagatedClassificationTable"
+        },
         ui: {
             propagationOptions: '[data-id="propagationOptions"]',
             edgeDetailName: '[data-id="edgeDetailName"]',
@@ -40,20 +43,20 @@ define(['require',
             PropagatedClassificationTable: 
"[data-id='PropagatedClassificationTable']"
 
         },
-        events: function() {
+        events: function () {
             var events = {},
                 that = this;
-            events["change " + this.ui.propagationOptions] = function() {
+            events["change " + this.ui.propagationOptions] = function () {
                 this.modalEdited = true;
                 this.modal.$el.find('button.ok').attr("disabled", false);
             };
-            events["click " + this.ui.editPropagationType] = function(e) {
+            events["click " + this.ui.editPropagationType] = function (e) {
                 if (this.modalEdited === true) {
                     e.preventDefault();
                     that.notifyModal();
                 }
             };
-            events["change " + this.ui.editPropagationType] = function(e) {
+            events["change " + this.ui.editPropagationType] = function (e) {
                 if (e.target.checked) {
                     this.showPropagatedClassificationTable();
                     this.viewType = "table";
@@ -62,13 +65,13 @@ define(['require',
                     this.viewType = "flow";
                 }
             };
-            events["click " + this.ui.entityClick] = function(e) {
+            events["click " + this.ui.entityClick] = function (e) {
                 var that = this,
                     url = "",
                     notifyObj = {
                         modal: true,
                         text: "Are you sure you want to navigate away from 
this page ?",
-                        ok: function(argument) {
+                        ok: function (argument) {
                             that.modal.trigger('cancel');
                             Utils.setUrl({
                                 url: url,
@@ -77,37 +80,31 @@ define(['require',
                             });
 
                         },
-                        cancel: function(argument) {}
+                        cancel: function (argument) { }
                     },
-                    $el = $(e.currentTarget),
-                    guid = $el.parents('tr').data('entityguid');
-                if ($el.hasClass('entityName')) {
-                    url = '#!/detailPage/' + guid + '?tabActive=lineage';
-                } else {
-                    url = '#!/tag/tagAttribute/' + $el.data('name');
-                }
+                    $entityName = $(e.currentTarget),
+                    url = $entityName.hasClass('entityName') ? 
'#!/detailPage/' + $entityName[0].dataset.entityguid + '?tabActive=lineage' : 
'#!/tag/tagAttribute/' + $entityName.data('name');
                 Utils.notifyConfirm(notifyObj);
             };
-            events["change " + this.ui.propagationState] = function(e) {
+            events["change " + this.ui.propagationState] = function (e) {
                 this.modalEdited = true;
                 this.modal.$el.find('button.ok').attr("disabled", false);
-                var $el = $(e.currentTarget).parents('tr'),
-                    entityguid = $el.data("entityguid"),
-                    classificationName = $el.find('[data-name]').data('name');
+                var $el = $(e.currentTarget),
+                    entityguid = $el[0].dataset.entityguid,
+                    classificationName = $el[0].dataset.typename,
+                    updateClassificationLists = function (fromClassifications, 
toClassifications) {
+                        return _.reject(fromClassifications, function (val, 
key) {
+                            if (val.entityGuid == entityguid && 
classificationName == val.typeName) {
+                                toClassifications.push(val);
+                                return true;
+                            }
+                        });
+                    };
+
                 if (e.target.checked) {
-                    this.propagatedClassifications = 
_.reject(this.propagatedClassifications, function(val, key) {
-                        if (val.entityGuid == entityguid && classificationName 
== val.typeName) {
-                            that.blockedPropagatedClassifications.push(val);
-                            return true;
-                        }
-                    });
+                    this.propagatedClassifications = 
updateClassificationLists(this.propagatedClassifications, 
this.blockedPropagatedClassifications)
                 } else {
-                    this.blockedPropagatedClassifications = 
_.reject(this.blockedPropagatedClassifications, function(val, key) {
-                        if (val.entityGuid == entityguid && classificationName 
== val.typeName) {
-                            that.propagatedClassifications.push(val);
-                            return true;
-                        }
-                    });
+                    this.blockedPropagatedClassifications = 
updateClassificationLists(this.blockedPropagatedClassifications, 
this.propagatedClassifications)
                 }
             };
             return events;
@@ -116,15 +113,16 @@ define(['require',
          * intialize a new PropogationPropertyModal Layout
          * @constructs
          */
-        initialize: function(options) {
+        initialize: function (options) {
             _.extend(this, _.pick(options, 'edgeInfo', 'relationshipId', 
'lineageData', 'apiGuid', 'detailPageFetchCollection'));
             this.entityModel = new VRelationship();
             this.VEntityModel = new VEntity();
+            this.relationShipCollection = new VRelationshipList();
             this.modalEdited = false;
             this.viewType = 'flow';
             var that = this,
                 modalObj = {
-                    title: 'Enable/Disable Propagation',
+                    title: 'Classification Propagation Control',
                     content: this,
                     okText: 'Update',
                     okCloses: false,
@@ -132,21 +130,96 @@ define(['require',
                     mainClass: 'modal-lg',
                     allowCancel: true,
                 };
-
+            this.commonTableOptions = {
+                collection: this.relationShipCollection,
+                includeFilter: false,
+                includePagination: false,
+                includeFooterRecords: false,
+                includePageSize: false,
+                includeGotoPage: false,
+                includeAtlasTableSorting: false,
+                gridOpts: {
+                    className: "table table-hover backgrid table-quickMenu",
+                    emptyText: 'No records found!'
+                },
+                filterOpts: {},
+                paginatorOpts: {}
+            };
             this.modal = new Modal(modalObj)
             this.modal.open();
             this.modal.$el.find('button.ok').attr("disabled", true);
-            this.on('ok', function() {
+            this.on('ok', function () {
                 that.updateRelation();
             });
-            this.on('closeModal', function() {
+            this.on('closeModal', function () {
                 this.modal.trigger('cancel');
             });
             this.updateEdgeView(this.edgeInfo);
         },
 
-        onRender: function() {},
-        updateEdgeView: function(options) {
+        onRender: function () { },
+        renderTableLayoutView: function () {
+            var that = this;
+
+            require(['utils/TableLayout'], function (TableLayout) {
+                var cols = new Backgrid.Columns(that.getSchemaTableColumns());
+                that.RPropagatedClassificationTable.show(new 
TableLayout(_.extend({}, that.commonTableOptions, {
+                    columns: cols
+                })));
+            });
+
+        },
+        getSchemaTableColumns: function (options) {
+            var that = this;
+
+            return this.relationShipCollection.constructor.getTableCols({
+                typeName: {
+                    label: "Classification",
+                    cell: "html",
+                    editable: false,
+                    sortable: false,
+                    formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+                        fromRaw: function (rawValue, model) {
+                            return "<a class='classificationName' 
data-id='entityClick' title='" + rawValue + "' data-name='" + rawValue + "''>" 
+ rawValue + "</a>"
+
+                        }
+                    })
+                },
+                entityGuid: {
+                    label: "Entity Name",
+                    cell: "html",
+                    editable: false,
+                    sortable: false,
+                    formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+                        fromRaw: function (rawValue, model) {
+                            var guid = rawValue,
+                                entityObj = 
that.apiGuid[that.relationshipId].referredEntities[guid],
+                                name = guid;
+                            if (entityObj) {
+                                name = Utils.getName(entityObj) + " (" + 
entityObj.typeName + ")";
+                            }
+                            return "<a class='entityName' 
data-id='entityClick' data-entityguid =" + guid + ">" + name + "</a>";
+                        }
+                    })
+                },
+                fromBlockClassification: {
+                    label: "Block Propagation",
+                    cell: "html",
+                    fixWidth: "150",
+                    editable: false,
+                    sortable: false,
+                    formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+                        fromRaw: function (rawValue, model) {
+
+                            return "<div class='text-center'><input 
type='checkbox' " + (rawValue ? "checked" : "") + " data-entityguid ='" + 
model.attributes.entityGuid + "' + data-typeName ='" + 
model.attributes.typeName + "' data-id='propagationState' class='input'></div>"
+                        }
+                    })
+                },
+
+            },
+                this.relationShipCollection);
+        },
+        updateEdgeView: function (options) {
             var obj = options,
                 fromEntity = this.lineageData.guidEntityMap[obj.fromEntityId],
                 toEntity = this.lineageData.guidEntityMap[obj.toEntityId];
@@ -158,7 +231,7 @@ define(['require',
                 this.getEdgeEntity({ id: obj.relationshipId, from: fromEntity, 
to: toEntity });
             }
         },
-        getPropagationFlow: function(options) {
+        getPropagationFlow: function (options) {
             var relationshipData = options.relationshipData,
                 graphData = options.graphData,
                 propagateTags = relationshipData.propagateTags;
@@ -172,12 +245,12 @@ define(['require',
                 return propagateTags;
             }
         },
-        getEdgeEntity: function(options) {
+        getEdgeEntity: function (options) {
             var that = this,
                 id = options.id,
                 from = options.from,
                 to = options.to,
-                enableOtherFlow = function(relationshipObj) {
+                enableOtherFlow = function (relationshipObj) {
                     var isTwoToOne = false;
                     if (relationshipObj.propagateTags == "BOTH") {
                         that.ui.propagationOptions.find('.both').show();
@@ -195,7 +268,7 @@ define(['require',
                         }
                     }
                 },
-                updateValue = function(relationshipData) {
+                updateValue = function (relationshipData) {
                     var relationshipObj = relationshipData.relationship;
                     if (relationshipObj) {
                         that.$("input[name='propagateRelation'][value=" + 
that.getPropagationFlow({
@@ -221,17 +294,17 @@ define(['require',
                     this.edgeCall.abort();
                 }
                 this.edgeCall = this.entityModel.getRelationship(id, {
-                    success: function(relationshipData) {
+                    success: function (relationshipData) {
                         that.apiGuid[relationshipData.relationship.guid] = 
relationshipData;
                         updateValue(relationshipData);
                     },
-                    cust_error: function() {
+                    cust_error: function () {
                         that.hideLoader();
                     }
                 });
             }
         },
-        updateRelation: function() {
+        updateRelation: function () {
             var that = this,
                 entityId = that.ui.propagationOptions.attr('entity-id'),
                 PropagationValue = 
this.$("input[name='propagateRelation']:checked").val(),
@@ -253,7 +326,7 @@ define(['require',
             this.showLoader();
             this.entityModel.saveRelationship({
                 data: JSON.stringify(_.extend({}, 
that.apiGuid[entityId].relationship, relationshipProp)),
-                success: function(relationshipData) {
+                success: function (relationshipData) {
                     if (relationshipData) {
                         that.hideLoader({ buttonDisabled: true });
                         that.modal.trigger('cancel');
@@ -264,79 +337,61 @@ define(['require',
                         });
                     }
                 },
-                cust_error: function() {
+                cust_error: function () {
                     that.hideLoader();
                 }
             });
         },
-        showBlockedClassificationTable: function(options) {
-            var that = this,
-                propagationStringValue = "",
-                classificationTableValue = "",
+        showBlockedClassificationTable: function (options) {
+            var propagationData = [],
                 relationship = options.relationship,
-                referredEntities = options.referredEntities,
-                getEntityName = function(guid) {
-                    var entityObj = referredEntities[guid],
-                        name = guid;
-                    if (entityObj) {
-                        name = Utils.getName(entityObj) + " (" + 
entityObj.typeName + ")";
-                    }
-                    return "<a class='entityName' data-id='entityClick'>" + 
name + "</a>";
-                },
-                getTableRow = function(options) {
-                    var val = options.val,
-                        fromBlockClassification = 
options.fromBlockClassification;
-                    return "<tr data-entityguid=" + val.entityGuid + "><td 
class='text-center w30'><a class='classificationName' data-id='entityClick' 
title='" + val.typeName + "' data-name='" + val.typeName + "''>" + val.typeName 
+ "</a></td><td class='text-center'>" + getEntityName(val.entityGuid) + 
"</td><td class='text-center w30'><input type='checkbox' " + 
(fromBlockClassification ? "checked" : "") + " data-id='propagationState' 
class='input'></td></tr>";
-                };
-
-            this.blockedPropagatedClassifications = 
_.isUndefined(relationship.blockedPropagatedClassifications) ? [] : 
_.clone(relationship.blockedPropagatedClassifications);
-            this.propagatedClassifications = 
_.isUndefined(relationship.propagatedClassifications) ? [] : 
_.clone(relationship.propagatedClassifications);
-            _.each(this.blockedPropagatedClassifications, function(val, key) {
-                propagationStringValue += getTableRow({ "val": val, 
fromBlockClassification: true });
-            });
-            _.each(this.propagatedClassifications, function(val, key) {
-                propagationStringValue += getTableRow({ "val": val, 
fromBlockClassification: false });
-            });
+                updateClassification = function (classificationList, 
isChecked) {
+                    _.each(classificationList, function (val, key) {
+                        propagationData.push(_.extend(val, { 
fromBlockClassification: isChecked }));
+                    });
 
-            classificationTableValue = "<table class='attriTable'><tr><th 
class='w30'>Classification</th><th>Entity Name</th><th class='w30'>Block 
Propagatation</th>" + propagationStringValue + "</table>";
+                };
+            this.blockedPropagatedClassifications = 
_.clone(relationship.blockedPropagatedClassifications) || [];
+            this.propagatedClassifications = 
_.clone(relationship.propagatedClassifications) || [];
+            updateClassification(this.blockedPropagatedClassifications, true);
+            updateClassification(this.propagatedClassifications, false);
+            this.relationShipCollection.fullCollection.reset(propagationData);
+            this.renderTableLayoutView();
 
-            
this.ui.PropagatedClassificationTable.append(_.isEmpty(propagationStringValue) 
? "No Records Found." : classificationTableValue);
         },
-        showLoader: function() {
+        showLoader: function () {
             this.modal.$el.find('button.ok').showButtonLoader();
             this.$('.overlay').removeClass('hide').addClass('show');
         },
-        hideLoader: function(options) {
+        hideLoader: function (options) {
             var buttonDisabled = options && options.buttonDisabled;
             this.modal.$el.find('button.ok').hideButtonLoader();
             this.modal.$el.find('button.ok').attr("disabled", buttonDisabled ? 
buttonDisabled : false);
             this.$('.overlay').removeClass('show').addClass('hide');
         },
-        notifyModal: function(options) {
+        notifyModal: function (options) {
             var that = this,
                 notifyObj = {
                     modal: true,
                     text: "It looks like you have edited something. If you 
leave before saving, your changes will be lost.",
-                    ok: function(argument) {
+                    ok: function (argument) {
                         that.viewType = 
that.ui.editPropagationType.is(":checked") ? "flow" : "table";
                         that.ui.editPropagationType.prop("checked", 
that.viewType === "flow" ? false : true).trigger("change");
                         that.modal.$el.find('button.ok').attr("disabled", 
true);
                     },
-                    cancel: function(argument) {
+                    cancel: function (argument) {
                         that.viewType = 
that.ui.editPropagationType.is(":checked") ? "table" : "flow";
                     }
                 };
             Utils.notifyConfirm(notifyObj);
         },
-        showEditPropagation: function() {
+        showEditPropagation: function () {
             this.$('.editPropagation').show();
             this.$('.propagatedClassificationTable').hide();
-            this.modal.$el.find('.modal-title').text("Enable/Disable 
Propagation");
         },
-        showPropagatedClassificationTable: function() {
+        showPropagatedClassificationTable: function () {
             this.$('.editPropagation').hide();
             this.$('.propagatedClassificationTable').show();
-            this.modal.$el.find('.modal-title').text("Select Classifications 
to Block Propagation");
         }
 
     });


Reply via email to