dashboardv3/public/js/views/search/tree/RelationshipSearchTreeLayoutView.js (279 lines of code) (raw):

/** * 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. */ define([ "require", "hbs!tmpl/search/tree/RelationshipLayoutView_tmpl", "utils/Utils", "utils/Globals", "utils/UrlLinks", "utils/CommonViewFunction", 'utils/Enums', "jstree" ], function(require, RelationshipLayoutViewTmpl, Utils, Globals, UrlLinks, CommonViewFunction, Enums) { "use strict"; var RelationshipSearchTreeLayoutView = Marionette.LayoutView.extend({ template: RelationshipLayoutViewTmpl, regions: {}, ui: { refreshTree: '[data-id="refreshTree"]', relationshipSearchTree: '[data-id="relationshipSearchTree"]', relationshipTreeLoader: '[data-id="relationshipTreeLoader"]' }, templateHelpers: function() { return {}; }, events: function() { var events = {}, that = this; events["click " + this.ui.refreshTree] = function(e) { that.changeLoaderState(true); that.ui.refreshTree.attr("disabled", true).tooltip("hide"); e.stopPropagation(); that.refresh(); }; return events; }, bindEvents: function() { var that = this; this.listenTo(this.relationshipDefCollection, 'reset', function() { that.relationshipTreeRefresh(); that.changeLoaderState(false); that.ui.refreshTree.attr("disabled", false); }); }, initialize: function(options) { this.options = options; _.extend( this, _.pick( options, "typeHeaders", "searchVent", "entityDefCollection", "enumDefCollection", "relationshipDefCollection", "searchTableColumns", "searchTableFilters", "metricCollection" ) ); this.relationshipId = null; this.bindEvents(); }, onRender: function() { this.changeLoaderState(true); this.renderRelationshipTree(); this.changeLoaderState(false); }, changeLoaderState: function(showLoader) { if (showLoader) { this.ui.relationshipSearchTree.hide(); this.ui.relationshipTreeLoader.show(); } else { this.ui.relationshipSearchTree.show(); this.ui.relationshipTreeLoader.hide(); } }, fetchCollection: function(e) { this.relationshipDefCollection.fetch({ reset: true }); }, relationshipTreeRefresh: function() { if (this.ui.relationshipSearchTree.jstree(true)) { this.ui.relationshipSearchTree.jstree(true).refresh(); } else { this.renderRelationshipTree(); } }, renderRelationshipTree: function() { var that = this; this.generateSearchTree({ $el: that.ui.relationshipSearchTree }); }, manualRender: function(options) { var that = this; _.extend(this.options, options); if (this.options.value === undefined) { this.options.value = {}; } if (!this.options.value.relationshipName) { this.ui.relationshipSearchTree.jstree(true).deselect_all(); this.relationshipId = null; } else { if (that.options.value.relationshipName) { this.fromManualRender = true; if (this.relationshipId) { this.ui.relationshipSearchTree.jstree(true).deselect_node(this.relationshipId); } //this.relationshipId = Globals[that.options.value.relationshipName].guid; this.ui.relationshipSearchTree.jstree(true).select_node(this.relationshipId); } else if (that.options.value.relationshipName !== this.relationshipId) { var dataFound = this.relationshipDefCollection.fullCollection.find(function(obj) { return obj.get("name") === that.options.value.relationshipName; }); if (dataFound) { if ((this.relationshipId && this.relationshipId !== dataFound.get("guid")) || this.relationshipId === null) { if (this.relationshipId) { this.ui.relationshipSearchTree.jstree(true).deselect_node(this.relationshipId); } this.fromManualRender = true; this.relationshipId = dataFound.get("guid"); this.ui.relationshipSearchTree.jstree(true).select_node(dataFound.get("guid")); } } } } }, refresh: function() { this.relationshipId = null; this.fetchCollection({ reset: true }); }, onNodeSelect: function(options) { var that = this, type, name = options.node.original.name, selectedNodeId = options.node.id, getUrl = Utils.getUrlState.isRelationTab(), params = { searchType: "basic", dslChecked: false }, values = this.options.value; Globals.fromRelationshipSearch = true; if (!getUrl) { that.relationshipId = null; } if (that.relationshipId != selectedNodeId) { that.relationshipId = selectedNodeId; params["relationshipName"] = name; } else { that.relationshipId = params["relationshipName"] = null; that.ui.relationshipSearchTree.jstree(true).deselect_all(true); if (!that.options.value.relationshipName) { that.showDefaultPage(); return; } } if(values && (values.type || values.tag)){ values.attributes = null; values.uiParameters = null; } var searchParam = _.extend({}, values, params); this.triggerSearch(searchParam); }, triggerSearch: function(params, url) { var searchUrl = url ? url : '#!/relationship/relationshipSearchResult'; Utils.setUrl({ url: searchUrl, urlParams: params, mergeBrowserUrl: false, trigger: true, updateTabState: true }); }, getRelationshipTree: function(options) { var that = this, collection = (options && options.collection) || this.relationshipDefCollection.fullCollection, listofNodes = [], relationshipName = that.options && that.options.value ? that.options.value.relationshipName : "", generateNode = function(nodeOptions, options) { var nodeStructure = { text: _.escape(nodeOptions.name), name: _.escape(nodeOptions.name), id: nodeOptions.model.get("guid"), icon: "fa fa-link", gType: "Relationship", state: { disabled: false, selected: (nodeOptions.name === relationshipName) ? true : false, opened: true } } return nodeStructure; } collection.each(function(model) { var nodeDetails = { name: _.escape(model.get('name')), model: model }, getParentNodeDetails = generateNode(nodeDetails, model); listofNodes.push(getParentNodeDetails); }); return listofNodes; }, generateSearchTree: function(options) { var $el = options && options.$el, type = options && options.type, that = this, getEntityTreeConfig = function(opt) { return { plugins: ["search", "core", "sort", "conditionalselect", "changed", "wholerow", "node_customize"], conditionalselect: function(node) { var type = node.original.type; if (type === "RELATIONSHIP") { if (node.children.length) { return false; } else { return true; } } else { return true; } }, state: { opened: true }, search: { show_only_matches: true, case_sensitive: false }, node_customize: { default: function(el, node) { if (node.parent === "#") { $(el).append('<div class="tools"><i class="fa"></i></div>'); } else { $(el).append('<div class="tools"><i class="fa fa-ellipsis-h businessMetadataPopover" rel="popover"></i></div>'); } } }, core: { multiple: false, data: function(node, cb) { if (node.id === "#") { cb(that.getRelationshipTree()); } } } }; }; $el.jstree( getEntityTreeConfig({ type: "" }) ).on("open_node.jstree", function(e, data) { that.isTreeOpen = true; }).on("select_node.jstree", function(e, data) { if (that.fromManualRender !== true) { that.onNodeSelect(data); } else { that.fromManualRender = false; } }).on("search.jstree", function(nodes, str, res) { if (str.nodes.length === 0) { $el.jstree(true).hide_all(); $el.parents(".panel").addClass("hide"); } else { $el.parents(".panel").removeClass("hide"); } }).on("hover_node.jstree", function(nodes, str, res) { var aTag = that.$("#" + str.node.a_attr.id), tagOffset = aTag.find(">.jstree-icon").offset(); that.$(".tree-tooltip").removeClass("show"); setTimeout(function() { if (aTag.hasClass("jstree-hovered") && tagOffset.top && tagOffset.left) { aTag.find(">span.tree-tooltip").css({ top: "calc(" + tagOffset.top + "px - 45px)", left: "24px" }).addClass("show"); } }, 1200); }).on("dehover_node.jstree", function(nodes, str, res) { that.$(".tree-tooltip").removeClass("show"); }); } }); return RelationshipSearchTreeLayoutView; });