import { useCallback } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { savePrefs } from 'loot-core/src/client/actions'; import { type State } from 'loot-core/src/client/state-types'; import { type LocalPrefs } from 'loot-core/src/types/prefs'; type SetLocalPrefAction<K extends keyof LocalPrefs> = ( value: LocalPrefs[K], ) => void; export function useLocalPref<K extends keyof LocalPrefs>( prefName: K, ): [LocalPrefs[K], SetLocalPrefAction<K>] { const dispatch = useDispatch(); const setLocalPref = useCallback<SetLocalPrefAction<K>>( value => { dispatch(savePrefs({ [prefName]: value } as LocalPrefs)); }, [prefName, dispatch], ); const localPref = useSelector( (state: State) => state.prefs.local?.[prefName] as LocalPrefs[K], ); return [localPref, setLocalPref]; }