@plq/use-persisted-state
Version:
useState hook with persistence in storage
92 lines • 2.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const listeners = new Set();
function fireStorageEvent(changes) {
listeners.forEach(listener => {
listener(changes);
});
}
window.addEventListener('storage', event => {
if (event.key) {
const changes = {
[event.key]: {
newValue: event.newValue,
oldValue: event.oldValue,
},
};
fireStorageEvent(changes);
}
});
const onChanged = {
addListener(listener) {
listeners.add(listener);
},
removeListener(listener) {
listeners.delete(listener);
},
hasListener(listener) {
return listeners.has(listener);
},
};
exports.default = (storage) => ({
get: keys => {
const result = {};
if (Array.isArray(keys)) {
keys.forEach(key => {
const item = typeof storage !== 'undefined' ? storage.getItem(key) : undefined;
if (item)
result[key] = item;
});
}
else {
const item = typeof storage !== 'undefined' ? storage.getItem(keys) : undefined;
if (item)
result[keys] = item;
}
return result;
},
set: items => {
const changes = {};
Object.entries(items).forEach(([key, value]) => {
const oldValue = typeof storage !== 'undefined' ? storage.getItem(key) : undefined;
if (typeof storage !== 'undefined') {
storage.setItem(key, value);
changes[key] = {
oldValue,
newValue: value,
};
}
});
if (Object.keys(changes).length > 0)
fireStorageEvent(changes);
},
remove: keys => {
const changes = {};
if (Array.isArray(keys)) {
keys.forEach(key => {
const oldValue = typeof storage !== 'undefined' ? storage.getItem(key) : undefined;
if (typeof storage !== 'undefined') {
storage.removeItem(key);
changes[key] = {
oldValue,
newValue: null,
};
}
});
}
else {
const oldValue = typeof storage !== 'undefined' ? storage.getItem(keys) : undefined;
if (typeof storage !== 'undefined') {
storage.removeItem(keys);
changes[keys] = {
oldValue,
newValue: null,
};
}
}
if (Object.keys(changes).length > 0)
fireStorageEvent(changes);
},
onChanged,
});
//# sourceMappingURL=create-web-storage.js.map