ui/lib/shared/addon/utils/browser-storage.js

60 lines
1.2 KiB
JavaScript

import Mixin from '@ember/object/mixin';
export default Mixin.create({
backing: 'overrideMe with window.localStorage or window.sessionStorage',
unknownProperty(key) {
var value; // = undefined;
var backing = this.get('backing');
var str = backing.getItem(key);
if ( str ) {
try {
value = JSON.parse(str);
} catch (e) {
console.log(`Error parsing storage ['${ key }']`);
backing.removeItem(key);
this.notifyPropertyChange(key);
}
}
return value;
},
setUnknownProperty(key, value) {
if (key !== 'app') {
var backing = this.get('backing');
if ( value === undefined ) {
backing.removeItem(key);
} else {
backing.setItem(key, JSON.stringify(value));
}
this.notifyPropertyChange(key);
}
return value;
},
clear() {
var backing = this.get('backing');
this.beginPropertyChanges();
for ( var i = 0 ; i < backing.length ; i++ ) {
var key = backing.key(i);
if ( key.indexOf('.') >= 0 ) {
continue;
}
this.set(key);
}
backing.clear();
this.endPropertyChanges();
},
removeItem() {}
});