// index.ts // Copyright (C) 2020 Dwayne Harris // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see . import { useEffect, useRef, EffectCallback } from 'react' import { useSelector } from 'react-redux' import { useHistory } from 'react-router-dom' import isEqual from 'lodash/isEqual' import { getAuthenticated, getChecked, getAuthenticatedUser } from '../selectors/authentication' import { getTheme } from '../selectors/theme' export const useAuthenticationCheck = () => { const checked = useSelector(getChecked) const authenticated = useSelector(getAuthenticated) const history = useHistory() useEffect(() => { if (checked && !authenticated) history.push('/login') }, [checked, authenticated]) } const useDeepCompareMemoize = (value: any) => { const ref = useRef() if (!isEqual(value, ref.current)) { ref.current = value } return ref.current } export const useDeepCompareEffect = (callback: EffectCallback, deps?: readonly any[] | undefined) => { useEffect(callback, useDeepCompareMemoize(deps)) } export const useTheme = () => useSelector(getTheme) export function useSetting(key: string): T | undefined export function useSetting(key: string, defaultValue: T): T export function useSetting(key: string, defaultValue?: T): T | undefined { const user = useSelector(getAuthenticatedUser) if (!user || !user.settings) return defaultValue return user.settings[key] ?? defaultValue }