154 lines
8.4 KiB
JavaScript
154 lines
8.4 KiB
JavaScript
"use strict";
|
|
(function () {
|
|
'use strict';
|
|
angular.module('knowledgeArticleModule')
|
|
.directive('kaVisibilityDirective', ['knowledgeArticleModel', 'configurationModel', '$timeout', 'userModel', 'localStorageService', 'searchModel',
|
|
function (knowledgeArticleModel, configurationModel, $timeout, userModel, localStorageService, searchModel) {
|
|
return {
|
|
restrict: 'E',
|
|
templateUrl: 'views/knowledge-article/knowledge-article-visibility.html',
|
|
scope: {
|
|
article: '=',
|
|
company: '='
|
|
},
|
|
link: function (scope, element) {
|
|
var article = scope.article, state = {
|
|
loadVisibility: false,
|
|
visibilitySet: configurationModel.get('knowledgeArticle.visibilities'),
|
|
selectedVisibilitySetItem: null,
|
|
tooManyCompanies: false,
|
|
tooManyVisibilityGroups: false,
|
|
visibilityCompanies: [],
|
|
selectedVisibilityCompany: null,
|
|
visibilities: [],
|
|
selectedVisibility: null,
|
|
specificGroupCache: []
|
|
}, visibilityMap = {
|
|
everyone: function () {
|
|
return [{
|
|
visibilityGroupName: 'ALL',
|
|
company: 'ALL',
|
|
visibilityGroupId: '0'
|
|
}];
|
|
},
|
|
myCompany: function () {
|
|
return [{
|
|
visibilityGroupName: 'ALL',
|
|
company: scope.company.name,
|
|
visibilityGroupId: '0'
|
|
}];
|
|
},
|
|
lastGroupSet: function () {
|
|
return getSetOfVisibilityGroups();
|
|
},
|
|
specificGroup: function () {
|
|
return state.specificGroupCache;
|
|
}
|
|
}, localStorageLastTemplateKey = 'LAST_SET_OF_VISIBILITY_GROUPS';
|
|
searchModel.getOperatingCompanies(null, -1).then(function (response) {
|
|
state.visibilityCompanies = angular.extend([], response.companies);
|
|
state.tooManyCompanies = response.exceedsChunkSize;
|
|
state.visibilityCompanies.unshift({ name: 'ALL' });
|
|
});
|
|
_.find(state.visibilitySet, { value: 'myCompany' }).subLabel = scope.company.name;
|
|
scope.handleKeydown = function ($event) {
|
|
if ($event.keyCode === 27) { // escape key
|
|
var dropdownToggle = element.find('.dropdown-toggle');
|
|
$timeout(function () {
|
|
dropdownToggle.trigger('click');
|
|
dropdownToggle.focus();
|
|
}, 0);
|
|
$event.stopPropagation();
|
|
}
|
|
};
|
|
scope.visibilitySelected = function (item) {
|
|
if (state.selectedVisibilitySetItem && state.selectedVisibilitySetItem.value === 'specificGroup') {
|
|
state.specificGroupCache = _.cloneDeep(article.articleVisibilityGroup);
|
|
}
|
|
state.selectedVisibilitySetItem = item;
|
|
$timeout(function () {
|
|
article.articleVisibilityGroup = visibilityMap[state.selectedVisibilitySetItem.value]();
|
|
//manual close of dropdown for IE9-IE10
|
|
if (scope.state.isOpen) {
|
|
scope.state.isOpen = false;
|
|
}
|
|
var dropdownToggle = element.find('.dropdown-toggle');
|
|
dropdownToggle.focus();
|
|
}, 0);
|
|
};
|
|
scope.getCompaniesByName = function (name) {
|
|
return searchModel.getCompaniesByText(name).then(function (response) {
|
|
return { list: response.companies, exceedsChunkSize: response.exceedsChunkSize };
|
|
});
|
|
};
|
|
scope.getVisibilityGroupsByName = function (name) {
|
|
return knowledgeArticleModel.getVisibilityGroupsByText(state.selectedVisibilityCompany.name, name);
|
|
};
|
|
scope.loadVisibilityByCompanyName = function (companyName) {
|
|
state.visibilities = [];
|
|
state.loadVisibility = true;
|
|
return knowledgeArticleModel.getVisibilityByCompanyName(companyName).then(function (data) {
|
|
state.visibilities = data;
|
|
if (data.length >= searchModel.supportGroupChunkSize) {
|
|
state.tooManyVisibilityGroups = true;
|
|
}
|
|
else {
|
|
state.tooManyVisibilityGroups = false;
|
|
}
|
|
}).finally(function () {
|
|
state.loadVisibility = false;
|
|
});
|
|
};
|
|
scope.addVisibility = function () {
|
|
var item = {
|
|
company: state.selectedVisibilityCompany.name,
|
|
visibilityGroupName: state.selectedVisibility.visibilityGroupName,
|
|
visibilityGroupId: state.selectedVisibility.visibilityGroupId
|
|
}, visibilityArr = article.articleVisibilityGroup;
|
|
if (!_.find(visibilityArr, item)) {
|
|
visibilityArr.push(item);
|
|
}
|
|
state.selectedVisibility = null;
|
|
state.selectedVisibilityCompany = null;
|
|
};
|
|
scope.isAddButtonDisabled = function () {
|
|
if (!state.selectedVisibility) {
|
|
return true;
|
|
}
|
|
return _.filter(article.articleVisibilityGroup, {
|
|
company: state.selectedVisibilityCompany.name,
|
|
visibilityGroupName: state.selectedVisibility.visibilityGroupName
|
|
}).length;
|
|
};
|
|
scope.removeVisibility = function (tag) {
|
|
_.pull(article.articleVisibilityGroup, tag);
|
|
};
|
|
function getSetOfVisibilityGroups() {
|
|
return localStorageService.get(localStorageLastTemplateKey);
|
|
}
|
|
function getVisibilitySetItem() {
|
|
var visibilityConfiguration = configurationModel.get('knowledgeArticle.visibilities');
|
|
if (!article.articleVisibilityGroup.length) {
|
|
return null;
|
|
}
|
|
if (article.articleVisibilityGroup.length === 1) {
|
|
var visibility = _.pick(article.articleVisibilityGroup[0], ['visibilityGroupName', 'company']);
|
|
if (_.find(visibilityMap.everyone(), visibility)) {
|
|
return _.find(visibilityConfiguration, { value: 'everyone' });
|
|
}
|
|
if (_.find(visibilityMap.myCompany(), visibility)) {
|
|
return _.find(visibilityConfiguration, { value: 'myCompany' });
|
|
}
|
|
}
|
|
return _.find(visibilityConfiguration, { value: 'specificGroup' });
|
|
}
|
|
state.selectedVisibilitySetItem = getVisibilitySetItem();
|
|
scope.$watch('state.selectedVisibilityCompany', function () {
|
|
state.selectedVisibility = null;
|
|
}, true);
|
|
scope.state = state;
|
|
}
|
|
};
|
|
}]);
|
|
}());
|