react-firehooks
Version:
Lightweight dependency-free collection of React hooks for Firebase
42 lines (41 loc) • 1.1 kB
JavaScript
import { useCallback, useMemo, useState } from "react";
export const LoadingState = Symbol();
/**
* @internal
*/
export function useLoadingValue(initialState) {
const [state, setState] = useState({
error: undefined,
loading: initialState === LoadingState ? true : false,
value: initialState === LoadingState ? undefined : initialState,
});
const setValue = useCallback((value) => {
setState({
value,
loading: false,
error: undefined,
});
}, []);
const setLoading = useCallback(() => {
setState({
value: undefined,
loading: true,
error: undefined,
});
}, []);
const setError = useCallback((error) => {
setState({
value: undefined,
loading: false,
error,
});
}, []);
return useMemo(() => ({
value: state.value,
setValue,
loading: state.loading,
setLoading,
error: state.error,
setError,
}), [state, setValue, setLoading, setError]);
}