192 lines
8.8 KiB
JavaScript
192 lines
8.8 KiB
JavaScript
"use strict";
|
|
(function () {
|
|
'use strict';
|
|
angular.module('userModule')
|
|
.factory('userModel', ['authService', 'localStorageService', 'userService', '$q', '$log', '$rootScope', 'events', 'searchService',
|
|
function (authService, localStorageService, userService, $q, $log, $rootScope, events, searchService) {
|
|
var self = {
|
|
userConfig: {},
|
|
followCount: null,
|
|
isAccessibleUser: false,
|
|
isAccessibleUserPreferenceId: null,
|
|
bcmConfig: {
|
|
"integrated": false,
|
|
"usermapped": false,
|
|
"configLoaded": false
|
|
},
|
|
userIdEncoded: false,
|
|
userId: localStorageService.get('user.userId'),
|
|
decodedUserId: localStorageService.get('user.userId')
|
|
};
|
|
/**
|
|
* Gets need user data
|
|
*/
|
|
self.getUserDataForCurrentSession = function () {
|
|
self.userId = localStorageService.get('user.userId');
|
|
self.getFullCurrentUserData();
|
|
};
|
|
/**
|
|
* Loads full user's data
|
|
*
|
|
* @returns {Promise}
|
|
*/
|
|
self.getFullCurrentUserData = function () {
|
|
if (!_.isUndefined(self.userFullData) && !_.isUndefined(self.userFullData.loginId) && self.userFullData.loginId !== self.userId) {
|
|
self.userFullData = null;
|
|
}
|
|
//Some race condition is causing self.userid to be null resulting in null for /smartit/restapi/person/supportgroupperson/:userid call
|
|
//So login user icon and search icon disappears so adding a check if empty get the userid from localstorage
|
|
if (!self.userId) {
|
|
self.userId = localStorageService.get('user.userId');
|
|
}
|
|
if (!self.userFullData && !_.isUndefined(self.userId)) {
|
|
if (self.userId && !self.userIdEncoded) {
|
|
self.decodedUserId = angular.copy(self.userId);
|
|
self.userId = encodeURIComponent(self.userId);
|
|
self.userIdEncoded = true;
|
|
}
|
|
self.userFullData = userService.getFullUserData(self.userId)
|
|
.then(function (result) {
|
|
self.userFullData = result;
|
|
if (!self.userFullData.id) {
|
|
self.userFullData.id = self.userId;
|
|
}
|
|
return result;
|
|
})
|
|
.catch(function () {
|
|
$log.error('Error while getting full user data');
|
|
});
|
|
}
|
|
return $q.when(self.userFullData);
|
|
};
|
|
/**
|
|
* Get list of companies that current user is operating
|
|
* @returns {promise}
|
|
*/
|
|
self.getOperatingCompanies = function (chunkInfo) {
|
|
if (self.operatingCompanies && !chunkInfo) {
|
|
return $q.when({ companies: self.operatingCompanies, exceedsChunkSize: self.exceedsChunkSizeOperatingCompanies });
|
|
}
|
|
if (chunkInfo) {
|
|
chunkInfo = { chunkInfo: chunkInfo };
|
|
}
|
|
return searchService.getCompaniesByText('', chunkInfo).then(function (response) {
|
|
if (!chunkInfo) {
|
|
self.operatingCompanies = response.companies;
|
|
self.exceedsChunkSizeOperatingCompanies = response.exceedsChunkSize;
|
|
}
|
|
return response;
|
|
});
|
|
};
|
|
self.getOperatingCompaniesByText = function (searchText) {
|
|
return searchService.getCompaniesByText(searchText).then(function (response) {
|
|
return response;
|
|
});
|
|
};
|
|
/**
|
|
* Get user preferences
|
|
*/
|
|
var populateUserPreferences = function (preferenceGroup, userProps) {
|
|
userProps = _.filter(userProps, 'id');
|
|
if (userProps.length) {
|
|
_.map(userProps, function (property) {
|
|
property.value = !_.isEmpty(property.value) ? angular.fromJson(property.value) : '';
|
|
});
|
|
}
|
|
_.forEach(userProps, function (property) {
|
|
var idx = _.findIndex(self.userConfig[preferenceGroup], { id: property.id });
|
|
if (idx > -1) {
|
|
self.userConfig[preferenceGroup][idx] = property;
|
|
}
|
|
else {
|
|
self.userConfig[preferenceGroup].push(property);
|
|
}
|
|
});
|
|
};
|
|
self.getUserPreferences = function (preferenceGroup) {
|
|
if (self.userConfig[preferenceGroup]) {
|
|
return $q.when(self.userConfig[preferenceGroup]);
|
|
}
|
|
self.userConfig[preferenceGroup] = [];
|
|
var prop = {
|
|
preferenceGroup: preferenceGroup,
|
|
user: self.userIdEncoded ? decodeURIComponent(self.userId) : self.userId
|
|
};
|
|
return userService.getUserPreferences(prop).then(function (userProps) {
|
|
populateUserPreferences(preferenceGroup, userProps);
|
|
return self.userConfig[preferenceGroup];
|
|
});
|
|
};
|
|
self.updateUserPreferences = function (preferenceGroup, details, args) {
|
|
var prefDetail = details.id && _.find(self.userConfig[preferenceGroup], { id: details.id }) || {}, prop = {
|
|
preferenceGroup: preferenceGroup,
|
|
user: self.userIdEncoded ? decodeURIComponent(self.userId) : self.userId
|
|
};
|
|
if (details.value !== null) {
|
|
if (_.isPlainObject(details.value)) {
|
|
if (args && args.updateColumns) {
|
|
prefDetail.value = details.value;
|
|
}
|
|
else {
|
|
prefDetail.value = _.merge(prefDetail.value || {}, details.value);
|
|
}
|
|
}
|
|
else {
|
|
prefDetail.value = details.value;
|
|
}
|
|
}
|
|
prop.preferenceDetails = [
|
|
{
|
|
id: prefDetail.id || null,
|
|
name: prefDetail.name || details.name,
|
|
defaultpreset: details.defaultpreset,
|
|
systemgenerated: details.systemgenerated,
|
|
label: details.label
|
|
}
|
|
];
|
|
if (details.value || details.name === "accessibility") {
|
|
prop.preferenceDetails[0].value = angular.toJson(prefDetail.value);
|
|
}
|
|
if (details.systemgenerated) {
|
|
prop.preferenceDetails[0].value = "[{}]";
|
|
}
|
|
return userService.updateUserPreferences(prop).then(function (userProps) {
|
|
populateUserPreferences(preferenceGroup, userProps);
|
|
return userProps;
|
|
});
|
|
};
|
|
self.removeUserPreferences = function (preferenceGroup, details) {
|
|
self.userConfig[preferenceGroup].splice(_.findIndex(self.userConfig[preferenceGroup], { id: details.id }), 1);
|
|
return userService.removeUserPreferences(details.id);
|
|
};
|
|
//get BCM config
|
|
self.getBCMIntegrationConfig = function () {
|
|
if (self.bcmConfig.configLoaded) {
|
|
return $q.when(self.bcmConfig);
|
|
}
|
|
else {
|
|
return userService.getBCMIntegrationConfig().then(function (data) {
|
|
self.bcmConfig = {
|
|
"configLoaded": true,
|
|
"integrated": data.integrated,
|
|
"usermapped": data.usermapped
|
|
};
|
|
return self.bcmConfig;
|
|
});
|
|
}
|
|
};
|
|
self.doBCMLogin = function (username, password) {
|
|
return userService.doBCMLogin(username, password).then(function (data) {
|
|
self.bcmConfig = {
|
|
"configLoaded": true,
|
|
"integrated": data.integrated,
|
|
"usermapped": data.usermapped
|
|
};
|
|
return self.bcmConfig;
|
|
});
|
|
};
|
|
return self;
|
|
}
|
|
]);
|
|
}());
|