salix/front/core/services/config.js

80 lines
2.0 KiB
JavaScript

import ngModule from '../module';
/**
* Saves and loads the application configuration.
*/
export default class Config {
constructor($http, vnApp, $translate, $window) {
Object.assign(this, {
$http,
vnApp,
$translate,
storage: $window.localStorage,
user: {},
local: {}
});
this.params = [
'warehouseFk',
'companyFk',
'bankFk'
];
}
initialize() {
for (let param of this.params)
this.local[param] = this.getItem(param);
return this.$http.get('api/UserConfigs/getUserConfig')
.then(res => {
for (let param of this.params)
this.user[param] = res.data[param];
})
.finally(() => this.mergeParams());
}
mergeParams() {
for (let param of this.params) {
let local = this.local[param];
this[param] = local != null && local != ''
? local
: this.user[param];
}
}
setUser(param, value) {
this.user[param] = value;
this.mergeParams();
let params = {[param]: value};
return this.$http.post('api/UserConfigs/setUserConfig', params)
.then(() => this.showSaved());
}
setLocal(param, value) {
this.setItem(param, value);
this.local[param] = value;
this.mergeParams();
this.showSaved();
}
showSaved() {
this.vnApp.showSuccess(this.$translate.instant('Data saved!'));
}
getItem(key) {
let value = this.storage[key];
return value !== undefined ? JSON.parse(value) : value;
}
setItem(key, value) {
if (value == null)
this.storage.removeItem(key);
else
this.storage[key] = JSON.stringify(value);
}
}
Config.$inject = ['$http', 'vnApp', '$translate', '$window'];
ngModule.service('vnConfig', Config);