Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 550x 550x 550x 550x 550x 550x 550x 550x 550x 202x 202x 113x 201x 89x 89x 25x 25x 89x 89x 89x 550x 550x 550x 550x 550x 1x 70x 70x 45x 45x 1x 2011x 2011x 2011x 2011x 2011x 2011x 2011x 2011x 2x 2011x 2011x 2011x 68x 61x 61x 61x 73x 61x 61x 61x 2011x 2011x 2011x 2011x 2011x 2011x | import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
import axios from "axios";
import { toast } from "react-toastify";
// example
// queryKey ["/api/users/all"] for "api/users/all"
// queryKey ["/api/users","4"] for "/api/users?id=4"
// For axiosParameters
//
// {
// method: 'post',
// url: '/user/12345',
// data: {
// firstName: 'Fred',
// lastName: 'Flintstone'
// }
// }
//
// GET Example:
// useBackend(
// ["/api/admin/users"],
// { method: "GET", url: "/api/admin/users" },
// []
// );
export function useBackend(
queryKey,
axiosParameters,
initialData,
suppressToasts = false,
options = {},
) {
return useQuery({
queryKey: queryKey,
queryFn: async () => {
try {
const response = await axios(axiosParameters);
return response.data;
} catch (e) {
const errorMessage = `Error communicating with backend via ${axiosParameters.method} on ${axiosParameters.url}`;
if (!suppressToasts) {
toast(errorMessage);
}
console.error(errorMessage, e);
throw e;
}
},
initialData: initialData,
...options,
});
}
const wrappedParams = async (params) => {
// Directly returning the promise allows useMutation to handle rejections.
const response = await axios(params);
return response.data;
};
export function useBackendMutation(
objectToAxiosParams,
useMutationParams,
queryKey = null,
) {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (object) => wrappedParams(objectToAxiosParams(object)),
onError: (data) => {
toast(`${data}`);
},
// Stryker disable all: Not sure how to set up the complex behavior needed to test this
onSettled: () => {
if (queryKey !== null) {
// Handle array of query keys for cache invalidation
if (Array.isArray(queryKey)) {
queryKey.forEach((key) => {
queryClient.invalidateQueries({ queryKey: [key] });
});
}
}
},
// Stryker restore all
retry: false,
...useMutationParams,
});
}
|