@tanstack/react-query
Version:
Hooks for managing, caching and syncing asynchronous and remote data in React
35 lines (34 loc) • 1.42 kB
JavaScript
"use client";
import { useQueryClient } from "./QueryClientProvider.js";
import * as React from "react";
import { notifyManager, replaceEqualDeep } from "@tanstack/query-core";
//#region src/useMutationState.ts
function useIsMutating(filters, queryClient) {
const client = useQueryClient(queryClient);
return useMutationState({ filters: {
...filters,
status: "pending"
} }, client).length;
}
function getResult(mutationCache, options) {
return mutationCache.findAll(options.filters).map((mutation) => options.select ? options.select(mutation) : mutation.state);
}
function useMutationState(options = {}, queryClient) {
const mutationCache = useQueryClient(queryClient).getMutationCache();
const optionsRef = React.useRef(options);
const result = React.useRef(null);
if (result.current === null) result.current = getResult(mutationCache, options);
React.useEffect(() => {
optionsRef.current = options;
});
return React.useSyncExternalStore(React.useCallback((onStoreChange) => mutationCache.subscribe(() => {
const nextResult = replaceEqualDeep(result.current, getResult(mutationCache, optionsRef.current));
if (result.current !== nextResult) {
result.current = nextResult;
notifyManager.schedule(onStoreChange);
}
}), [mutationCache]), () => result.current, () => result.current);
}
//#endregion
export { useIsMutating, useMutationState };
//# sourceMappingURL=useMutationState.js.map