mirror of
https://github.com/CharaChorder/DeviceManager.git
synced 2026-01-19 00:13:01 +00:00
32 lines
756 B
TypeScript
32 lines
756 B
TypeScript
import type { Writable } from "svelte/store";
|
|
import { writable } from "svelte/store";
|
|
import { browser } from "$app/environment";
|
|
|
|
export function persistentWritable<T>(
|
|
key: string,
|
|
value: T,
|
|
condition?: () => boolean,
|
|
): Writable<T> {
|
|
if (browser) {
|
|
const persistedValue = localStorage.getItem(key);
|
|
let store: Writable<T>;
|
|
try {
|
|
store =
|
|
persistedValue !== null
|
|
? writable(JSON.parse(persistedValue))
|
|
: writable(value);
|
|
} catch (e) {
|
|
console.error(e);
|
|
store = writable(value);
|
|
}
|
|
store.subscribe((value) => {
|
|
if (!condition || condition())
|
|
localStorage.setItem(key, JSON.stringify(value));
|
|
});
|
|
|
|
return store;
|
|
} else {
|
|
return writable(value);
|
|
}
|
|
}
|