You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by ni...@apache.org on 2019/11/14 09:06:32 UTC

[atlas] 01/02: ATLAS-3521 : UI: Use existing labels from other entities

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 72243644900495436975161bf797bc53f4cf0d0e
Author: kevalbhatt <kb...@apache.org>
AuthorDate: Tue Nov 12 18:19:35 2019 +0530

    ATLAS-3521 : UI: Use existing labels from other entities
    
    Signed-off-by: nixonrodrigues <ni...@apache.org>
---
 .../js/views/entity/EntityLabelDefineView.js       | 43 ++++++++++++++++++----
 .../js/views/entity/EntityLabelDefineView.js       | 41 +++++++++++++++++----
 2 files changed, 69 insertions(+), 15 deletions(-)

diff --git a/dashboardv2/public/js/views/entity/EntityLabelDefineView.js b/dashboardv2/public/js/views/entity/EntityLabelDefineView.js
index 4f971ab..f45660b 100644
--- a/dashboardv2/public/js/views/entity/EntityLabelDefineView.js
+++ b/dashboardv2/public/js/views/entity/EntityLabelDefineView.js
@@ -23,8 +23,9 @@ define(['require',
     'utils/Utils',
     'utils/Messages',
     'utils/Enums',
+    'utils/UrlLinks',
     'utils/CommonViewFunction',
-], function(require, Backbone, EntityLabelDefineView_tmpl, VEntity, Utils, Messages, Enums, CommonViewFunction) {
+], function(require, Backbone, EntityLabelDefineView_tmpl, VEntity, Utils, Messages, Enums, UrlLinks, CommonViewFunction) {
     'use strict';
 
     return Backbone.Marionette.LayoutView.extend({
@@ -72,16 +73,42 @@ define(['require',
                     return "<option selected > " + label + " </option>";
                 });
             this.ui.addLabelOptions.html(str);
+            var getLabelData = function(data, selectedData) {
+                if (data.suggestions) {
+                    return _.map(data.suggestions, function(name, index) {
+                        var findValue = _.find(selectedData, { id: name })
+                        if (findValue) {
+                            return findValue;
+                        } else {
+                            return {
+                                id: name,
+                                text: name
+                            }
+                        }
+                    });
+                } else {
+                    return []
+                }
+            };
             this.ui.addLabelOptions.select2({
                 placeholder: "Select Label",
                 allowClear: false,
                 tags: true,
                 multiple: true,
-                matcher: function(params, data) {
-                    if (params.term === data.text) {
-                        return data;
-                    }
-                    return null;
+                ajax: {
+                    url: UrlLinks.searchApiUrl('suggestions'),
+                    dataType: 'json',
+                    delay: 250,
+                    data: function(params) {
+                        return {
+                            prefixString: _.escape(params.term), // search term
+                            fieldName: '__labels'
+                        };
+                    },
+                    processResults: function(data, params) {
+                        return { results: getLabelData(data, this.$element.select2("data")) };
+                    },
+                    cache: true
                 },
                 templateResult: this.formatResultSearch
             });
@@ -91,7 +118,7 @@ define(['require',
                 return state.text;
             }
             if (!state.element) {
-                return $("<span>Add<strong> '" + state.text + "'</strong></span>");
+                return $("<span>Add<strong> '" + _.escape(state.text) + "'</strong></span>");
             }
         },
         onChangeLabelChange: function() {
@@ -116,7 +143,7 @@ define(['require',
                     type: 'POST',
                     success: function() {
                         var msg = entityJson.labels === undefined ? 'addSuccessMessage' : 'editSuccessMessage',
-                        caption = "One or more label";
+                            caption = "One or more label";
                         if (payload.length === 0) {
                             msg = 'removeSuccessMessage';
                             caption = "One or more existing label";
diff --git a/dashboardv3/public/js/views/entity/EntityLabelDefineView.js b/dashboardv3/public/js/views/entity/EntityLabelDefineView.js
index a003d2c..7dd7555 100644
--- a/dashboardv3/public/js/views/entity/EntityLabelDefineView.js
+++ b/dashboardv3/public/js/views/entity/EntityLabelDefineView.js
@@ -23,8 +23,9 @@ define(['require',
     'utils/Utils',
     'utils/Messages',
     'utils/Enums',
+    'utils/UrlLinks',
     'utils/CommonViewFunction',
-], function(require, Backbone, EntityLabelDefineView_tmpl, VEntity, Utils, Messages, Enums, CommonViewFunction) {
+], function(require, Backbone, EntityLabelDefineView_tmpl, VEntity, Utils, Messages, Enums, UrlLinks, CommonViewFunction) {
     'use strict';
 
     return Backbone.Marionette.LayoutView.extend({
@@ -72,16 +73,42 @@ define(['require',
                     return "<option selected > " + label + " </option>";
                 });
             this.ui.addLabelOptions.html(str);
+            var getLabelData = function(data, selectedData) {
+                if (data.suggestions) {
+                    return _.map(data.suggestions, function(name, index) {
+                        var findValue = _.find(selectedData, { id: name })
+                        if (findValue) {
+                            return findValue;
+                        } else {
+                            return {
+                                id: name,
+                                text: name
+                            }
+                        }
+                    });
+                } else {
+                    return []
+                }
+            };
             this.ui.addLabelOptions.select2({
                 placeholder: "Select Label",
                 allowClear: false,
                 tags: true,
                 multiple: true,
-                matcher: function(params, data) {
-                    if (params.term === data.text) {
-                        return data;
-                    }
-                    return null;
+                ajax: {
+                    url: UrlLinks.searchApiUrl('suggestions'),
+                    dataType: 'json',
+                    delay: 250,
+                    data: function(params) {
+                        return {
+                            prefixString: _.escape(params.term), // search term
+                            fieldName: '__labels'
+                        };
+                    },
+                    processResults: function(data, params) {
+                        return { results: getLabelData(data, this.$element.select2("data")) };
+                    },
+                    cache: true
                 },
                 templateResult: this.formatResultSearch
             });
@@ -91,7 +118,7 @@ define(['require',
                 return state.text;
             }
             if (!state.element) {
-                return $("<span>Add<strong> '" + state.text + "'</strong></span>");
+                return $("<span>Add<strong> '" +  _.escape(state.text) + "'</strong></span>");
             }
         },
         onChangeLabelChange: function() {