define([ "require", "hbs!tmpl/search/tree/BusinessMetadataTreeLayoutView_tmpl", "utils/Utils", "utils/Messages", "utils/Globals", "utils/UrlLinks", "utils/CommonViewFunction", "collection/VSearchList", "collection/VGlossaryList", "utils/Enums", "jstree" ], function(require, BusinessMetadataTreeLayoutViewTmpl, Utils, Messages, Globals, UrlLinks, CommonViewFunction, VSearchList, VGlossaryList, Enums) { "use strict"; var BusinessMetadataTreeLayoutView = Marionette.LayoutView.extend({ template: BusinessMetadataTreeLayoutViewTmpl, regions: {}, ui: { refreshTree: '[data-id="refreshTree"]', businessMetadataSearchTree: '[data-id="businessMetadataSearchTree"]', createBusinessMetadata: '[data-id="createBusinessMetadata"]', businessMetadataTreeLoader: '[data-id="businessMetadataTreeLoader"]' }, templateHelpers: function() { return { apiBaseUrl: UrlLinks.apiBaseUrl }; }, events: function() { var events = {}, that = this; return events["click " + this.ui.refreshTree] = function(e) { that.changeLoaderState(!0), that.ui.refreshTree.attr("disabled", !0).tooltip("hide"), e.stopPropagation(), that.refresh(); }, events["click " + this.ui.createBusinessMetadata] = function(e) { e.stopPropagation(), that.triggerUrl("#!/administrator?tabActive=bm"); }, events; }, initialize: function(options) { this.options = options, _.extend(this, _.pick(options, "typeHeaders", "guid", "searchVent", "entityDefCollection", "enumDefCollection", "businessMetadataDefCollection", "searchTableColumns", "searchTableFilters", "metricCollection")), this.bindEvents(); }, onRender: function() { this.changeLoaderState(!0), this.renderBusinessMetadataTree(), this.changeLoaderState(!1); }, bindEvents: function() { var that = this; this.listenTo(this.businessMetadataDefCollection.fullCollection, "reset add remove", function() { this.ui.businessMetadataSearchTree.jstree(!0) ? that.ui.businessMetadataSearchTree.jstree(!0).refresh() : this.renderBusinessMetadataTree(); }, this), $("body").on("click", ".businessMetadataPopoverOptions li", function(e) { that.$(".businessMetadataPopover").popover("hide"), that[$(this).find("a").data("fn") + "BusinessMetadata"](e); }); }, changeLoaderState: function(showLoader) { showLoader ? (this.ui.businessMetadataSearchTree.hide(), this.ui.businessMetadataTreeLoader.show()) : (this.ui.businessMetadataSearchTree.show(), this.ui.businessMetadataTreeLoader.hide()); }, createBusinessMetadataAction: function() { Utils.generatePopover({ el: this.$el, contentClass: "businessMetadataPopoverOptions", popoverOptions: { selector: ".businessMetadataPopover", content: function() { var liString = ($(this).data("detail"), "
  • View/Edit
  • Search
  • "); return ""; } } }); }, renderBusinessMetadataTree: function() { this.generateSearchTree({ $el: this.ui.businessMetadataSearchTree }); }, manualRender: function(options) { _.extend(this, options), Utils.getUrlState.isBMDetailPage() && this.guid ? this.ui.businessMetadataSearchTree.jstree(!0).select_node(this.guid) : (this.ui.businessMetadataSearchTree.jstree(!0).deselect_all(), this.guid = null); }, onNodeSelect: function(nodeData) { var options = nodeData.node.original, url = "#!/administrator/businessMetadata", trigger = !0, queryParams = Utils.getUrlState.getQueryParams(); void 0 === options.parent && (url += "/" + options.id), queryParams && "bm" === queryParams.from && Utils.getUrlState.getQueryUrl().queyParams[0] === url && (trigger = !1), trigger && this.triggerUrl(url); }, onViewEditBusinessMetadata: function() { var selectedNode = this.ui.businessMetadataSearchTree.jstree("get_selected", !0); if (selectedNode && selectedNode[0]) { selectedNode = selectedNode[0]; var url = "#!/administrator?tabActive=bm"; selectedNode.parent && selectedNode.original && selectedNode.original.name && (url += "&ns=" + selectedNode.parent + "&nsa=" + selectedNode.original.name, this.triggerUrl(url)); } }, triggerUrl: function(url) { Utils.setUrl({ url: url, mergeBrowserUrl: !1, trigger: !0, updateTabState: !0 }); }, refresh: function(options) { var that = this; this.businessMetadataDefCollection.fetch({ silent: !0, complete: function() { that.businessMetadataDefCollection.fullCollection.comparator = function(model) { return model.get("name").toLowerCase(); }, that.businessMetadataDefCollection.fullCollection.sort({ silent: !0 }), that.ui.businessMetadataSearchTree.jstree(!0).refresh(), that.changeLoaderState(!1), that.ui.refreshTree.attr("disabled", !1); } }); }, getBusinessMetadataTree: function(options) { var that = this, businessMetadataList = [], namsSpaceTreeData = that.businessMetadataDefCollection.fullCollection.models, generateNode = function(nodeOptions, attrNode) { var nodeStructure = (attrNode ? null : nodeOptions.get("attributeDefs"), { text: attrNode ? _.escape(nodeOptions.name) : _.escape(nodeOptions.get("name")), name: attrNode ? _.escape(nodeOptions.name) : _.escape(nodeOptions.get("name")), type: "businessMetadata", id: attrNode ? _.escape(nodeOptions.name) : nodeOptions.get("guid"), icon: attrNode ? "fa fa-file-o" : "fa fa-folder-o", children: [], state: { selected: nodeOptions.get("guid") === that.guid }, gType: "BusinessMetadata", model: nodeOptions }); return nodeStructure; }; _.each(namsSpaceTreeData, function(filterNode) { businessMetadataList.push(generateNode(filterNode)); }); return businessMetadataList; }, generateSearchTree: function(options) { var $el = options && options.$el, that = (options && options.type, this), getEntityTreeConfig = function(opt) { return { plugins: [ "search", "core", "sort", "conditionalselect", "changed", "wholerow", "node_customize" ], conditionalselect: function(node) { var type = node.original.type; return "businessMetadataFolder" != type || !node.children.length; }, state: { opened: !0 }, search: { show_only_matches: !0, case_sensitive: !1 }, node_customize: { default: function(el, node) { var aTag = $(el).find(">a.jstree-anchor"); aTag.append("" + aTag.text() + ""), "#" === node.parent ? $(el).append('
    ') : $(el).append('
    '); } }, core: { multiple: !1, data: function(node, cb) { "#" === node.id && cb(that.getBusinessMetadataTree()); } } }; }; $el.jstree(getEntityTreeConfig({ type: "" })).on("open_node.jstree", function(e, data) { that.isTreeOpen = !0; }).on("select_node.jstree", function(e, data) { that.onNodeSelect(data); }).on("search.jstree", function(nodes, str, res) { 0 === str.nodes.length ? ($el.jstree(!0).hide_all(), $el.parents(".panel").addClass("hide")) : $el.parents(".panel").removeClass("hide"); }).on("hover_node.jstree", function(nodes, str, res) { var aFilter = that.$("#" + str.node.a_attr.id), filterOffset = aFilter.find(">.jstree-icon").offset(); that.$(".tree-tooltip").removeClass("show"), setTimeout(function() { aFilter.hasClass("jstree-hovered") && ($(":hover").last().hasClass("jstree-hovered") || $(":hover").last().parent().hasClass("jstree-hovered")) && filterOffset.top && filterOffset.left && aFilter.find(">span.tree-tooltip").css({ top: "calc(" + filterOffset.top + "px - 45px)", left: "24px" }).addClass("show"); }, 1200); }).on("dehover_node.jstree", function(nodes, str, res) { that.$(".tree-tooltip").removeClass("show"); }); } }); return BusinessMetadataTreeLayoutView; });