ui/lib/shared/addon/prefs/service.js

92 lines
1.9 KiB
JavaScript

import { computed } from '@ember/object';
import { run } from '@ember/runloop';
import Service, { inject as service } from '@ember/service';
import C from 'shared/utils/constants';
export default Service.extend({
globalStore: service(),
settings: service(),
app: service(),
unremoved: computed('globalStore.generation', function() {
return this.get('globalStore').all('preference');
}),
findByName(key) {
return this.get('unremoved').filterBy('name', key)[0];
},
unknownProperty(key) {
var value;
var existing = this.findByName(key);
if ( existing ) {
try {
value = JSON.parse(existing.get('value'));
} catch (e) {
console.log(`Error parsing storage ['${ key }']`);
}
}
return value;
},
setUnknownProperty(key, value) {
if (key !== 'app') {
var obj = this.findByName(key);
// Delete by set to undefined
if ( value === undefined ) {
if ( obj ) {
obj.set('value', undefined);
obj.delete();
this.notifyPropertyChange(key);
}
return;
}
if ( !obj ) {
obj = this.get('globalStore').createRecord({
type: 'preference',
name: key,
});
}
let neu = JSON.stringify(value);
if ( !obj.get('id') || obj.get('value') !== neu ) {
obj.set('value', neu);
obj.save().then(() => {
run(() => {
this.notifyPropertyChange(key);
});
});
}
}
return value;
},
clear() {
this.beginPropertyChanges();
this.get('unremoved').forEach((obj) => {
this.set(obj.get('name'), undefined);
});
this.endPropertyChanges();
},
tablePerPage: computed(C.PREFS.TABLE_COUNT, function() {
let out = parseInt(this.get(C.PREFS.TABLE_COUNT), 10);
if ( !out ) {
out = C.TABLES.DEFAULT_COUNT;
}
return out;
}),
});