| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313 | define([ "require", "backbone", "hbs!tmpl/graph/LineageLayoutView_tmpl", "collection/VLineageList", "models/VEntity", "utils/Utils", "LineageHelper", "d3", "dagreD3", "d3-tip", "utils/Enums", "utils/UrlLinks", "utils/Globals", "utils/CommonViewFunction", "platform", "jquery-ui" ], function(require, Backbone, LineageLayoutViewtmpl, VLineageList, VEntity, Utils, LineageHelper, d3, dagreD3, d3Tip, Enums, UrlLinks, Globals, CommonViewFunction, platform) {    "use strict";    var LineageLayoutView = Backbone.Marionette.LayoutView.extend({        _viewName: "LineageLayoutView",        template: LineageLayoutViewtmpl,        className: "resizeGraph",        regions: {},        ui: {            graph: ".graph",            checkHideProcess: "[data-id='checkHideProcess']",            checkDeletedEntity: "[data-id='checkDeletedEntity']",            selectDepth: 'select[data-id="selectDepth"]',            filterToggler: '[data-id="filter-toggler"]',            settingToggler: '[data-id="setting-toggler"]',            searchToggler: '[data-id="search-toggler"]',            boxClose: '[data-id="box-close"]',            lineageFullscreenToggler: '[data-id="fullScreen-toggler"]',            filterBox: ".filter-box",            searchBox: ".search-box",            settingBox: ".setting-box",            lineageTypeSearch: '[data-id="typeSearch"]',            searchNode: '[data-id="searchNode"]',            nodeDetailTable: '[data-id="nodeDetailTable"]',            showOnlyHoverPath: '[data-id="showOnlyHoverPath"]',            showTooltip: '[data-id="showTooltip"]',            saveSvg: '[data-id="saveSvg"]',            resetLineage: '[data-id="resetLineage"]',            onZoomIn: '[data-id="zoom-in"]',            labelFullName: '[data-id="labelFullName"]',            onZoomOut: '[data-id="zoom-out"]'        },        templateHelpers: function() {            return {                width: "100%",                height: "100%"            };        },        events: function() {            var events = {};            return events["click " + this.ui.checkHideProcess] = "onCheckUnwantedEntity", events["click " + this.ui.checkDeletedEntity] = "onCheckUnwantedEntity",             events["change " + this.ui.selectDepth] = "onSelectDepthChange", events["click " + this.ui.filterToggler] = "onClickFilterToggler",             events["click " + this.ui.boxClose] = "toggleBoxPanel", events["click " + this.ui.settingToggler] = "onClickSettingToggler",             events["click " + this.ui.lineageFullscreenToggler] = "onClickLineageFullscreenToggler",             events["click " + this.ui.searchToggler] = "onClickSearchToggler", events["click " + this.ui.saveSvg] = "onClickSaveSvg",             events["click " + this.ui.resetLineage] = "onClickResetLineage", events["click " + this.ui.onZoomIn] = "onClickZoomIn",             events["click " + this.ui.onZoomOut] = "onClickZoomOut", events["change " + this.ui.labelFullName] = "onClickLabelFullName",             events;        },        initialize: function(options) {            _.extend(this, _.pick(options, "processCheck", "guid", "entity", "entityName", "entityDefCollection", "actionCallBack", "fetchCollection", "attributeDefs")),             this.collection = new VLineageList(), this.typeMap = {}, this.apiGuid = {}, this.edgeCall,             this.filterObj = {                isProcessHideCheck: !1,                isDeletedEntityHideCheck: !1,                depthCount: ""            }, this.searchNodeObj = {                selectedNode: ""            }, this.labelFullText = !1;        },        onRender: function() {            this.ui.searchToggler.prop("disabled", !0), this.$graphButtonsEl = this.$(".graph-button-group button, select[data-id='selectDepth']"),             this.fetchGraphData(), this.layoutRendered && this.layoutRendered(), this.processCheck && this.hideCheckForProcess(),             this.ui.selectDepth.select2({                data: _.sortBy([ 3, 6, 9, 12, 15, 18, 21 ]),                tags: !0,                dropdownCssClass: "number-input",                multiple: !1            });        },        onShow: function() {            this.$(".fontLoader").show();        },        onClickLineageFullscreenToggler: function(e) {            var icon = $(e.currentTarget).find("i"), panel = $(e.target).parents(".tab-pane").first();            icon.toggleClass("fa-expand fa-compress"), icon.hasClass("fa-expand") ? icon.parent("button").attr("data-original-title", "Full Screen") : icon.parent("button").attr("data-original-title", "Default View"),             panel.toggleClass("fullscreen-mode");            var node = this.$("svg").parent()[0].getBoundingClientRect();            this.LineageHelperRef.updateOptions({                width: node.width,                height: node.height            }), this.calculateLineageDetailPanelHeight();        },        onCheckUnwantedEntity: function(e) {            "checkHideProcess" === $(e.target).data("id") ? this.filterObj.isProcessHideCheck = e.target.checked : this.filterObj.isDeletedEntityHideCheck = e.target.checked,             this.LineageHelperRef.refresh();        },        toggleBoxPanel: function(options) {            var el = options && options.el;            options && options.nodeDetailToggler, options.currentTarget;            this.$el.find(".show-box-panel").removeClass("show-box-panel"), el && el.addClass && el.addClass("show-box-panel"),             this.$("circle.node-detail-highlight").removeClass("node-detail-highlight");        },        toggleLoader: function(element) {            element.hasClass("fa-camera") ? element.removeClass("fa-camera").addClass("fa-spin-custom fa-refresh") : element.removeClass("fa-spin-custom fa-refresh").addClass("fa-camera");        },        toggleDisableState: function(options) {            var el = options.el, disabled = options.disabled;            el && el.prop && (disabled ? el.prop("disabled", disabled) : el.prop("disabled", !el.prop("disabled")));        },        onClickNodeToggler: function(options) {            this.toggleBoxPanel({                el: this.$(".lineage-node-detail"),                nodeDetailToggler: !0            });        },        onClickFilterToggler: function() {            this.toggleBoxPanel({                el: this.ui.filterBox            });        },        onClickSettingToggler: function() {            this.toggleBoxPanel({                el: this.ui.settingBox            });        },        onClickSearchToggler: function() {            this.toggleBoxPanel({                el: this.ui.searchBox            });        },        onSelectDepthChange: function(e, options) {            this.filterObj.depthCount = e.currentTarget.value, this.fetchGraphData({                queryParam: {                    depth: this.filterObj.depthCount                },                legends: !1            });        },        onClickResetLineage: function() {            this.LineageHelperRef.refresh(), this.searchNodeObj.selectedNode = "", this.ui.lineageTypeSearch.data({                refresh: !0            }).val("").trigger("change"), this.ui.labelFullName.prop("checked", !1), this.labelFullText = !1;        },        onClickSaveSvg: function(e, a) {            var that = this;            return that.lineageRelationshipLength >= 1e3 ? void Utils.notifyInfo({                content: "There was an error in downloading lineage: Lineage exceeds display parameters!"            }) : void this.LineageHelperRef.exportLineage();        },        onClickZoomIn: function() {            this.LineageHelperRef.zoomIn();        },        onClickZoomOut: function() {            this.LineageHelperRef.zoomOut();        },        onClickLabelFullName: function() {            this.labelFullText = !this.labelFullText, this.LineageHelperRef.displayFullName({                bLabelFullText: this.labelFullText            });        },        fetchGraphData: function(options) {            var that = this, queryParam = options && options.queryParam || {};            this.$(".fontLoader").show(), this.$("svg>g").hide(), this.toggleDisableState({                el: that.$graphButtonsEl,                disabled: !0            }), this.collection.getLineage(this.guid, {                queryParam: queryParam,                success: function(data) {                    if (!that.isDestroyed) {                        data.legends = !options || options.legends;                        var relationsReverse = data.relations ? data.relations.reverse() : null, lineageMaxRelationCount = 9e3;                        relationsReverse.length > lineageMaxRelationCount && (data.relations = relationsReverse.splice(relationsReverse.length - lineageMaxRelationCount, relationsReverse.length - 1),                         Utils.notifyInfo({                            content: "Lineage exceeds display parameters and hence only upto 9000 relationships from this lineage can be displayed"                        })), that.lineageRelationshipLength = data.relations.length, that.createGraph(data),                         that.renderLineageTypeSearch(data);                    }                },                cust_error: function(model, response) {                    that.noLineage();                },                complete: function() {                    that.$(".fontLoader").hide(), that.$("svg>g").show();                }            });        },        createGraph: function(data) {            var that = this;            $(".resizeGraph").css("height", this.$(".svg").height() + "px"), this.LineageHelperRef = new LineageHelper.default({                entityDefCollection: this.entityDefCollection.fullCollection.toJSON(),                data: data,                el: this.$(".svg")[0],                legendsEl: this.$(".legends")[0],                legends: data.legends,                getFilterObj: function() {                    return {                        isProcessHideCheck: that.filterObj.isProcessHideCheck,                        isDeletedEntityHideCheck: that.filterObj.isDeletedEntityHideCheck                    };                },                isShowHoverPath: function() {                    return that.ui.showOnlyHoverPath.prop("checked");                },                isShowTooltip: function() {                    return that.ui.showTooltip.prop("checked");                },                onPathClick: function(d) {                    if (console.log("Path Clicked"), d.pathRelationObj) {                        var relationshipId = d.pathRelationObj.relationshipId;                        require([ "views/graph/PropagationPropertyModal" ], function(PropagationPropertyModal) {                            new PropagationPropertyModal({                                edgeInfo: d.pathRelationObj,                                relationshipId: relationshipId,                                lineageData: data,                                apiGuid: that.apiGuid,                                detailPageFetchCollection: that.fetchCollection                            });                        });                    }                },                onNodeClick: function(d) {                    that.onClickNodeToggler(), that.updateRelationshipDetails({                        guid: d.clickedData                    }), that.calculateLineageDetailPanelHeight();                },                onLabelClick: function(d) {                    var guid = d.clickedData;                    that.guid == guid ? Utils.notifyInfo({                        html: !0,                        content: "You are already on <b>" + that.entityName + "</b> detail page."                    }) : Utils.setUrl({                        url: "#!/detailPage/" + guid + "?tabActive=lineage",                        mergeBrowserUrl: !1,                        trigger: !0                    });                },                beforeRender: function() {                    that.$(".fontLoader").show(), that.toggleDisableState({                        el: that.$graphButtonsEl,                        disabled: !0                    });                },                afterRender: function() {                    that.$(".fontLoader").hide(), data.relations.length && that.toggleDisableState({                        el: that.$graphButtonsEl,                        disabled: !1                    });                }            });        },        noLineage: function() {            this.$(".fontLoader").hide(), this.$(".depth-container").hide(), this.$("svg").html('<text x="50%" y="50%" alignment-baseline="middle" text-anchor="middle">No lineage data found</text>'),             this.actionCallBack && this.actionCallBack();        },        hideCheckForProcess: function() {            this.$(".hideProcessContainer").hide();        },        renderLineageTypeSearch: function(data) {            var that = this;            return new Promise(function(resolve, reject) {                try {                    var typeStr = "<option></option>";                    _.isEmpty(data) || _.each(data.guidEntityMap, function(obj, index) {                        var nodeData = that.LineageHelperRef.getNode(obj.guid);                        (that.filterObj.isProcessHideCheck || that.filterObj.isDeletedEntityHideCheck) && nodeData && (nodeData.isProcess || nodeData.isDeleted) || (typeStr += '<option value="' + obj.guid + '">' + obj.displayText + "</option>");                    }), that.ui.lineageTypeSearch.html(typeStr), that.initilizelineageTypeSearch(),                     resolve();                } catch (e) {                    console.log(e), reject(e);                }            });        },        initilizelineageTypeSearch: function() {            var that = this;            this.ui.lineageTypeSearch.select2({                closeOnSelect: !0,                placeholder: "Select Node"            }).on("change.select2", function(e) {                if (e.stopPropagation(), e.stopImmediatePropagation(), that.ui.lineageTypeSearch.data("refresh")) that.ui.lineageTypeSearch.data("refresh", !1); else {                    var selectedNode = $('[data-id="typeSearch"]').val();                    that.searchNodeObj.selectedNode = selectedNode, that.LineageHelperRef.searchNode({                        guid: selectedNode                    });                }            }), this.searchNodeObj.selectedNode && (this.ui.lineageTypeSearch.val(this.searchNodeObj.selectedNode),             this.ui.lineageTypeSearch.trigger("change.select2"));        },        updateRelationshipDetails: function(options) {            var that = this, guid = options.guid, initialData = that.LineageHelperRef.getNode(guid);            if (void 0 !== initialData) {                var typeName = initialData.typeName || guid, attributeDefs = initialData && initialData.entityDef ? initialData.entityDef.attributeDefs : null;                this.$("[data-id='typeName']").text(typeName), this.entityModel = new VEntity({});                var config = {                    guid: "guid",                    typeName: "typeName",                    name: "name",                    qualifiedName: "qualifiedName",                    owner: "owner",                    createTime: "createTime",                    status: "status",                    classificationNames: "classifications",                    meanings: "term"                }, data = {};                _.each(config, function(valKey, key) {                    var val = initialData[key];                    _.isUndefined(val) && initialData.attributes && initialData.attributes[key] && (val = initialData.attributes[key]),                     val && (data[valKey] = val);                }), this.ui.nodeDetailTable.html(CommonViewFunction.propertyTable({                    scope: this,                    valueObject: data,                    attributeDefs: attributeDefs,                    sortBy: !1                }));            }        },        calculateLineageDetailPanelHeight: function() {            var $parentContainer = $("#tab-lineage .resizeGraph"), $panel = $parentContainer.find(".fix-box"), $parentHeight = $parentContainer.find(".fix-box, tbody").removeAttr("style").height() - 48, $tBody = $panel.find("tbody"), panelHeight = $tBody.height() + 100;            $parentHeight < panelHeight && (panelHeight = $parentHeight), $panel.css("height", panelHeight + "px"),             $tBody.css("height", "100%");        }    });    return LineageLayoutView;});
 |