"use strict";
(function () {
'use strict';
angular.module('feedModule')
.directive('feedItemEventMessageRenderer', ['l10nModel', 'i18nService', 'metadataModel', '$compile', '$filter', 'approvalService', 'approvalModel', '$sce', function (l10nModel, i18nService, metadataModel, $compile, $filter, approvalService, approvalModel, $sce) {
var profileLinkTemplate = '{displayValue} ';
var urlLinkTemplate = '{displayValue} ';
// tooltip-popup-delay="1" is a rquirement, as tooltip needs to be launche async. When launching sync on click - may cause delay in appearence
var tooltipTemplate = '{displayValue} ';
/**
* Returns html template for entity.
*
* @param {EntityVO} entity
* @returns {String} html string
*/
var entityTemplateFunction = function (entity, event, relatedObject) {
switch (entity.type) {
case EntityVO.TYPE_PERSON:
case EntityVO.TYPE_INCIDENT:
case EntityVO.TYPE_CHANGE:
case EntityVO.TYPE_WORKORDER:
case EntityVO.TYPE_SERVICEREQUEST:
case EntityVO.TYPE_PROBLEM:
case EntityVO.TYPE_KNOWNERROR:
case EntityVO.TYPE_KNOWLEDGE:
case EntityVO.TYPE_RELEASE:
case EntityVO.TYPE_ACTIVITY:
case EntityVO.TYPE_TASK:
case EntityVO.TYPE_EMAIL_LINK:
return profileLinkTemplate;
case EntityVO.TYPE_ASSET:
return profileLinkTemplate;
case EntityVO.TYPE_URL:
return urlLinkTemplate;
case EntityVO.TYPE_INTEGER:
if (event.eventType === "change-collision") {
entity.entityLink = '#/' + relatedObject.type + '/' + relatedObject.id + '/collisions';
return profileLinkTemplate;
}
else {
return tooltipTemplate;
}
break;
case EntityVO.TYPE_PRIORITY:
case EntityVO.TYPE_STATUS:
case EntityVO.TYPE_MILESTONE:
case EntityVO.TYPE_STATUS_REASON:
return '"' + $filter('localizeLabel')(entity.displayValue, entity.type, relatedObject.type) + '"';
case EntityVO.TYPE_TEXT:
return entity.displayValue;
case EntityVO.TYPE_TIME:
// returns humanized duration string
return moment.duration(+entity.displayValue * 1000 - event.createDate.getTime()).humanize();
case EntityVO.TYPE_TIMESTAMP:
// returns humanized date string
return moment(+entity.displayValue).calendar();
default:
return entity.displayValue;
}
};
return {
restrict: 'E',
replace: true,
scope: {
event: '=',
relatedObject: '=',
parentContext: '=',
isUpdateFeed: '='
},
template: '
',
link: function (scope, iElement) {
var event = scope.event, relatedObject = scope.relatedObject;
scope.tooltipHtml = '';
scope.loadingApprovalDialog = false;
scope.showApprovers = function (showClosedTabDefault) {
scope.loadingApprovalDialog = true;
approvalModel.getListOfApprovers(relatedObject).then(function (data) {
approvalService.showApproversDialog(data.approvalList, scope.parentContext, showClosedTabDefault);
}).finally(function () {
scope.loadingApprovalDialog = false;
});
};
function init() {
var entityProps = EntityVO.prototype.getProps().concat('entityLink');
var entities = event.entities.map(function (entity) {
var entityTemplate = entityTemplateFunction(entity, event, relatedObject);
entityProps.forEach(function (property) {
entityTemplate = entityTemplate.toString().replace(new RegExp('{' + property + '}', 'g'), entity[property]);
});
if (entity.type == "person") {
return $sce.getTrustedHtml(entityTemplate);
}
else {
return entityTemplate;
}
});
if (event.recipients.length > 0) {
var recipients = event.recipients.map(function (entity) {
var entityTemplate = entityTemplateFunction(entity, event, relatedObject);
entityProps.forEach(function (property) {
entityTemplate = entityTemplate.toString().replace(new RegExp('{' + property + '}', 'g'), entity[property]);
if (property == "displayValue") {
$sce.getTrustedHtml(entityTemplate);
}
});
return entityTemplate;
});
scope.tooltipHtml = '' + i18nService.getLocalizedString('email.tooltip.headerText') + ':
';
_.forEach(recipients, function (recipient, key) {
scope.tooltipHtml += recipient + (key === recipients.length - 1 ? '' : ', ');
});
scope.tooltipHtml += '
';
}
// check if localized label template is available
var localizedTemplate = l10nModel.getLocalizedMessage(event.messageId) ? l10nModel.getLocalizedMessage(event.messageId).value : event.labelTemplate;
// fill in the placeholders
var messageTemplate = $filter('i18n')(localizedTemplate, entities);
// apply final styling
if (event.isSlaChange() || event.isSlaMet()) {
// find message to colorize ("SLA Alert:")
var endIndex = messageTemplate.indexOf(':') + 1;
var stringToPaint = messageTemplate.substr(0, endIndex);
// apply specific styles
messageTemplate = messageTemplate.replace(stringToPaint, '' + stringToPaint + ' ');
}
var contents = '' + messageTemplate + '
';
if (((event.messageId <= 65007 && event.messageId >= 65002) || (event.messageId >= 61002 && event.messageId <= 61004)) && !scope.isUpdateFeed && !(scope.parentContext && scope.parentContext instanceof PersonProfileVO)) {
if (event.messageId == 65002) {
contents += ("");
}
else {
contents += ("");
}
contents += (i18nService.getLocalizedString('approval.approversList.labels.showList') + '');
}
iElement.append($compile(contents)(scope));
}
if (!event) {
console.log('No information about system event.');
}
else {
var entityIndex = _.findIndex(event.entities, function (entity) {
return entity.type === EntityVO.TYPE_PRIORITY || entity.type === EntityVO.TYPE_STATUS;
});
if (entityIndex !== -1) {
metadataModel.getMetadataByType(relatedObject.type).then(function () {
init();
});
}
else {
init();
}
}
}
};
}]);
}());