dashboardv2/public/js/views/detail_page/RelationshipDetailPageLayoutView.js (178 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',
'backbone',
'hbs!tmpl/detail_page/RelationshipDetailPageLayoutView_tmpl',
'utils/Utils',
'utils/CommonViewFunction',
'utils/Globals',
'utils/Enums',
'utils/Messages',
'utils/UrlLinks',
'collection/VEntityList'
], function(require, Backbone, RelationshipDetailPageLayoutView, Utils, CommonViewFunction, Globals, Enums, Messages, UrlLinks, VEntityList) {
'use strict';
var RelationshipDetailPageLayoutView = Backbone.Marionette.LayoutView.extend(
/** @lends DetailPageLayoutView */
{
_viewName: 'RelationshipDetailPageLayoutView',
template: RelationshipDetailPageLayoutView,
/** Layout sub regions */
regions: {
RRelationshipDetailTableLayoutView: "#r_relationshipDetailTableLayoutView"
},
/** ui selector cache */
ui: {
title: '[data-id="title"]',
entityIcon: '[data-id="entityIcon"]',
relationshipEnd1: '[data-id="relationshipEnd1"]',
relationshipEnd2: '[data-id="relationshipEnd2"]',
otherAttributes: '[data-id="otherAttributes"]'
},
templateHelpers: function() {},
/** ui events hash */
events: function() {
var events = {};
return events;
},
/**
* intialize a new DetailPageLayoutView Layout
* @constructs
*/
initialize: function(options) {
_.extend(this, _.pick(options, 'value', 'collection', 'id', 'relationshipDefCollection', 'searchVent'));
$('body').addClass("detail-page");
this.collection = new VEntityList([], {});
this.collection.url = UrlLinks.relationApiUrl({ guid: this.id, minExtInfo: true });
this.fetchCollection();
},
bindEvents: function() {
var that = this;
this.listenTo(this.collection, 'reset', function() {
this.relationshipObject = this.collection.first().toJSON();
var collectionJSON = this.relationshipObject.relationship,
name = collectionJSON ? Utils.getName(collectionJSON) : "";
if (collectionJSON) {
this.readOnly = Enums.entityStateReadOnly[collectionJSON.status];
if (name && collectionJSON.typeName) {
name = name + ' (' + _.escape(collectionJSON.typeName) + ')';
}
if (this.readOnly) {
this.$el.addClass('readOnly');
} else {
this.$el.removeClass('readOnly');
}
if (name) {
this.ui.title.show();
var titleName = '<span>' + name + '</span>';
if (this.readOnly) {
titleName += '<button title="Deleted" class="btn btn-action btn-md deleteBtn"><i class="fa fa-trash"></i> Deleted</button>';
}
if (this.readOnly) {
this.ui.entityIcon.addClass('disabled');
} else {
this.ui.entityIcon.removeClass('disabled');
}
this.ui.title.html(titleName);
var entityData = _.extend({}, collectionJSON),
img = this.readOnly ? '<img src="/img/entity-icon/disabled/table.png"/>' : '<img src="/img/entity-icon/table.png"/>';
this.ui.entityIcon.attr('title', _.escape(collectionJSON.typeName)).html(img);
} else {
this.ui.title.hide();
}
}
this.hideLoader();
var obj = {
entity: collectionJSON,
guid: this.id,
entityName: name,
fetchCollection: this.fetchCollection.bind(that),
searchVent: this.searchVent,
attributeDefs: (function() {
return that.getEntityDef(collectionJSON);
})(),
isRelationshipDetailPage: true
}
this.renderRelationshipDetailTableLayoutView(obj);
this.ui.relationshipEnd1.empty().html(this.renderRelationAttributesDetails({
scope: this,
valueObject: collectionJSON.end1,
isRelationshipAttribute: true,
guidHyperLink: true
}));
this.ui.relationshipEnd2.empty().html(this.renderRelationAttributesDetails({
scope: this,
valueObject: collectionJSON.end2,
isRelationshipAttribute: true,
guidHyperLink: true
}));
this.ui.otherAttributes.empty().html(this.renderRelationAttributesDetails({
scope: this,
valueObject: _.pick(collectionJSON, 'createTime', 'createdBy', 'blockedPropagatedClassifications', 'guid', 'label', 'propagateTags', 'propagatedClassifications', 'provenanceType', 'status', 'updateTime', 'updatedBy', 'version'),
isRelationshipAttribute: true,
guidHyperLink: false
}));
}, this);
this.listenTo(this.collection, 'error', function(model, response) {
this.$('.fontLoader-relative').removeClass('show');
if (response.responseJSON) {
Utils.notifyError({
content: response.responseJSON.errorMessage || response.responseJSON.error
});
}
}, this);
},
onRender: function() {
var that = this;
this.bindEvents();
Utils.showTitleLoader(this.$('.page-title .fontLoader'), this.$('.relationshipDetail'));
this.$('.fontLoader-relative').addClass('show'); // to show tab loader
},
manualRender: function(options) {
if (options) {
var oldId = this.id;
_.extend(this, _.pick(options, 'value', 'id'));
if (this.id !== oldId) {
this.collection.url = UrlLinks.relationApiUrl({ guid: this.id, minExtInfo: true });
this.fetchCollection();
}
}
},
onDestroy: function() {
if (!Utils.getUrlState.isRelationshipDetailPage() && !Utils.getUrlState.isDetailPage()) {
$('body').removeClass("detail-page");
}
},
fetchCollection: function() {
this.collection.fetch({ reset: true });
if (this.searchVent) {
this.searchVent.trigger('relationshipList:refresh');
}
},
getEntityDef: function(entityObj) {
if (this.activeEntityDef) {
var data = this.activeEntityDef.toJSON();
var attributeDefs = Utils.getNestedSuperTypeObj({
data: data,
attrMerge: true,
collection: this.relationshipDefCollection
});
return attributeDefs;
} else {
return [];
}
},
hideLoader: function() {
Utils.hideTitleLoader(this.$('.page-title .fontLoader'), this.$('.relationshipDetail'));
},
showLoader: function() {
Utils.showTitleLoader(this.$('.page-title .fontLoader'), this.$('.relationshipDetail'));
},
renderRelationshipDetailTableLayoutView: function(obj) {
var that = this;
require(['views/entity/EntityDetailTableLayoutView'], function(EntityDetailTableLayoutView) {
that.RRelationshipDetailTableLayoutView.show(new EntityDetailTableLayoutView(obj));
});
},
renderRelationAttributesDetails: function(options) {
var table = CommonViewFunction.propertyTable({
scope: options.scope,
valueObject: options.valueObject,
isRelationshipAttribute: options.isRelationshipAttribute,
guidHyperLink: options.guidHyperLink
});
return table;
}
});
return RelationshipDetailPageLayoutView;
});