import { Ref } from "vue" import { settingsStore, SettingsDef } from "~/newstore/settings" import { pluck, distinctUntilChanged } from "rxjs/operators" import { useStream, useStreamStatic } from "./stream" export function useSetting( settingKey: K ): Ref { return useStream( settingsStore.subject$.pipe(pluck(settingKey), distinctUntilChanged()), settingsStore.value[settingKey], (value: SettingsDef[K]) => { settingsStore.dispatch({ dispatcher: "applySetting", payload: { settingKey, value, }, }) } ) } /** * A static version (does not require component setup) * of `useSetting` */ export function useSettingStatic( settingKey: K ): [Ref, () => void] { return useStreamStatic( settingsStore.subject$.pipe(pluck(settingKey), distinctUntilChanged()), settingsStore.value[settingKey], (value: SettingsDef[K]) => { settingsStore.dispatch({ dispatcher: "applySetting", payload: { settingKey, value, }, }) } ) }