Newer
Older
Matiss Janis Aboltins
committed
import { useCallback } from 'react';
import { useDispatch, useSelector } from 'react-redux';
Matiss Janis Aboltins
committed
Matiss Janis Aboltins
committed
import { savePrefs } from 'loot-core/client/actions';
import { type State } from 'loot-core/client/state-types';
import { type MetadataPrefs } from 'loot-core/types/prefs';
Matiss Janis Aboltins
committed
type SetMetadataPrefAction<K extends keyof MetadataPrefs> = (
value: MetadataPrefs[K],
) => void;
export function useMetadataPref<K extends keyof MetadataPrefs>(
prefName: K,
): [MetadataPrefs[K], SetMetadataPrefAction<K>] {
Matiss Janis Aboltins
committed
const dispatch = useDispatch();
const setLocalPref = useCallback<SetMetadataPrefAction<K>>(
value => {
dispatch(savePrefs({ [prefName]: value }));
},
[prefName, dispatch],
);
const localPref = useSelector(
(state: State) => state.prefs.local?.[prefName],
);
return [localPref, setLocalPref];