nedux-persist
Version:
the next redux state management
41 lines (32 loc) • 1.05 kB
JavaScript
const PREFIX = '@nedux-persist';
const persistKeys = (keys, {
storage = localStorage,
version = ''
} = {}) => store => {
const getter = async key => JSON.parse((await Promise.resolve(storage.getItem(`${PREFIX}-${version}:${key}`))));
const setter = (key, value) => Promise.resolve(storage.setItem(`${PREFIX}-${version}:${key}`, JSON.stringify(value)));
const remover = key => Promise.resolve(storage.removeItem(`${PREFIX}-${version}:${key}`));
const persistKey = key => {
let isHydrated = false;
const next = async value => {
if (isHydrated) {
if (value !== null && value !== undefined) {
setter(key, value);
} else {
remover(key);
}
} else {
isHydrated = true;
const persistedValue = await getter(key);
if (persistedValue !== null) {
store.set(key, persistedValue);
}
}
};
store.subscribe(key, next, {
withInitialValue: true
});
};
keys.forEach(key => persistKey(key));
};
export { persistKeys };