remix-utils-rt
Version:
This package contains simple utility functions to use with [React Router](https://reactrouter.com/home).
54 lines • 1.9 kB
JavaScript
import { useNavigation, } from "react-router";
/**
* Derive the deprecated `fetcher.type` from the current state of a fetcher.
* @param fetcher The `fetcher` object returned form `useFetcher`
* @example
* let fetcher = useFetcher();
* let fetcherType = useFetcherType(fetcher);
* useEffect(() => {
* if (fetcherType === "done") // do something once fetcher is done
* }, [fetcherType]);
*/
export function useFetcherType(fetcher) {
let navigation = useNavigation();
return getFetcherType(fetcher, navigation);
}
/**
* Derive the deprecated `fetcher.type` from the current state of a fetcher
* and navigation.
* @param fetcher The `fetcher` object returned form `useFetcher`
* @param navigation The `Navigation` object returned from `useNavigation`
* @example
* let fetcher = useFetcher();
* let navigation = useNavigation();
* let fetcherType = getFetcherType(fetcher, navigation);
* useEffect(() => {
* if (fetcherType === "done") // do something once fetcher is done
* }, [fetcherType])
*/
export function getFetcherType(fetcher, navigation) {
if (fetcher.state === "idle" && fetcher.data != null)
return "done";
if (fetcher.state === "submitting")
return "actionSubmission";
if (fetcher.state === "loading" &&
fetcher.formMethod != null &&
navigation.formMethod !== "GET" &&
fetcher.data != null) {
return "actionReload";
}
if (fetcher.state === "loading" &&
fetcher.formMethod != null &&
navigation.formMethod !== "GET" &&
fetcher.data == null) {
return "actionRedirect";
}
if (navigation.state === "loading" && navigation.formMethod === "GET") {
return "loaderSubmission";
}
if (navigation.state === "loading" && navigation.formMethod == null) {
return "normalLoad";
}
return "init";
}
//# sourceMappingURL=fetcher-type.js.map