import { useContext, useCallback, useState } from 'react'; import { LoadableResult, HackleRemoteConfig, EmptyHackleRemoteConfig, } from '../models'; import { HackleContext } from '../components'; import { InputUtil } from '../utils'; import { useOnMount } from './useOnMount'; export function useLoadableRemoteConfig(): LoadableResult { const { hackle, userVersion } = useContext(HackleContext); const getRemoteConfig = useCallback(() => { return ( hackle?.remoteConfig() || Promise.resolve(new EmptyHackleRemoteConfig()) ); }, [hackle]); const [remoteConfig, setRemoteConfig] = useState(() => { return getRemoteConfig(); }); const currentInput = { userVersion, }; const [prevInput, setPrevInput] = useState(currentInput); if (!InputUtil.isInputEqual(prevInput, currentInput)) { setPrevInput(currentInput); setRemoteConfig(getRemoteConfig()); } return useOnMount(remoteConfig, new EmptyHackleRemoteConfig()); }