refactor: improve type checking for DispatchingStore dispatch payloads

This commit is contained in:
Andrew Bastin
2023-02-14 14:09:32 +05:30
parent cb5fff0310
commit b27fe871c4
11 changed files with 85 additions and 57 deletions

View File

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