Files
hoppscotch/packages/hoppscotch-common/src/composables/settings.ts
Joel Jacob Stephen 3f59597864 feat: introducing self hosted admin dashboard package (#12)
Co-authored-by: Andrew Bastin <andrewbastin.k@gmail.com>
Co-authored-by: Anwarul Islam <anwaarulislaam@gmail.com>
2023-02-28 13:13:27 +05:30

45 lines
1.1 KiB
TypeScript

import { Ref } from "vue"
import { settingsStore, SettingsDef } from "~/newstore/settings"
import { pluck, distinctUntilChanged } from "rxjs/operators"
import { useStream, useStreamStatic } from "./stream"
export function useSetting<K extends keyof SettingsDef>(
settingKey: K
): Ref<SettingsDef[K]> {
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<K extends keyof SettingsDef>(
settingKey: K
): [Ref<SettingsDef[K]>, () => void] {
return useStreamStatic(
settingsStore.subject$.pipe(pluck(settingKey), distinctUntilChanged()),
settingsStore.value[settingKey],
(value: SettingsDef[K]) => {
settingsStore.dispatch({
dispatcher: "applySetting",
payload: {
settingKey,
value,
},
})
}
)
}