@paperbits/common
Version:
Paperbits common components.
43 lines (33 loc) • 1.49 kB
text/typescript
import * as Objects from "../objects";
import { EventManager } from "../events";
import { ISettingsProvider } from "./ISettingsProvider";
const localStorageItemName = "paperbits";
export class LocalStorageSettingsProvider implements ISettingsProvider {
constructor(private readonly eventManager: EventManager) { }
public async getSetting<T>(name: string): Promise<T> {
const settingsObject = await this.getSettings();
return Objects.getObjectAt(name, settingsObject);
}
public onSettingChange<T>(name: string, eventHandler: (value: T) => void): void {
this.eventManager.addEventListener("onSettingChange", (setting) => {
if (setting.name !== name) {
return;
}
eventHandler(setting.value);
});
}
public async setSetting<T>(name: string, value: T): Promise<void> {
const settings = await this.getSettings();
Objects.setValue(name, settings, value);
localStorage.setItem(localStorageItemName, JSON.stringify(settings));
this.eventManager.dispatchEvent("onSettingChange", { name: name, value: value });
}
public async getSettings(): Promise<any> {
const storedSettings = localStorage.getItem(localStorageItemName);
if (!storedSettings) {
return <any>{};
}
const settingsObject = JSON.parse(storedSettings);
return settingsObject;
}
}