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

97 lines
4.5 KiB
JavaScript

"use strict";
/*
* Recommended DWP directive - loads dwp catalogs for creating dwp service request from Smart Recorder
*
*/
angular.module('resourceModule')
.directive('rsDwpCatalog', ['smartRecorderModel', 'events',
function (smartRecorderModel, events) {
return {
require: '^rs',
restrict: 'E',
scope: {},
templateUrl: 'views/resource/rs-dwp-catalog.html',
link: function (scope, element, attrs, rsController) {
angular.extend(scope, rsController);
var context = scope.context, state = {
itemLimit: 4,
isDataLoading: false,
watchersOn: false
}, initialItemLimit = 4;
scope.templates = [];
scope.toggleTemplateSelection = function (template) {
if (scope.savedTemplateId !== template.id) {
selectTemplate(template);
}
else {
unSelectTemplate();
}
};
function init() {
var searchTemplatesParams = {
searchText: context.summary || scope.summarySearchText
};
if (!searchTemplatesParams.searchText) {
scope.templates = [];
return;
}
state.itemLimit = initialItemLimit;
state.isDataLoading = true;
smartRecorderModel.getListOfDwpTemplates(searchTemplatesParams.searchText).then(function (templates) {
scope.templates = templates.objects;
scope.$emit(events.RESOURCES_FOUND, { data: scope.templates, type: 'templates' });
!state.watchersOn && initWatchers();
}).finally(function () {
state.isDataLoading = false;
});
}
function initWatchers() {
state.watchersOn = true;
scope.$watchCollection('context', function (newValue, oldValue) {
var watchProps = ['summary', 'company', 'customerId'], propertyIndex, propertyCount = watchProps.length;
if (newValue.template && newValue.template.id) {
if ((newValue.template.id !== oldValue.template.id) || (newValue.template.id === oldValue.template.id && !scope.savedTemplateId)) {
scope.savedTemplateId = newValue.template.id;
sortListBySelectedTemplate();
}
}
else {
scope.savedTemplateId = '';
}
for (propertyIndex = 0; propertyIndex < propertyCount; propertyIndex++) {
if (newValue[watchProps[propertyIndex]] !== oldValue[watchProps[propertyIndex]]) {
init();
break;
}
}
}, true);
}
function selectTemplate(template) {
scope.savedTemplateId = template.id;
sortListBySelectedTemplate();
scope.$emit(events.SELECT_TEMPLATE_FROM_RS, template);
}
function unSelectTemplate() {
scope.savedTemplateId = '';
scope.$emit(events.UNSELECT_TEMPLATE_FROM_RS);
}
function sortListBySelectedTemplate() {
//Scroll position is getting changed on selecting templates due to splice and unshift method so created a copy
//and made changes and assign it back
var localTemplate = angular.copy(scope.templates);
_.find(localTemplate, function (template, index) {
if (scope.savedTemplateId === template.id && index !== 0) {
localTemplate.splice(index, 1);
localTemplate.unshift(template);
return true;
}
});
scope.templates = localTemplate;
}
scope.context = context;
scope.state = state;
init();
}
};
}]);