web-shared-preferences
Version:
An simple class to manage the loacal storage, including React like useString, useJSON and more!
39 lines • 1.61 kB
JavaScript
import { useReducer } from "react";
import { SharedPreferences } from "./SharedPreferences";
/**
* Used to build different hooks for the `localStorage` implementation
* @param key To get the value from the local storage
* @param defValue Default value to return if the key does not exist
* @param coreGetter
* @param coreSetter
* @returns
*/
export function usePref(key, defValue, coreGetter, coreSetter) {
const [, forceRender] = useReducer((x) => x + 1, 0);
const getter = coreGetter(key, defValue);
const setter = (value) => {
coreSetter(key, typeof value == "function" ? value(getter) : value);
if (getter !== value) {
forceRender();
}
};
return [getter, setter];
}
export function Dispatcher(storage) {
const pref = new SharedPreferences(storage);
return {
useString(key, defValue) {
return usePref(key, defValue, (key, defValue) => pref.getString(key, defValue), (key, value) => pref.setString(key, value));
},
useBoolean(key, defValue) {
return usePref(key, defValue, (key, defValue) => pref.getBoolean(key, defValue), (key, value) => pref.setBoolean(key, value));
},
useNumber(key, defValue) {
return usePref(key, defValue, (key, defValue) => pref.getNumber(key, defValue), (key, value) => pref.setNumber(key, value));
},
useJSON(key, defValue) {
return usePref(key, defValue, (key, defValue) => pref.getJSON(key, defValue), (key, value) => pref.setJSON(key, value));
},
};
}
//# sourceMappingURL=Dispatcher.js.map