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 2018/05/10 17:23:20 UTC

atlas git commit: ATLAS-2669 : Glossary UI : Attribute UI improved while associating term to the related term.

Repository: atlas
Updated Branches:
  refs/heads/master 479b9ab1c -> f85ff28e0


ATLAS-2669 : Glossary UI : Attribute UI improved while associating term to the related term.

Signed-off-by: Madhan Neethiraj <ma...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/atlas/repo
Commit: http://git-wip-us.apache.org/repos/asf/atlas/commit/f85ff28e
Tree: http://git-wip-us.apache.org/repos/asf/atlas/tree/f85ff28e
Diff: http://git-wip-us.apache.org/repos/asf/atlas/diff/f85ff28e

Branch: refs/heads/master
Commit: f85ff28e05f92e75be3d663dd1a8c1c75f6130dd
Parents: 479b9ab
Author: kevalbhatt <kb...@apache.org>
Authored: Thu May 10 20:13:03 2018 +0530
Committer: Madhan Neethiraj <ma...@apache.org>
Committed: Thu May 10 09:16:28 2018 -0700

----------------------------------------------------------------------
 dashboardv2/gruntfile.js                        |   5 +-
 dashboardv2/package.json                        |   3 +-
 dashboardv2/public/css/scss/style.scss          |   1 +
 dashboardv2/public/css/scss/wizard.scss         | 341 +++++++++++++++++++
 dashboardv2/public/js/main.js                   |   6 +-
 .../glossary/AssignTermLayoutView_tmpl.html     |  33 +-
 .../TermRelationAttributeLayoutView_tmpl.html   |  13 -
 .../js/views/glossary/AssignTermLayoutView.js   |  44 ++-
 .../views/glossary/GlossaryDetailLayoutView.js  |  31 +-
 .../js/views/glossary/GlossaryLayoutView.js     |  10 +-
 .../js/views/search/SearchResultLayoutView.js   |   3 +
 11 files changed, 453 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/atlas/blob/f85ff28e/dashboardv2/gruntfile.js
----------------------------------------------------------------------
diff --git a/dashboardv2/gruntfile.js b/dashboardv2/gruntfile.js
index 2bcecfe..1d54a81 100644
--- a/dashboardv2/gruntfile.js
+++ b/dashboardv2/gruntfile.js
@@ -106,7 +106,8 @@ module.exports = function(grunt) {
                     'nv.d3.min.js': { 'nvd3/build': 'nvd3' },
                     'jquery.sparkline.min.js': { 'jquery-sparkline': 'sparkline' },
                     'table-dragger.js': { 'table-dragger/dist': 'table-dragger' },
-                    'jstree.min.js': { 'jstree/dist': 'jstree' }
+                    'jstree.min.js': { 'jstree/dist': 'jstree' },
+                    'jquery.steps.min.js': { 'jquery-steps/build': 'jquery-steps' }
                 }
 
             },
@@ -143,7 +144,7 @@ module.exports = function(grunt) {
                     }],
                     'query-builder.default.min.css': { 'jQuery-QueryBuilder/dist/css': 'jQueryQueryBuilder/css' },
                     'daterangepicker.css': { 'bootstrap-daterangepicker': 'bootstrap-daterangepicker/css' },
-                    'nv.d3.min.css': { 'nvd3/build': 'nvd3/css' },
+                    'nv.d3.min.css': { 'nvd3/build': 'nvd3/css' }
                 }
 
             },

http://git-wip-us.apache.org/repos/asf/atlas/blob/f85ff28e/dashboardv2/package.json
----------------------------------------------------------------------
diff --git a/dashboardv2/package.json b/dashboardv2/package.json
index e543468..7fbd1bf 100644
--- a/dashboardv2/package.json
+++ b/dashboardv2/package.json
@@ -37,7 +37,8 @@
     "jquery-asBreadcrumbs": "0.2.2",
     "jquery-placeholder": "2.3.1",
     "jquery-sparkline": "2.4.0",
