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 481x 481x 481x 481x 481x 481x 481x 481x 481x 181x 181x 100x 180x 81x 81x 17x 17x 81x 81x 81x 481x 481x 481x 481x 481x 1x 66x 66x 41x 41x 1x 1710x 1710x 1710x 1710x 1710x 1710x 1710x 1710x 2x 1710x 1710x 1710x 64x 58x 58x 58x 70x 58x 58x 58x 1710x 1710x 1710x 1710x 1710x 1710x | 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,
});
}
|