(function () { | |
angular.module('xos.helpers') | |
/** | |
* @ngdoc service | |
* @name xos.helpers.XosUserPrefs | |
* @description | |
* This service is used to store the user preferences in cookies, so that they survive to page changes. | |
* The structure of the user preference is: | |
* ``` | |
* { | |
* synchronizers: { | |
* notification: { | |
* 'volt': boolean, | |
* 'openstack': boolean, | |
* ... | |
* } | |
* } | |
* userData: { | |
* current_user_site_id: Number, | |
* current_user_site_user_names: Array[1], | |
* ... | |
* } | |
* } | |
* ``` | |
**/ | |
.service('XosUserPrefs', function($cookies, Me, $q){ | |
let userPrefs = $cookies.get('xosUserPrefs') ? angular.fromJson($cookies.get('xosUserPrefs')) : {}; | |
/** | |
* @ngdoc method | |
* @name xos.helpers.XosUserPrefs#getAll | |
* @methodOf xos.helpers.XosUserPrefs | |
* @description | |
* Return all the user preferences stored in cookies | |
* @returns {object} The user preferences | |
**/ | |
this.getAll = () => { | |
userPrefs = $cookies.get('xosUserPrefs') ? angular.fromJson($cookies.get('xosUserPrefs')) : {}; | |
return userPrefs; | |
}; | |
/** | |
* @ngdoc method | |
* @name xos.helpers.XosUserPrefs#setAll | |
* @methodOf xos.helpers.XosUserPrefs | |
* @description | |
* Override all user preferences | |
* @param {object} prefs The user preferences | |
**/ | |
this.setAll = (prefs) => { | |
$cookies.put('xosUserPrefs', angular.toJson(prefs)); | |
}; | |
/** | |
* @ngdoc method | |
* @name xos.helpers.XosUserPrefs#getSynchronizerNotificationStatus | |
* @methodOf xos.helpers.XosUserPrefs | |
* @description | |
* Return the synchronizer notification status, if name is not provided return the status for all synchronizers | |
* @param {string=} prefs The synchronizer name | |
* @returns {object | string} The synchronizer status | |
**/ | |
this.getSynchronizerNotificationStatus = (name = false) => { | |
if(name){ | |
return this.getAll().synchronizers.notification[name]; | |
} | |
return this.getAll().synchronizers.notification; | |
}; | |
/** | |
* @ngdoc method | |
* @name xos.helpers.XosUserPrefs#getUserDetailsCookie | |
* @methodOf xos.helpers.XosUserPrefs | |
* @description | |
* Return all the user details stored in cookies or call the service | |
* @returns {object} The user details | |
**/ | |
this.getUserDetailsCookie = () => { | |
var defer = $q.defer(); | |
let localPref = this.getAll(); | |
if(!localPref.userData){ | |
this.setUserDetailsCookie().$promise.then((data)=>{ | |
defer.resolve(data); | |
}); | |
} | |
else{ | |
defer.resolve(localPref.userData); | |
} | |
return {$promise: defer.promise}; | |
}; | |
/** | |
* @ngdoc method | |
* @name xos.helpers.XosUserPrefs#setUserDetailsCookie | |
* @methodOf xos.helpers.XosUserPrefs | |
* @description | |
* Save the user details in the cookie | |
* @param {object} details stored in cookie | |
* @param {objects} returns the user details as a promise | |
**/ | |
this.setUserDetailsCookie = (userData = null)=> { | |
var defer = $q.defer(); | |
let cookies = this.getAll(); | |
if (!userData){ | |
Me.get().then((user)=> { | |
cookies.userData = user; | |
this.setAll(cookies); | |
defer.resolve(user); | |
}) | |
.catch ((e) => { | |
defer.reject(e); | |
}); | |
} | |
else { | |
cookies.userData = userData; | |
this.setAll(cookies); | |
defer.resolve(userData); | |
} | |
return {$promise: defer.promise}; | |
} | |
/** | |
* @ngdoc method | |
* @name xos.helpers.XosUserPrefs#setSynchronizerNotificationStatus | |
* @methodOf xos.helpers.XosUserPrefs | |
* @description | |
* Update the notification status for a single synchronizer | |
* @param {string} name The synchronizer name | |
* @param {boolean} value The notification status (true means that it has been sent) | |
**/ | |
this.setSynchronizerNotificationStatus = (name = false, value) => { | |
if(!name){ | |
throw new Error('[XosUserPrefs] When updating a synchronizer is mandatory to provide a name.') | |
} | |
let cookies = this.getAll(); | |
if(!cookies.synchronizers){ | |
cookies.synchronizers = { | |
notification: {} | |
} | |
} | |
cookies.synchronizers.notification[name] = value; | |
this.setAll(cookies); | |
} | |
}); | |
})(); |