@snipsonian/observable-state
Version:
Observable-state snippets (redux-like)
53 lines (52 loc) • 2.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.saveStateToStorage = exports.determineInitialState = void 0;
const mergeObjectPropsDeeply_1 = require("@snipsonian/core/cjs/merge/mergeObjectPropsDeeply");
const localStorage_1 = require("@snipsonian/browser/cjs/storage/localStorage");
const sessionStorage_1 = require("@snipsonian/browser/cjs/storage/sessionStorage");
function determineInitialState({ initialState, stateStorageConfig, }) {
if (!stateStorageConfig) {
return initialState;
}
const { local, session, custom } = stateStorageConfig;
let combinedStorageState = initialState;
if (local && localStorage_1.default.isSupported) {
combinedStorageState = (0, mergeObjectPropsDeeply_1.default)(combinedStorageState, localStorage_1.default.read({
key: local.browserStorageKey,
defaultValue: {},
}));
}
if (session && sessionStorage_1.default.isSupported) {
combinedStorageState = (0, mergeObjectPropsDeeply_1.default)(combinedStorageState, sessionStorage_1.default.read({
key: session.browserStorageKey,
defaultValue: {},
}));
}
if (custom) {
combinedStorageState = (0, mergeObjectPropsDeeply_1.default)(combinedStorageState, custom.readFromStorage());
}
return combinedStorageState;
}
exports.determineInitialState = determineInitialState;
function saveStateToStorage({ state, stateStorageConfig, }) {
if (!stateStorageConfig) {
return;
}
const { local, session, custom } = stateStorageConfig;
if (local && localStorage_1.default.isSupported) {
localStorage_1.default.save({
key: local.browserStorageKey,
value: local.getStatePartToSave(state),
});
}
if (session && sessionStorage_1.default.isSupported) {
sessionStorage_1.default.save({
key: session.browserStorageKey,
value: session.getStatePartToSave(state),
});
}
if (custom) {
custom.saveToStorage(custom.getStatePartToSave(state));
}
}
exports.saveStateToStorage = saveStateToStorage;