Removal of localStorage dependency v1
This commit is contained in:
@@ -1,11 +1,37 @@
|
||||
import {writable} from "svelte/store"
|
||||
import {getJson, setJson} from "@welshman/lib"
|
||||
|
||||
export const synced = <T>(key: string, defaultValue: T) => {
|
||||
const init = getJson(key)
|
||||
const store = writable<T>(init === undefined ? defaultValue : init)
|
||||
export interface StorageProvider {
|
||||
get: (key: string) => Promise<any>
|
||||
set: (key: string, value: any) => Promise<void>
|
||||
}
|
||||
|
||||
store.subscribe((value: T) => setJson(key, value))
|
||||
export interface SyncedConfig {
|
||||
key: string
|
||||
storage: StorageProvider
|
||||
defaultValue: any
|
||||
}
|
||||
|
||||
export const localStorageProvider: StorageProvider = {
|
||||
get: async (key: string) => getJson(key),
|
||||
set: async (key: string, value: any) => setJson(key, value),
|
||||
}
|
||||
|
||||
export const synced = <T>(config: SyncedConfig) => {
|
||||
const {key, storage, defaultValue} = config
|
||||
const store = writable<T>(defaultValue)
|
||||
|
||||
// Async initialization
|
||||
storage.get(key).then((value: any) => {
|
||||
if (value !== undefined) {
|
||||
store.set(value)
|
||||
}
|
||||
})
|
||||
|
||||
// Subscribe to changes
|
||||
store.subscribe(async (value: T) => {
|
||||
await storage.set(key, value)
|
||||
})
|
||||
|
||||
return store
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user