open-consul/ui/packages/consul-ui/app/utils/storage/local-storage.js
John Cowen c98130cc08
ui: Move to Workspaced Structure (#8994)
* ui: Add the most basic workspace root in /ui

* We already have a LICENSE file in the repository root

* Change directory path in build scripts ui-v2 -> ui

* Make yarn install flags configurable from elsewhere

* Minimal workspace root makefile

* Call the new docker specific target

* Update yarn in the docker build image

* Reconfigure the netlify target and move to the higher makefile

* Move ui-v2 -> ui/packages/consul-ui

* Change repo root to refleect new folder structure

* Temporarily don't hoist consul-api-double

* Fixup CI configuration

* Fixup lint errors

* Fixup Netlify target
2020-10-21 15:23:16 +01:00

53 lines
1.3 KiB
JavaScript

export default function(
scheme = '',
storage = window.localStorage,
encode = JSON.stringify,
decode = JSON.parse,
dispatch = function(key) {
window.dispatchEvent(new StorageEvent('storage', { key: key }));
}
) {
const prefix = `${scheme}:`;
return {
getValue: function(path) {
let value = storage.getItem(`${prefix}${path}`);
if (typeof value !== 'string') {
value = '""';
}
try {
value = decode(value);
} catch (e) {
value = '';
}
return value;
},
setValue: function(path, value) {
if (value === null) {
return this.removeValue(path);
}
try {
value = encode(value);
} catch (e) {
value = '""';
}
const res = storage.setItem(`${prefix}${path}`, value);
dispatch(`${prefix}${path}`);
return res;
},
removeValue: function(path) {
const res = storage.removeItem(`${prefix}${path}`);
dispatch(`${prefix}${path}`);
return res;
},
all: function() {
return Object.keys(storage).reduce((prev, item, i, arr) => {
if (item.indexOf(`${prefix}`) === 0) {
const key = item.substr(prefix.length);
prev[key] = this.getValue(key);
}
return prev;
}, {});
},
};
}