Skip to content

Commit

Permalink
Merge pull request #45 from ilyaagarkov/fix-using-sessionstorage-for-…
Browse files Browse the repository at this point in the history
…no-browser-env
  • Loading branch information
sergeysova committed Oct 17, 2022
2 parents 964481b + 4856d0d commit 5cf6707
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 10 deletions.
22 changes: 14 additions & 8 deletions src/setting.ts
@@ -1,13 +1,19 @@
import { createEvent } from 'effector';

type StorageType = 'local' | 'session';

const PREFIX = (0xeffec ** 2).toString(36);

function read(name: string, defaultValue: string, storage = localStorage): string {
return storage.getItem(`${PREFIX}-${name}`) ?? defaultValue;
function getStorage(type: StorageType) {
return type === 'session' ? sessionStorage : localStorage;
}

function read(name: string, defaultValue: string, storageType: StorageType = 'local'): string {
return getStorage(storageType).getItem(`${PREFIX}-${name}`) ?? defaultValue;
}

function write(name: string, value: string, storage = localStorage): string {
storage.setItem(`${PREFIX}-${name}`, value);
function write(name: string, value: string, storageType: StorageType = 'local'): string {
getStorage(storageType).setItem(`${PREFIX}-${name}`, value);
return value;
}

Expand All @@ -21,13 +27,13 @@ export function createSetting(name: string, defaultValue: string) {
};
}

export function createJsonSetting<T>(name: string, defaultValue: T, storage = localStorage) {
export function createJsonSetting<T>(name: string, defaultValue: T, storageType: StorageType = 'local') {
const save = createEvent<T>();
save.watch((value) => write(name, JSON.stringify(value), storage));
save.watch((value) => write(name, JSON.stringify(value), storageType));
return {
read: (): T => JSON.parse(read(name, JSON.stringify(defaultValue), storage)),
read: (): T => JSON.parse(read(name, JSON.stringify(defaultValue), storageType)),
write: (value: T): T => {
write(name, JSON.stringify(value), storage);
write(name, JSON.stringify(value), storageType);
return value;
},
save,
Expand Down
2 changes: 1 addition & 1 deletion src/tabs/log/model.ts
Expand Up @@ -8,7 +8,7 @@ export const isLogEnabledToggle = createEvent();
export const logCleared = createEvent();

export const $logs = createStore<LogMeta[]>([], {serialize: 'ignore'});
const logsSetting = createJsonSetting('logs-enabled', false, sessionStorage)
const logsSetting = createJsonSetting('logs-enabled', false, 'session')
export const $isLogEnabled = createStore(logsSetting.read());
$isLogEnabled.watch(logsSetting.write)

Expand Down
2 changes: 1 addition & 1 deletion src/tabs/trace/model.ts
Expand Up @@ -17,7 +17,7 @@ export const traceCleared = createEvent();
export const $traces = createStore<StackTrace[]>([]);
const $currentTrace = createStore<StackTrace>({ time: 0, traces: [] });

const traceSetting = createJsonSetting('trace-enabled', false, sessionStorage)
const traceSetting = createJsonSetting('trace-enabled', false, "session")
export const $isTraceEnabled = createStore(traceSetting.read());
$isTraceEnabled.watch(traceSetting.write);

Expand Down

0 comments on commit 5cf6707

Please sign in to comment.