SmartIT_Extensions/BMC/smart-it-full-helix/scripts/app/resource/rs-resource-preview.js

220 lines
12 KiB
JavaScript

"use strict";
/**
* Created by viktor.shevchenko on 7/15/15.
*/
(function () {
'use strict';
angular.module('resourceModule')
.directive('rsResourcePreview', ['events', 'relationModel', 'objectValueMapperService', '$sce',
function (events, relationModel, objectValueMapperService, $sce) {
return {
restrict: 'EA',
replace: true,
templateUrl: 'views/resource/rs-resource-preview.html',
scope: {
savedTemplate: '=',
saveToTicket: '&',
linkAsDuplicateOf: '&',
saveAndResolve: '&',
deleteFromTicket: '&',
removeLinkedItem: '&',
context: '=',
resourcePreviewItem: '=',
hideEditButton: '='
},
link: function (scope, element, attr) {
var invalidKAStatusForPreview = ["Cancelled", "Retire Approval", "Retired", "Closed Version"];
scope.saveable = angular.isDefined(attr.saveable) ? scope.$parent.$eval(attr.saveable) : false;
scope.editMode = false;
scope.isTitleMultiline = false;
if (scope.context.id === 'eschat') {
scope.openKALinkInNewTab = true;
}
var directiveLookupTable = { knowledge: 'preview-knowledge-article' }, container = element.parents('.app__content-frame'), profileSublayer = container.find('.resource-slice__fade-out'), resourcePreviewOpenedClass = 'resource-preview-opened', tabs = container.find('.nav-tabs li'), body = angular.element(document.body);
scope.$watch('$location.path', function () {
var isPathChanged = scope.context.isDraft ? false : true;
scope.closePreview(isPathChanged);
});
function profileSublayerClickHandler() {
scope.closePreview();
scope.$apply();
}
function tabsClickHandler() {
if (element.is(':visible')) {
return;
}
scope.closePreview();
scope.$apply();
}
function rsResourcePreviewKeydownHandler() {
var escKeyNumber = 27;
if (event.which === escKeyNumber) {
scope.closePreview();
scope.$apply();
}
}
profileSublayer.on('click', profileSublayerClickHandler);
tabs.on('click', tabsClickHandler);
body.on('keydown.rsResourcePreview', rsResourcePreviewKeydownHandler);
scope.getPreviewSource = function () {
function checkMidtierUrl() {
var url = localStorage.getItem('midtierUrl');
var lastSlashIndex = url.lastIndexOf('/');
if (lastSlashIndex === url.length - 1) {
url = url.substr(0, lastSlashIndex);
}
if (url.search('/arsys') > -1) {
return url;
}
return url + '/arsys';
}
var midtierUrl = localStorage.getItem('midtierUrl') ? checkMidtierUrl() : null, path = 'goto', formName = '', context;
var formView = 'SV_View';
var homeServer = localStorage.getItem('homeServer');
var origin = window.location.origin;
var guid = scope.resourcePreviewItem.id;
if (scope.resourcePreviewItem.type === EntityVO.TYPE_INCIDENT) {
formName = 'SHR:SV_TicketDisplay/SV_TicketDisplay';
context = 'Incident';
}
else if (scope.resourcePreviewItem.type === EntityVO.TYPE_WORKORDER) {
formName = 'SHR:SV_TicketDisplay/SV_TicketDisplay';
context = 'Work Order';
}
else if (scope.resourcePreviewItem.type === EntityVO.TYPE_PROBLEM) {
formName = 'SHR:SV_TicketDisplay/SV_TicketDisplay';
context = 'Problem Investigation';
}
else if (scope.resourcePreviewItem.type === EntityVO.TYPE_KNOWNERROR) {
formName = 'SHR:SV_TicketDisplay/SV_TicketDisplay';
context = 'Known Error';
}
if (homeServer) {
path = 'forms/' + homeServer;
}
var finalUrl = midtierUrl + '/pwa/#/' + path + '/' + formName
+ '?origin=' + origin + '&mode=GET&context=PREVIEW';
if (context) {
finalUrl += '&targetForm=' + context + '&targetView=' + formView + '&targetId=' + guid;
}
else {
finalUrl += '&guid=' + guid;
}
return $sce.trustAsResourceUrl(finalUrl);
};
scope.closePreview = function (isPathChanged) {
if (!objectValueMapperService.isShelvedParentEmpty() && !isPathChanged) {
objectValueMapperService.unshelveParent(scope.context && scope.context.type);
}
if (!scope.resourcePreviewItem) {
return;
}
if (scope.resourcePreviewItem.type === EntityVO.TYPE_KNOWLEDGE) {
scope.$emit(events.KNOWLEDGE_ARTICLE_GETTING_EDIT_STATUS, false);
}
scope.resourcePreviewItem = null;
};
scope.edit = function (type) {
var editDirectiveElement = element.find('div[' + directiveLookupTable[type] + ']');
if (editDirectiveElement) {
editDirectiveElement.trigger(events.CHANGE_TO_EDIT_MODE);
}
};
scope.$on(events.TOGGLE_KNOWLEDGE_ARTICLE_EDIT_MODE, function () {
scope.editMode = !scope.editMode;
});
scope.$on(events.TICKET_PROFILE_RESEND_EVENT, function (event, resend) {
event.stopPropagation();
scope.$broadcast(resend.eventName, resend.eventData);
});
scope.$on(events.KNOWLEDGE_ARTICLE_PREVIEW_LOADED, function (event, data) {
scope.articleFlagged = data.article.flagged;
scope.currentArticle = data.article;
});
scope.$on(events.MULTILINE_CONTENT_CHANGED, function (event, data) {
scope.isTitleMultiline = data.isContentMultiline;
});
scope.addComment = function () {
scope.$broadcast(events.SET_FOCUS_TO_ACTIVITY_INPUT);
};
scope.setFlag = function (flag) {
if ((scope.currentArticle.accessMappings.flagEditAllowed && flag) || (scope.currentArticle.accessMappings.unflagEditAllowed && !flag)) {
scope.$broadcast(events.ADD_FLAG_NOTE, { flag: flag });
}
};
scope.$watch('resourcePreviewItem', function (resourcePreviewItem) {
scope.editMode = false;
if (!resourcePreviewItem) {
container.removeClass(resourcePreviewOpenedClass);
}
else {
scope.contextRelations = relationModel.cache[scope.context.id];
setActionDeleteFlag();
setSaveAnsDeleteFlag();
setSaveAndResolveFlag();
disableOptionsForKAPreview(resourcePreviewItem);
container.addClass(resourcePreviewOpenedClass);
}
});
scope.$watchCollection('contextRelations', function () {
setActionDeleteFlag();
}, true);
function setActionDeleteFlag() {
if (!scope.resourcePreviewItem) {
return;
}
scope.resourcePreviewActionDelete = !!(_.find(scope.contextRelations, { id: scope.resourcePreviewItem.id }));
}
function disableOptionsForKAPreview(resourcePreviewItem) {
scope.showKAOptions = true;
if (resourcePreviewItem.type === EntityVO.TYPE_KNOWLEDGE) {
var kaStatus = resourcePreviewItem.additionalInformation && resourcePreviewItem.additionalInformation.status
&& (_.isObject(resourcePreviewItem.additionalInformation.status)
? resourcePreviewItem.additionalInformation.status.value : resourcePreviewItem.additionalInformation.status.value);
if (!kaStatus && resourcePreviewItem.status) {
kaStatus = resourcePreviewItem.status;
}
if (invalidKAStatusForPreview.indexOf(kaStatus) !== -1) {
scope.showKAOptions = false;
}
}
}
function setSaveAnsDeleteFlag() {
if (scope.context.type === EntityVO.TYPE_KNOWLEDGE) {
scope.showSaveAndDelete = false;
}
else {
scope.showSaveAndDelete = scope.context.accessMappings.relationsEditAllowed;
}
}
function setSaveAndResolveFlag() {
scope.showSaveAndResolve = true;
if (scope.context.type === EntityVO.TYPE_INCIDENT) {
if (scope.context.status) {
if ((scope.context.status.value.toLowerCase() === EntityVO.STATUS_RESOLVED) || (scope.context.status.value.toLowerCase() === EntityVO.STATUS_CLOSED)) {
scope.showSaveAndResolve = false;
}
}
}
}
element.on('$destroy', function () {
profileSublayer.off('click', profileSublayerClickHandler);
body.off('keydown.rsResourcePreview');
container.removeClass(resourcePreviewOpenedClass);
});
scope.$on('$destroy', function () {
profileSublayer.off('click', profileSublayerClickHandler);
tabs.off('click', tabsClickHandler);
body.off('keydown.rsResourcePreview', rsResourcePreviewKeydownHandler);
profileSublayerClickHandler(); //clear all the shelving object if user moves to another screen
});
scope.$on(events.CLOSE_TICKET_PREVIEW, function () {
scope.closePreview();
scope.$apply();
});
}
};
}
]);
}());