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

nixon pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/atlas.git

commit c551f66556e01d69f2918831b8b93b0397b04d75
Author: prasad pawar <prasad.pa...@freestoneinfotech.com>
AuthorDate: Tue Feb 23 13:56:13 2021 +0530

    ATLAS-3376: UI V2 Fixed When no Catalogs are present, user should be 
presented with an appropriate message when trying to associate Category to Term.
---
 .../js/views/detail_page/DetailPageLayoutView.js   | 57 +++++++++-----
 .../js/views/glossary/GlossaryDetailLayoutView.js  | 89 +++++++++++-----------
 .../js/views/search/SearchResultLayoutView.js      | 56 +++++++++-----
 .../js/views/detail_page/DetailPageLayoutView.js   | 61 ++++++++++-----
 .../js/views/glossary/GlossaryDetailLayoutView.js  | 89 +++++++++++-----------
 .../js/views/search/SearchResultLayoutView.js      | 67 +++++++++++-----
 6 files changed, 258 insertions(+), 161 deletions(-)

diff --git a/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js 
b/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
index b878f6d..e83212f 100644
--- a/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
+++ b/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
@@ -558,29 +558,46 @@ define(['require',
                     });
                 });
             },
-            onClickAddTermBtn: function(e) {
+            assignTermModalView: function(glossaryCollection, obj) {
                 var that = this,
-                    entityGuid = that.id,
-                    entityObj = this.collection.first().get('entity'),
-                    associatedTerms = [];
-                if (entityObj && entityObj.relationshipAttributes && 
entityObj.relationshipAttributes.meanings) {
-                    associatedTerms = 
entityObj.relationshipAttributes.meanings;
-                }
-                require(['views/glossary/AssignTermLayoutView'], 
function(AssignTermLayoutView) {
-                    var view = new AssignTermLayoutView({
-                        guid: that.id,
-                        callback: function() {
-                            that.fetchCollection();
-                        },
-                        associatedTerms: associatedTerms,
-                        showLoader: that.showLoader.bind(that),
-                        hideLoader: that.hideLoader.bind(that),
-                        glossaryCollection: that.glossaryCollection
+                    terms = 0;
+                _.each(glossaryCollection.fullCollection.models, 
function(model) {
+                    if (model.get('terms')) {
+                        terms += model.get('terms').length;
+                    };
+                });
+                if (terms) {
+                    require(['views/glossary/AssignTermLayoutView'], 
function(AssignTermLayoutView) {
+                        var view = new AssignTermLayoutView({
+                            guid: obj.guid,
+                            callback: function() {
+                                that.fetchCollection();
+                            },
+                            associatedTerms: obj.associatedTerms,
+                            showLoader: that.showLoader.bind(that),
+                            hideLoader: that.hideLoader.bind(that),
+                            glossaryCollection: glossaryCollection
+                        });
+                        view.modal.on('ok', function() {
+                            Utils.showTitleLoader(that.$('.page-title 
.fontLoader'), that.$('.entityDetail'));
+                        });
                     });
-                    view.modal.on('ok', function() {
-                        Utils.showTitleLoader(that.$('.page-title 
.fontLoader'), that.$('.entityDetail'));
+                } else {
+                    Utils.notifyInfo({
+                        content: "There are no available terms that can be 
associated with this entity"
                     });
-                });
+                }
+            },
+            onClickAddTermBtn: function(e) {
+                var entityObj = this.collection.first().get('entity'),
+                    obj = {
+                        guid: this.id,
+                        associatedTerms: [],
+                    };
+                this.assignTermModalView(this.glossaryCollection, obj);
+                if (entityObj && entityObj.relationshipAttributes && 
entityObj.relationshipAttributes.meanings) {
+                    obj.associatedTerms = 
entityObj.relationshipAttributes.meanings;
+                }
             },
             renderEntityDetailTableLayoutView: function(obj) {
                 var that = this;
diff --git a/dashboardv2/public/js/views/glossary/GlossaryDetailLayoutView.js 
b/dashboardv2/public/js/views/glossary/GlossaryDetailLayoutView.js
index d9f1fb9..bb8fe8f 100644
--- a/dashboardv2/public/js/views/glossary/GlossaryDetailLayoutView.js
+++ b/dashboardv2/public/js/views/glossary/GlossaryDetailLayoutView.js
@@ -165,7 +165,7 @@ define(['require',
                     }
                 };
                 events["click " + this.ui.addTerm] = 'onClickAddTermBtn';
-                events["click " + this.ui.addCategory] = 
'onClickAddCategoryBtn';
+                events["click " + this.ui.addCategory] = 'onClickAddTermBtn';
                 events["click " + this.ui.addTag] = 'onClickAddTagBtn';
                 return events;
             },
@@ -336,60 +336,63 @@ define(['require',
                 this.ui.tagList.find("span.btn").remove();
                 this.ui.tagList.prepend(tagData);
             },
+            getCategoryTermCount: function(collection, matchString) {
+                var terms = 0;
+                _.each(collection, function(model) {
+                    if (model.get(matchString)) {
+                        terms += model.get(matchString).length;
+                    }
+                });
+                return terms;
+            },
             onClickAddTermBtn: function(e) {
-                var that = this;
-                require(['views/glossary/AssignTermLayoutView'], 
function(AssignTermLayoutView) {
-                    var glossary = that.glossaryCollection;
-                    if (that.value && that.value.gId) {
-                        var foundModel = that.glossaryCollection.find({ guid: 
that.value.gId });
-                        if (foundModel) {
-                            glossary = new 
VGlossaryList([foundModel.toJSON()], {
-                                comparator: function(item) {
-                                    return item.get("name");
-                                }
-                            });
-                        }
+                var glossary = this.glossaryCollection;
+                if (this.value && this.value.gId) {
+                    var foundModel = this.glossaryCollection.find({ guid: 
this.value.gId });
+                    if (foundModel) {
+                        glossary = new VGlossaryList([foundModel.toJSON()], {
+                            comparator: function(item) {
+                                return item.get("name");
+                            }
+                        });
                     }
-
-                    var view = new AssignTermLayoutView({
-                        categoryData: that.data,
-                        associatedTerms: that.data && that.data.terms && 
that.data.terms.length > 0 ? that.data.terms : [],
-                        isCategoryView: that.isCategoryView,
+                }
+                var obj = {
                         callback: function() {
-                            that.getData();
+                            this.getData();
                         },
-                        glossaryCollection: glossary
+                        glossaryCollection: glossary,
+                    },
+                    emptyListMessage = this.isCategoryView ? "There are no 
available terms that can be associated with this category" : "There are no 
available categories that can be associated with this term";
+
+                if (this.isCategoryView) {
+                    obj = _.extend(obj, {
+                        categoryData: this.data,
+                        associatedTerms: (this.data && this.data.terms && 
this.data.terms.length > 0) ? this.data.terms : [],
+                        isCategoryView: this.isCategoryView,
                     });
-                    view.modal.on('ok', function() {
-                        that.hideLoader();
+                } else {
+                    obj = _.extend(obj, {
+                        termData: this.data,
+                        isTermView: this.isTermView,
                     });
-                });
+                }
+                if (this.getCategoryTermCount(glossary.fullCollection.models, 
this.isCategoryView ? "terms" : "categories")) {
+                    this.AssignTermLayoutViewModal(obj);
+                } else {
+                    Utils.notifyInfo({
+                        content: emptyListMessage
+                    });
+                }
             },
-            onClickAddCategoryBtn: function(e) {
+            AssignTermLayoutViewModal: function(termCategoryObj) {
                 var that = this;
                 require(['views/glossary/AssignTermLayoutView'], 
function(AssignTermLayoutView) {
-                    var glossary = that.glossaryCollection;
-                    if (that.value && that.value.gId) {
-                        var foundModel = that.glossaryCollection.find({ guid: 
that.value.gId });
-                        if (foundModel) {
-                            glossary = new 
VGlossaryList([foundModel.toJSON()], {
-                                comparator: function(item) {
-                                    return item.get("name");
-                                }
-                            });
-                        }
-                    }
-                    var view = new AssignTermLayoutView({
-                        termData: that.data,
-                        isTermView: that.isTermView,
-                        callback: function() {
-                            that.getData();
-                        },
-                        glossaryCollection: glossary
-                    });
+                    var view = new AssignTermLayoutView(termCategoryObj);
                     view.modal.on('ok', function() {
                         that.hideLoader();
                     });
+
                 });
             },
             onClickAddTagBtn: function(e) {
diff --git a/dashboardv2/public/js/views/search/SearchResultLayoutView.js 
b/dashboardv2/public/js/views/search/SearchResultLayoutView.js
index 9db1b54..98c9ec0 100644
--- a/dashboardv2/public/js/views/search/SearchResultLayoutView.js
+++ b/dashboardv2/public/js/views/search/SearchResultLayoutView.js
@@ -15,7 +15,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 define(['require',
     'backbone',
     'table-dragger',
@@ -1123,31 +1122,52 @@ define(['require',
                     that.addTagModalView(guid);
                 }
             },
+            //This function checks for the lenght of Available terms and modal 
for adding terms is displayed accordingly.
+            assignTermModalView: function(glossaryCollection, obj) {
+                var that = this,
+                    terms = 0;
+                _.each(glossaryCollection.fullCollection.models, 
function(model) {
+                    if (model.get('terms')) {
+                        terms += model.get('terms').length;
+                    };
+                });
+                if (terms) {
+                    require(['views/glossary/AssignTermLayoutView'], 
function(AssignTermLayoutView) {
+                        var view = new AssignTermLayoutView({
+                            guid: obj.guid,
+                            multiple: obj.multiple,
+                            associatedTerms: obj.associatedTerms,
+                            callback: function() {
+                                that.multiSelectEntity = [];
+                                
that.$('.multiSelectTag,.multiSelectTerm').hide();
+                                that.fetchCollection();
+                            },
+                            glossaryCollection: glossaryCollection,
+                        });
+                    });
+                } else {
+                    Utils.notifyInfo({
+                        content: "There are no available terms"
+                    });
+                }
+            },
             onClickAddTermBtn: function(e) {
                 var that = this,
                     guid = "",
                     entityGuid = $(e.currentTarget).data("guid"),
-                    associatedTerms = undefined,
-                    multiple = undefined,
+                    obj = {
+                        guid: entityGuid,
+                        multiple: undefined,
+                        associatedTerms: undefined,
+                    },
                     isTermMultiSelect = 
$(e.currentTarget).hasClass('multiSelectTerm');
+
+                that.assignTermModalView(this.glossaryCollection, obj);
                 if (isTermMultiSelect && this.multiSelectEntity && 
this.multiSelectEntity.length) {
-                    multiple = this.multiSelectEntity;
+                    obj.multiple = this.multiSelectEntity;
                 } else if (entityGuid) {
-                    associatedTerms = this.searchCollection.find({ guid: 
entityGuid }).get('meanings');
+                    obj.associatedTerms = this.searchCollection.find({ guid: 
entityGuid }).get('meanings');
                 }
-                require(['views/glossary/AssignTermLayoutView'], 
function(AssignTermLayoutView) {
-                    var view = new AssignTermLayoutView({
-                        guid: entityGuid,
-                        multiple: multiple,
-                        associatedTerms: associatedTerms,
-                        callback: function() {
-                            that.multiSelectEntity = [];
-                            that.$('.multiSelectTag,.multiSelectTerm').hide();
-                            that.fetchCollection();
-                        },
-                        glossaryCollection: that.glossaryCollection,
-                    });
-                });
             },
             onClickTagCross: function(e) {
                 var that = this,
diff --git a/dashboardv3/public/js/views/detail_page/DetailPageLayoutView.js 
b/dashboardv3/public/js/views/detail_page/DetailPageLayoutView.js
index dbbbcde..a18984e 100644
--- a/dashboardv3/public/js/views/detail_page/DetailPageLayoutView.js
+++ b/dashboardv3/public/js/views/detail_page/DetailPageLayoutView.js
@@ -565,29 +565,54 @@ define(['require',
                     });
                 });
             },
+            //This function checks for the lenght of Available terms and modal 
for adding terms is displayed accordingly.
+            assignTermModalView: function(glossaryCollection, obj) {
+                var that = this,
+                    terms = 0;
+                _.each(glossaryCollection.fullCollection.models, 
function(model) {
+                    if (model.get('terms')) {
+                        terms += model.get('terms').length;
+                    };
+                });
+                if (terms) {
+                    require(['views/glossary/AssignTermLayoutView'], 
function(AssignTermLayoutView) {
+                        var view = new AssignTermLayoutView({
+                            guid: obj.guid,
+                            callback: function() {
+                                that.fetchCollection();
+                            },
+                            associatedTerms: obj.associatedTerms,
+                            showLoader: that.showLoader.bind(that),
+                            hideLoader: that.hideLoader.bind(that),
+                            glossaryCollection: glossaryCollection
+                        });
+                        view.modal.on('ok', function() {
+                            Utils.showTitleLoader(that.$('.page-title 
.fontLoader'), that.$('.entityDetail'));
+                        });
+                    });
+                } else {
+                    Utils.notifyInfo({
+                        content: "There are no available terms that can be 
associated with this entity"
+                    });
+                }
+            },
             onClickAddTermBtn: function(e) {
                 var that = this,
-                    entityGuid = that.id,
                     entityObj = this.collection.first().get('entity'),
-                    associatedTerms = [];
+                    glossaryData = null,
+                    obj = {
+                        guid: this.id,
+                        associatedTerms: [],
+                    };
+                this.glossaryCollection.fetch({
+                    success: function(glossaryCollection) {
+                        that.assignTermModalView(glossaryCollection, obj);
+                    },
+                    reset: true,
+                });
                 if (entityObj && entityObj.relationshipAttributes && 
entityObj.relationshipAttributes.meanings) {
-                    associatedTerms = 
entityObj.relationshipAttributes.meanings;
+                    obj.associatedTerms = 
entityObj.relationshipAttributes.meanings;
                 }
-                require(['views/glossary/AssignTermLayoutView'], 
function(AssignTermLayoutView) {
-                    var view = new AssignTermLayoutView({
-                        guid: that.id,
-                        callback: function() {
-                            that.fetchCollection();
-                        },
-                        associatedTerms: associatedTerms,
-                        showLoader: that.showLoader.bind(that),
-                        hideLoader: that.hideLoader.bind(that),
-                        glossaryCollection: that.glossaryCollection
-                    });
-                    view.modal.on('ok', function() {
-                        Utils.showTitleLoader(that.$('.page-title 
.fontLoader'), that.$('.entityDetail'));
-                    });
-                });
             },
             renderEntityDetailTableLayoutView: function(obj) {
                 var that = this;
diff --git a/dashboardv3/public/js/views/glossary/GlossaryDetailLayoutView.js 
b/dashboardv3/public/js/views/glossary/GlossaryDetailLayoutView.js
index 951281c..551e229 100644
--- a/dashboardv3/public/js/views/glossary/GlossaryDetailLayoutView.js
+++ b/dashboardv3/public/js/views/glossary/GlossaryDetailLayoutView.js
@@ -171,7 +171,7 @@ define(['require',
                     Utils.backButtonClick();
                 }
                 events["click " + this.ui.addTerm] = 'onClickAddTermBtn';
-                events["click " + this.ui.addCategory] = 
'onClickAddCategoryBtn';
+                events["click " + this.ui.addCategory] = 'onClickAddTermBtn';
                 events["click " + this.ui.addTag] = 'onClickAddTagBtn';
                 return events;
             },
@@ -351,60 +351,63 @@ define(['require',
                 this.ui.tagList.find("span.btn").remove();
                 this.ui.tagList.prepend(tagData);
             },
+            getCategoryTermCount: function(collection, matchString) {
+                var terms = 0;
+                _.each(collection, function(model) {
+                    if (model.get(matchString)) {
+                        terms += model.get(matchString).length;
+                    }
+                });
+                return terms;
+            },
             onClickAddTermBtn: function(e) {
-                var that = this;
-                require(['views/glossary/AssignTermLayoutView'], 
function(AssignTermLayoutView) {
-                    var glossary = that.glossaryCollection;
-                    if (that.value && that.value.gId) {
-                        var foundModel = that.glossaryCollection.find({ guid: 
that.value.gId });
-                        if (foundModel) {
-                            glossary = new 
VGlossaryList([foundModel.toJSON()], {
-                                comparator: function(item) {
-                                    return item.get("name");
-                                }
-                            });
-                        }
+                var glossary = this.glossaryCollection;
+                if (this.value && this.value.gId) {
+                    var foundModel = this.glossaryCollection.find({ guid: 
this.value.gId });
+                    if (foundModel) {
+                        glossary = new VGlossaryList([foundModel.toJSON()], {
+                            comparator: function(item) {
+                                return item.get("name");
+                            }
+                        });
                     }
-
-                    var view = new AssignTermLayoutView({
-                        categoryData: that.data,
-                        associatedTerms: that.data && that.data.terms && 
that.data.terms.length > 0 ? that.data.terms : [],
-                        isCategoryView: that.isCategoryView,
+                }
+                var obj = {
                         callback: function() {
-                            that.getData();
+                            this.getData();
                         },
-                        glossaryCollection: glossary
+                        glossaryCollection: glossary,
+                    },
+                    emptyListMessage = this.isCategoryView ? "There are no 
available terms that can be associated with this category" : "There are no 
available categories that can be associated with this term";
+
+                if (this.isCategoryView) {
+                    obj = _.extend(obj, {
+                        categoryData: this.data,
+                        associatedTerms: (this.data && this.data.terms && 
this.data.terms.length > 0) ? this.data.terms : [],
+                        isCategoryView: this.isCategoryView,
                     });
-                    view.modal.on('ok', function() {
-                        that.hideLoader();
+                } else {
+                    obj = _.extend(obj, {
+                        termData: this.data,
+                        isTermView: this.isTermView,
                     });
-                });
+                }
+                if (this.getCategoryTermCount(glossary.fullCollection.models, 
this.isCategoryView ? "terms" : "categories")) {
+                    this.AssignTermLayoutViewModal(obj);
+                } else {
+                    Utils.notifyInfo({
+                        content: emptyListMessage
+                    });
+                }
             },
-            onClickAddCategoryBtn: function(e) {
+            AssignTermLayoutViewModal: function(termCategoryObj) {
                 var that = this;
                 require(['views/glossary/AssignTermLayoutView'], 
function(AssignTermLayoutView) {
-                    var glossary = that.glossaryCollection;
-                    if (that.value && that.value.gId) {
-                        var foundModel = that.glossaryCollection.find({ guid: 
that.value.gId });
-                        if (foundModel) {
-                            glossary = new 
VGlossaryList([foundModel.toJSON()], {
-                                comparator: function(item) {
-                                    return item.get("name");
-                                }
-                            });
-                        }
-                    }
-                    var view = new AssignTermLayoutView({
-                        termData: that.data,
-                        isTermView: that.isTermView,
-                        callback: function() {
-                            that.getData();
-                        },
-                        glossaryCollection: glossary
-                    });
+                    var view = new AssignTermLayoutView(termCategoryObj);
                     view.modal.on('ok', function() {
                         that.hideLoader();
                     });
+
                 });
             },
             onClickAddTagBtn: function(e) {
diff --git a/dashboardv3/public/js/views/search/SearchResultLayoutView.js 
b/dashboardv3/public/js/views/search/SearchResultLayoutView.js
index d98d6e2..d5883ca 100644
--- a/dashboardv3/public/js/views/search/SearchResultLayoutView.js
+++ b/dashboardv3/public/js/views/search/SearchResultLayoutView.js
@@ -153,7 +153,7 @@ define(['require',
              * @constructs
              */
             initialize: function(options) {
-                _.extend(this, _.pick(options, 'value', 'guid', 'initialView', 
'isTypeTagNotExists', 'classificationDefCollection', 'entityDefCollection', 
'typeHeaders', 'searchVent', 'enumDefCollection', 'tagCollection', 
'searchTableColumns', 'isTableDropDisable', 'fromView', 'glossaryCollection', 
'termName', 'businessMetadataDefCollection', 'profileDBView'));
+                _.extend(this, _.pick(options, 'value', 'guid', 'initialView', 
'isTypeTagNotExists', 'classificationDefCollection', 'entityDefCollection', 
'typeHeaders', 'searchVent', 'categoryEvent', 'enumDefCollection', 
'tagCollection', 'searchTableColumns', 'isTableDropDisable', 'fromView', 
'glossaryCollection', 'termName', 'businessMetadataDefCollection', 
'profileDBView'));
                 this.entityModel = new VEntity();
                 this.searchCollection = new VSearchList();
                 this.limit = 25;
@@ -248,13 +248,17 @@ define(['require',
                 }, this);
                 this.listenTo(this.searchCollection, "backgrid:sorted", 
function(model, response) {
                     this.checkTableFetch();
-                }, this)
+                }, this);
+                this.listenTo(this.categoryEvent, 
"Sucess:TermSearchResultPage", function() {
+                    this.glossaryCollection.fetch({ reset: true });
+                });
             },
             onRender: function() {
                 var that = this;
                 if (Utils.getUrlState.isSearchTab()) {
                     this.$(".action-box").hide();
                 }
+
                 this.checkEntityImage = {};
                 this.commonTableOptions = {
                     collection: this.searchCollection,
@@ -1134,32 +1138,57 @@ define(['require',
                     that.addTagModalView(guid);
                 }
             },
+            //This function checks for the lenght of Available terms and modal 
for adding terms is displayed accordingly.
+            assignTermModalView: function(glossaryCollection, obj) {
+                var that = this,
+                    terms = 0;
+                _.each(glossaryCollection.fullCollection.models, 
function(model) {
+                    if (model.get('terms')) {
+                        terms += model.get('terms').length;
+                    };
+                });
+                if (terms) {
+                    require(['views/glossary/AssignTermLayoutView'], 
function(AssignTermLayoutView) {
+                        var view = new AssignTermLayoutView({
+                            guid: obj.guid,
+                            multiple: obj.multiple,
+                            associatedTerms: obj.associatedTerms,
+                            callback: function() {
+                                that.multiSelectEntity = [];
+                                
that.$('.multiSelectTag,.multiSelectTerm').hide();
+                                that.fetchCollection();
+                            },
+                            glossaryCollection: glossaryCollection,
+                        });
+                    });
+                } else {
+                    Utils.notifyInfo({
+                        content: "There are no available terms"
+                    });
+                }
+            },
             onClickAddTermBtn: function(e) {
                 var that = this,
                     guid = "",
                     entityGuid = $(e.currentTarget).data("guid"),
-                    associatedTerms = undefined,
-                    multiple = undefined,
+                    obj = {
+                        guid: entityGuid,
+                        multiple: undefined,
+                        associatedTerms: undefined,
+                    },
                     isTermMultiSelect = 
$(e.currentTarget).hasClass('multiSelectTerm');
+                this.glossaryCollection.fetch({
+                    success: function(glossaryCollection) {
+                        that.assignTermModalView(glossaryCollection, obj);
+                    },
+                    reset: true,
+                });
                 if (isTermMultiSelect && this.multiSelectEntity && 
this.multiSelectEntity.length) {
-                    multiple = this.multiSelectEntity;
+                    obj.multiple = this.multiSelectEntity;
                 } else if (entityGuid) {
-                    associatedTerms = this.searchCollection.find({ guid: 
entityGuid }).get('meanings');
+                    obj.associatedTerms = this.searchCollection.find({ guid: 
entityGuid }).get('meanings');
                 }
-                require(['views/glossary/AssignTermLayoutView'], 
function(AssignTermLayoutView) {
-                    var view = new AssignTermLayoutView({
-                        guid: entityGuid,
-                        multiple: multiple,
-                        associatedTerms: associatedTerms,
-                        callback: function() {
-                            that.multiSelectEntity = [];
-                            that.$('.multiSelectTag,.multiSelectTerm').hide();
-                            that.fetchCollection();
 
-                        },
-                        glossaryCollection: that.glossaryCollection,
-                    });
-                });
             },
             onClickTagCross: function(e) {
                 var that = this,

Reply via email to