SmartIT_Extensions/BMC/smart-it-full-helix/scripts/app/ticket/preview-ticket-directives.js

198 lines
8.5 KiB
JavaScript

"use strict";
/**
* Created by viktor.shevchenko on 10/16/2014.
*/
(function () {
'use strict';
angular.module('ticketModule')
.directive('previewIncident', [function () {
return {
restrict: 'A',
templateUrl: 'views/ticket/incident-details-v2.html',
scope: {},
controller: 'PreviewTicketController',
link: function (scope, element, attr) {
attr.$observe('previewIncident', function (incidentId) {
scope.init(incidentId, EntityVO.TYPE_INCIDENT);
});
}
};
}])
.directive('previewWorkOrder', [function () {
return {
restrict: 'A',
templateUrl: 'views/ticket/workorder-details-v2.html',
scope: {},
controller: 'PreviewTicketController',
link: function (scope, element, attr) {
attr.$observe('previewWorkOrder', function (workOrderId) {
scope.init(workOrderId, EntityVO.TYPE_WORKORDER);
});
}
};
}])
.directive('previewTask', [function () {
return {
restrict: 'A',
templateUrl: 'views/ticket/task-details-v2.html',
scope: {},
controller: 'PreviewTicketController',
link: function (scope, element, attr) {
attr.$observe('previewTask', function (taskId) {
scope.init(taskId, EntityVO.TYPE_TASK);
});
}
};
}])
.directive('previewServiceRequest', [function () {
return {
restrict: 'A',
templateUrl: 'views/ticket/service-request-details.html',
scope: {},
controller: 'PreviewTicketController',
link: function (scope, element, attr) {
attr.$observe('previewServiceRequest', function (serviceRequestId) {
scope.init(serviceRequestId, EntityVO.TYPE_SERVICEREQUEST);
});
}
};
}])
.directive('previewSbeRequest', [function () {
return {
restrict: 'A',
templateUrl: 'views/ticket/sbe-request-details.html',
scope: {},
controller: 'PreviewTicketController',
link: function (scope, element, attr) {
attr.$observe('previewSbeRequest', function (sbeRequestId) {
scope.init(sbeRequestId, EntityVO.TYPE_SBEREQUEST);
});
}
};
}])
.directive('previewChangeRequest', [function () {
return {
restrict: 'A',
templateUrl: 'views/ticket/change-details-v2.html',
scope: {},
controller: 'PreviewTicketController',
link: function (scope, element, attr) {
attr.$observe('previewChangeRequest', function (changeRequestId) {
scope.init(changeRequestId, EntityVO.TYPE_CHANGE);
});
}
};
}])
.directive('previewRelease', [function () {
return {
restrict: 'A',
templateUrl: 'views/ticket/release-details.html',
scope: {},
controller: 'PreviewTicketController',
link: function (scope, element, attr) {
attr.$observe('previewRelease', function (releaseRequestId) {
scope.init(releaseRequestId, EntityVO.TYPE_RELEASE);
});
}
};
}])
.directive('previewActivity', [function () {
return {
restrict: 'A',
templateUrl: 'views/ticket/activity-details.html',
scope: {},
controller: 'PreviewTicketController',
link: function (scope, element, attr) {
attr.$observe('previewActivity', function (activityId) {
scope.init(activityId, EntityVO.TYPE_ACTIVITY);
});
}
};
}])
.directive('previewProblem', [function () {
return {
restrict: 'A',
templateUrl: 'views/ticket/problem-details.html',
scope: {},
controller: 'PreviewTicketController',
link: function (scope, element, attr) {
attr.$observe('previewProblem', function (problemId) {
scope.init(problemId, EntityVO.TYPE_PROBLEM);
});
}
};
}])
.directive('previewKnownError', [function () {
return {
restrict: 'A',
templateUrl: 'views/ticket/known-error-details.html',
scope: {},
controller: 'PreviewTicketController',
link: function (scope, element, attr) {
attr.$observe('previewKnownError', function (knownErrorId) {
scope.init(knownErrorId, EntityVO.TYPE_KNOWNERROR);
});
}
};
}])
.directive('previewTicketGeneric', ['$compile', function ($compile) {
return {
restrict: 'E',
template: '<div></div>',
scope: {
ticketType: '=',
ticketId: '=',
newTab: '=',
context: '=?'
},
link: function (scope, $elem) {
var injectedPreviewTicketTypes = [];
function getPreviewDirectiveByTicketType(type) {
var directiveName;
switch (type) {
case EntityVO.TYPE_INCIDENT:
directiveName = 'preview-incident';
break;
case EntityVO.TYPE_KNOWLEDGE:
directiveName = 'preview-knowledge-article';
break;
case EntityVO.TYPE_WORKORDER:
directiveName = 'preview-work-order';
break;
case EntityVO.TYPE_OUTAGE:
directiveName = 'preview-outage';
break;
case EntityVO.TYPE_KNOWNERROR:
directiveName = 'preview-known-error';
break;
case EntityVO.TYPE_PROBLEM:
directiveName = 'preview-problem';
break;
}
return directiveName;
}
function renderTicketPreview(type) {
var previewHTML = '<div is-full-version="false" class="resource-preview__container" ng-class="{\'resource-preview_incident\': ticketType === \'incident\', \'resource-preview_wo\': ticketType === \'workorder\'}"></div>';
var previewDirectiveName = getPreviewDirectiveByTicketType(type);
var previewElement = angular.element(previewHTML);
previewElement.attr(previewDirectiveName, '{{ticketId}}');
previewElement.attr('ng-if', 'ticketType === \'' + type + '\'');
if (scope.context && scope.context.type === EntityVO.TYPE_LIVE_CHAT) {
previewElement.attr('is-from-livechat', true);
}
var compiledPreviewElement = $compile(previewElement)(scope);
$elem.append(compiledPreviewElement);
injectedPreviewTicketTypes.push(type);
}
scope.$watch('ticketId', function (newVal) {
if (newVal) {
if (injectedPreviewTicketTypes.indexOf(scope.ticketType) === -1) {
renderTicketPreview(scope.ticketType);
}
}
});
}
};
}]);
}());