-    "jstree": "^3.3.5",
+    "jquery-steps": "1.1.0",
+    "jstree": "3.3.5",
     "moment": "2.21.0",
     "moment-timezone": "0.5.14",
     "npm": "^5.8.0",

http://git-wip-us.apache.org/repos/asf/atlas/blob/f85ff28e/dashboardv2/public/css/scss/style.scss
----------------------------------------------------------------------
diff --git a/dashboardv2/public/css/scss/style.scss b/dashboardv2/public/css/scss/style.scss
index 2b226cd..cd1781b 100644
--- a/dashboardv2/public/css/scss/style.scss
+++ b/dashboardv2/public/css/scss/style.scss
@@ -32,4 +32,5 @@
 @import "search.scss";
 @import "profile-table.scss";
 @import "glossary.scss";
+@import "wizard.scss";
 @import "override.scss";
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/atlas/blob/f85ff28e/dashboardv2/public/css/scss/wizard.scss
----------------------------------------------------------------------
diff --git a/dashboardv2/public/css/scss/wizard.scss b/dashboardv2/public/css/scss/wizard.scss
new file mode 100644
index 0000000..6b3ceb4
--- /dev/null
+++ b/dashboardv2/public/css/scss/wizard.scss
@@ -0,0 +1,341 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+$color_scarlet_approx: #ff3111;
+$color_pippin_approx: #fbe3e4;
+$color_your_pink_approx: #fbc2c4;
+$color_falu_red_approx: #8a1f11;
+
+%wizard_tabcontrol {
+    display: block;
+    width: 100%;
+}
+
+%extend_2 {
+    list-style: none!important;
+    padding: 0;
+    margin: 0;
+}
+
+%extend_3 {
+    display: block;
+    width: auto;
+    margin: 0 .5em .5em;
+    padding: 1em;
+    text-decoration: none;
+    position: relative;
+    border-radius: 5px;
+}
+
+%extend_4 {
+    background: #f5f5f5;
+    color: #bbb;
+    cursor: default;
+}
+
+%extend_5 {
+    background: $color_keppel_approx;
+    color: $white;
+    cursor: default;
+}
+
+%extend_befor_after {
+    content: " ";
+    display: block;
+    width: 0;
+    height: 0;
+    border-top: 50px solid transparent;
+    border-bottom: 50px solid transparent;
+    position: absolute;
+    top: 50%;
+    margin-top: -50px;
+    left: 100%;
+}
+
+.wizard {
+    @extend %wizard_tabcontrol;
+    a {
+        outline: 0;
+    }
+    ul {
+        @extend %extend_2;
+        >li {
+            display: block;
+            padding: 0;
+        }
+    }
+    > {
+        .steps {
+            position: relative;
+            display: block;
+            width: 100%;
+            .current-info {
+                position: absolute;
+                left: -999em;
+            }
+            .number {
+                font-size: 1.429em;
+            }
+            &>ul {
+                position: relative;
+                border: 0;
+                padding: 0px;
+                background: #f5f5f5;
+                border-radius: 0;
+                list-style: none;
+                overflow: hidden;
+                margin-bottom: 10px;
+                >li {
+                    width: 25%;
+                    float: left;
+                    &:first-child>a {
+                        padding-left: 15px;
+                    }
+                    a {
+                        @extend %extend_3;
+                        &:hover {
+                            cursor: pointer;
+                        }
+                        margin: 0;
+                        border: none;
+                        border-radius: 0;
+                        padding: 10px 0 10px 45px;
+                        &:before {
+                            @extend %extend_befor_after;
+                            border-left: 30px solid #ddd;
+                            margin-left: 1px;
+                            z-index: 1;
+                        }
+                        &:after {
+                            @extend %extend_befor_after;
+                            border-left: 30px solid #f5f5f5;
+                            z-index: 2;
+                        }
+                    }
+                    &.disabled a {
+                        @extend %extend_4;
+                    }
+                    &.current a {
+                        @extend %extend_5;
+                        &:after {
+                            border-left: 30px solid $color_keppel_approx;
+                        }
+                    }
+                    &.done a {
+                        background: #b4e5d9;
+                        color: $white;
+                        &:after {
+                            border-left: 30px solid #b4e5d9;
+                        }
+                    }
+                    &.error a {
+                        background: $color_scarlet_approx;
+                        color: $white;
+                        &:after {
+                            border-left: 30px solid $color_scarlet_approx;
+                        }
+                    }
+                }
+            }
+        }
+        .content {
+            background: #f5f5f5;
+            display: block;
+            margin: .5em;
+            position: relative;
+            width: 100%; //Instead of the line below you could use @include border-radius($radius, $vertical-radius)
+            border-radius: 5px;
+            > {
+                .title {
+                    display: none;
+                }
+                .body {
+                    float: left;
+                    width: 100%;
+                    height: 95%;
+                    padding: 2.5%;
+                    >ul {
+                        list-style: disc!important;
+                        >li {
+                            display: list-item;
+                        }
+                    }
+                }
+            }
+        }
+        .actions {
+            position: relative;
+            display: block;
+            text-align: right;
+            width: 100%;
+            ul[role="menu"] {
+                li+li {
+                    margin-left: 5px;
+                }
+                li.disabled {
+                    a {
+                        opacity: .65;
+                    }
+                }
+                a {
+                    padding: 10px 20px;
+                    background-color: $color_keppel_approx;
+                    color: #fff;
+                    margin-bottom: 10px;
+                    border: 1px $color_keppel_approx solid;
+                    border-radius: 4px;
+                    transition: all .3s ease;
+                    margin: 2px;
+                }
+                a[href="#cancel"] {
+                    padding: 10px 20px;
+                    background-color: transparent;
+                    color: $color_keppel_approx;
+                    margin-bottom: 10px;
+                    border: 1px $color_keppel_approx solid;
+                    border-radius: 4px;
+                    transition: all .3s ease;
+                    margin: 2px;
+                }
+            }
+            >ul {
+                display: inline-block;
+                text-align: right;
+                >li {
+                    float: left;
+                    margin: 0 .5em;
+                }
+            }
+        }
+        .loading .spinner {}
+    }
+    &.vertical> {
+        .steps {
+            display: inline;
+            float: left;
+            width: 30%;
+            >ul>li {
+                float: none;
+                width: 100%;
+            }
+        }
+        .content {
+            display: inline;
+            float: left;
+            margin: 0 2.5% .5em 2.5%;
+            width: 65%;
+        }
+        .actions {
+            display: inline;
+            float: right;
+            margin: 0 2.5%;
+            width: 95%;
+            >ul>li {
+                margin: 0 0 0 1em;
+            }
+        }
+    }
+}
+
+.tabcontrol {
+    @extend %wizard_tabcontrol;
+    a {
+        outline: 0;
+    }
+    ul {
+        @extend %extend_2;
+        >li {
+            display: block;
+            padding: 0;
+        }
+    }
+    > {
+        .steps .current-info {
+            position: absolute;
+            left: -999em;
+        }
+        .content>.title {
+            display: none;
+        }
+    }
+}
+
+@media(max-width: 600px) {
+    .wizard {
+        >.steps {
+            a {
+                margin-top: .5em;
+                &:hover {
+                    margin-top: .5em;
+                }
+                &:active {
+                    margin-top: .5em;
+                }
+            }
+            >ul>li {
+                width: 50%;
+            }
+        }
+        &.vertical> {
+            .steps {
+                display: block;
+                float: none;
+                width: 100%;
+            }
+            .actions {
+                display: block;
+                float: none;
+                width: 100%;
+            }
+            .content {
+                display: block;
+                float: none;
+                margin: 0 .5em .5em;
+                width: auto;
+            }
+        }
+    }
+}
+
+@media(max-width: 480px) {
+    .wizard>.steps>ul>li {
+        width: 100%;
+    }
+}
+
+.wizard-modal {
+    .modal-body {
+        overflow: hidden;
+        max-height: none;
+    }
+    .wizard {
+        position: relative;
+        width: 100%;
+        height: 100%;
+        .content {
+            max-height: 400px;
+            overflow: auto;
+            margin: 0px 0px 15px 0px;
+        }
+        .actions {
+            >ul>li {
+                margin: 0px;
+            }
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/atlas/blob/f85ff28e/dashboardv2/public/js/main.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/main.js b/dashboardv2/public/js/main.js
index 6c72cca..510c48f 100644
--- a/dashboardv2/public/js/main.js
+++ b/dashboardv2/public/js/main.js
@@ -129,6 +129,9 @@ require.config({
         },
         'jstree': {
             'deps': ['jquery']
+        },
+        'jquery-steps': {
+            'deps': ['jquery']
         }
     },
 
@@ -171,7 +174,8 @@ require.config({
         'nvd3': 'libs/nvd3/nv.d3.min',
         'sparkline': 'libs/sparkline/jquery.sparkline.min',
         'table-dragger': 'libs/table-dragger/table-dragger',
-        'jstree': 'libs/jstree/jstree.min'
+        'jstree': 'libs/jstree/jstree.min',
+        'jquery-steps': 'libs/jquery-steps/jquery.steps.min',
     },
 
     /**

http://git-wip-us.apache.org/repos/asf/atlas/blob/f85ff28e/dashboardv2/public/js/templates/glossary/AssignTermLayoutView_tmpl.html
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/templates/glossary/AssignTermLayoutView_tmpl.html b/dashboardv2/public/js/templates/glossary/AssignTermLayoutView_tmpl.html
index 9abe8c3..385d809 100644
--- a/dashboardv2/public/js/templates/glossary/AssignTermLayoutView_tmpl.html
+++ b/dashboardv2/public/js/templates/glossary/AssignTermLayoutView_tmpl.html
@@ -14,17 +14,26 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
 -->
-<div id="r_glossaryTree"></div>
-<br/>
 {{#if isAttributeRelationView}}
-<form name="termAttributeForm" class="form-horizontal" data-id="termAttributeForm">
-	{{#each selectedTermAttributeList}}
-    <div class="form-group">
-        <label class="control-label col-sm-2" for="name">{{@key}}</label>
-        <div class="col-sm-10">
-            <input class="form-control" name="{{@key}}" value="" data-id="displayName" placeholder="{{@key}}"/>
-        </div>
-    </div>
-    {{/each}}
-</form>
+<div data-id="wizard">
+    <h3>Select Term</h3>
+    <section>
+        <div id="r_glossaryTree"></div>
+    </section>
+    <h3>Attributes</h3>
+    <section>
+        <form name="termAttributeForm" class="form-horizontal" data-id="termAttributeForm">
+            {{#each selectedTermAttributeList}}
+            <div class="form-group">
+                <label class="control-label col-sm-2" for="name">{{@key}}</label>
+                <div class="col-sm-10">
+                    <input class="form-control" name="{{@key}}" value="" data-id="displayName" placeholder="{{@key}}" />
+                </div>
+            </div>
+            {{/each}}
+        </form>
+    </section>
+</div>
+{{else}}
+<div id="r_glossaryTree"></div>
 {{/if}}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/atlas/blob/f85ff28e/dashboardv2/public/js/templates/glossary/TermRelationAttributeLayoutView_tmpl.html
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/templates/glossary/TermRelationAttributeLayoutView_tmpl.html b/dashboardv2/public/js/templates/glossary/TermRelationAttributeLayoutView_tmpl.html
index 0755196..8173682 100644
--- a/dashboardv2/public/js/templates/glossary/TermRelationAttributeLayoutView_tmpl.html
+++ b/dashboardv2/public/js/templates/glossary/TermRelationAttributeLayoutView_tmpl.html
@@ -15,18 +15,5 @@
  * limitations under the License.
 -->
 <div>
-    <div class="row form-group">
-        <!-- <div class="col-md-6">
-            <select data-id="termAttributeSelect">
-                {{#each attributeList}}
-                <option value="{{@key}}">{{@key}}</option>{{/each}}
-            </select>
-        </div> -->
-        <!-- <div class="col-md-6">
-            <button type="button" class="btn btn-action btn-md" data-id="addTermRelation">
-                <i class="fa fa-plus"></i> <span>Assign Term</span>
-            </button>
-        </div> -->
-    </div>
     <div data-id="termAttributeTable"></div>
 </div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/atlas/blob/f85ff28e/dashboardv2/public/js/views/glossary/AssignTermLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/glossary/AssignTermLayoutView.js b/dashboardv2/public/js/views/glossary/AssignTermLayoutView.js
index 1123465..b15a175 100644
--- a/dashboardv2/public/js/views/glossary/AssignTermLayoutView.js
+++ b/dashboardv2/public/js/views/glossary/AssignTermLayoutView.js
@@ -22,7 +22,8 @@ define(['require',
     'utils/Utils',
     'utils/Enums',
     'utils/UrlLinks',
-    'modules/Modal'
+    'modules/Modal',
+    'jquery-steps'
 ], function(require, Backbone, AssignTermLayoutViewTmpl, Utils, Enums, UrlLinks, Modal) {
 
     var AssignTermLayoutView = Backbone.Marionette.LayoutView.extend(
@@ -46,7 +47,8 @@ define(['require',
 
             /** ui selector cache */
             ui: {
-                termAttributeForm: '[data-id="termAttributeForm"]'
+                termAttributeForm: '[data-id="termAttributeForm"]',
+                wizard: '[data-id="wizard"]'
             },
             /** ui events hash */
             events: function() {
@@ -81,7 +83,9 @@ define(['require',
                     "cancelText": "Cancel",
                     "okCloses": false,
                     "okText": "Assign",
-                    "allowCancel": true
+                    "allowCancel": true,
+                    "showFooter": this.isAttributeRelationView ? false : true,
+                    "mainClass": "wizard-modal"
                 });
                 this.modal.open();
                 this.modal.on('closeModal', function() {
@@ -100,6 +104,40 @@ define(['require',
             bindEvents: function() {},
             onRender: function() {
                 this.renderGlossaryTree();
+                var that = this;
+                if (this.isAttributeRelationView) {
+                    this.ui.wizard.steps({
+                        headerTag: "h3",
+                        bodyTag: "section",
+                        transitionEffect: "slideLeft",
+                        autoFocus: true,
+                        enableCancelButton: true,
+                        transitionEffect: $.fn.steps.transitionEffect.none,
+                        transitionEffectSpeed: 200,
+                        labels: {
+                            cancel: "Cancel",
+                            finish: "Assign",
+                            next: "Next",
+                            previous: "Previous",
+                            loading: "Loading ..."
+                        },
+                        onStepChanging: function(event, currentIndex, newIndex) {
+                            var isMatch = that.glossary.selectedItem.type == "GlossaryTerm";
+                            if (!isMatch) {
+                                Utils.notifyWarn({
+                                    content: "Please select Term for association"
+                                });
+                            }
+                            return isMatch
+                        },
+                        onFinished: function(event, currentIndex) {
+                            that.assignTerm();
+                        },
+                        onCanceled: function(event) {
+                            that.modal.trigger('cancel');
+                        },
+                    });
+                }
             },
             assignTerm: function() {
                 this.assignTermError = false;

http://git-wip-us.apache.org/repos/asf/atlas/blob/f85ff28e/dashboardv2/public/js/views/glossary/GlossaryDetailLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/glossary/GlossaryDetailLayoutView.js b/dashboardv2/public/js/views/glossary/GlossaryDetailLayoutView.js
index 2cf5a23..c301ad2 100644
--- a/dashboardv2/public/js/views/glossary/GlossaryDetailLayoutView.js
+++ b/dashboardv2/public/js/views/glossary/GlossaryDetailLayoutView.js
@@ -22,8 +22,9 @@ define(['require',
     'utils/Utils',
     'utils/Messages',
     'utils/Globals',
-    'utils/CommonViewFunction'
-], function(require, Backbone, GlossaryDetailLayoutViewTmpl, Utils, Messages, Globals, CommonViewFunction) {
+    'utils/CommonViewFunction',
+    'collection/VGlossaryList'
+], function(require, Backbone, GlossaryDetailLayoutViewTmpl, Utils, Messages, Globals, CommonViewFunction, VGlossaryList) {
     'use strict';
 
     var GlossaryDetailLayoutView = Backbone.Marionette.LayoutView.extend(
@@ -306,13 +307,24 @@ define(['require',
             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("displayName");
+                                }
+                            });
+                        }
+                    }
                     var view = new AssignTermLayoutView({
                         categoryData: that.data,
                         isCategoryView: that.isCategoryView,
                         callback: function() {
                             that.getData();
                         },
-                        glossaryCollection: that.glossaryCollection
+                        glossaryCollection: glossary
                     });
                     view.modal.on('ok', function() {
                         that.hideLoader();
@@ -322,13 +334,24 @@ define(['require',
             onClickAddCategoryBtn: 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("displayName");
+                                }
+                            });
+                        }
+                    }
                     var view = new AssignTermLayoutView({
                         termData: that.data,
                         isTermView: that.isTermView,
                         callback: function() {
                             that.getData();
                         },
-                        glossaryCollection: that.glossaryCollection
+                        glossaryCollection: glossary
                     });
                     view.modal.on('ok', function() {
                         that.hideLoader();

http://git-wip-us.apache.org/repos/asf/atlas/blob/f85ff28e/dashboardv2/public/js/views/glossary/GlossaryLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/glossary/GlossaryLayoutView.js b/dashboardv2/public/js/views/glossary/GlossaryLayoutView.js
index 852f429..28b79e3 100644
--- a/dashboardv2/public/js/views/glossary/GlossaryLayoutView.js
+++ b/dashboardv2/public/js/views/glossary/GlossaryLayoutView.js
@@ -365,7 +365,6 @@ define(['require',
                 if (this.value && this.value.viewType) {
                     this.viewType = this.value.viewType;
                 }
-                this.setValues();
                 if (this.guid && this.value && ((this.value.fromView && this.value.fromView) || (this.value.updateView))) {
                     var $tree = this.ui[this.viewType == "term" ? "termTree" : "categoryTree"],
                         node = $tree.jstree(true).get_node(this.guid);
@@ -383,6 +382,8 @@ define(['require',
                         });
                         this.glossaryCollection.trigger("update:details", { isGlossaryUpdate: this.value.gType == "glossary" });
                     }
+                } else {
+                    this.setValues();
                 }
                 if (options.isTrigger) {
                     this.triggerUrl();
@@ -406,6 +407,9 @@ define(['require',
                                     return obj != "NoAction" ? true : false;
                                 }
                             },
+                            "search": {
+                                "show_only_matches": true
+                            },
                             "core": {
                                 "data": function(node, cb) {
                                     if (node.id === "#") {
@@ -470,6 +474,10 @@ define(['require',
                                 } else if (type == that.viewType) {
                                     that.triggerUrl();
                                 }
+                            }).on("search.jstree", function(e, data) {
+                                createAction(_.extend({}, options, data));
+                            }).on("clear_search.jstree", function(e, data) {
+                                createAction(_.extend({}, options, data));
                             }).bind('loaded.jstree', function(e, data) {
                                 if (that.query[type].isNodeNotFoundAtLoad == true) {
                                     treeLoaded({ "$el": $el, "type": type });

http://git-wip-us.apache.org/repos/asf/atlas/blob/f85ff28e/dashboardv2/public/js/views/search/SearchResultLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/search/SearchResultLayoutView.js b/dashboardv2/public/js/views/search/SearchResultLayoutView.js
index ccc147e..9eb1954 100644
--- a/dashboardv2/public/js/views/search/SearchResultLayoutView.js
+++ b/dashboardv2/public/js/views/search/SearchResultLayoutView.js
@@ -372,6 +372,9 @@ define(['require',
                     skipDefaultError: true,
                     sort: false,
                     success: function(dataOrCollection, response) {
+                        if (that.isDestroyed) {
+                            return;
+                        }
                         Globals.searchApiCallRef = undefined;
                         var isFirstPage = that.offset === 0,
                             dataLength = 0,