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 485x 485x 485x 485x 485x 485x 485x 485x 485x 183x 183x 101x 182x 82x 82x 17x 17x 82x 82x 82x 485x 485x 485x 485x 485x 1x 67x 67x 42x 42x 1x 1827x 1827x 1827x 1827x 1827x 1827x 1827x 1827x 2x 1827x 1827x 1827x 65x 59x 59x 59x 71x 59x 59x 59x 1827x 1827x 1827x 1827x 1827x 1827x | 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,
});
}
|