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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1077x 1077x 1077x 281x 281x 236x 281x 45x 45x 1x 44x 44x 44x 44x 19x 19x 1077x 1077x 1077x 1077x 1077x 1x 33x 33x 22x 22x 1x 554x 554x 554x 554x 554x 554x 554x 10x 10x 1x 9x 9x 9x 9x 554x 554x 554x 24x 554x 554x 554x 554x 554x 554x | import { useQuery, useMutation, useQueryClient } from "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, rest) {
return useQuery({
queryKey: queryKey,
queryFn: async () => {
try {
const response = await axios(axiosParameters);
return response.data;
} catch (e) {
// Stryker disable next-line OptionalChaining
if (e.response?.data?.message) {
toast.error(e.response.data.message);
} else {
const errorMessage = `Error communicating with backend via ${axiosParameters.method} on ${axiosParameters.url}`;
toast.error(errorMessage);
}
throw e;
}
},
initialData: initialData,
...rest,
});
}
const wrappedParams = async (params) => {
return await (
await axios(params)
).data;
};
export function useBackendMutation(
objectToAxiosParams,
useMutationParams,
queryKey = null,
) {
const queryClient = useQueryClient();
return useMutation((object) => wrappedParams(objectToAxiosParams(object)), {
onError: (error) => {
// Stryker disable next-line OptionalChaining : we want to check if each nested object is there but we dont want to write tests for each specific case
if (error.response?.data?.message) {
toast.error(error.response.data.message);
} else {
const errorMessage = `Error communicating with backend via ${error.response.config.method} on ${error.response.config.url}`;
toast.error(errorMessage);
}
},
// Stryker disable all : Not sure how to set up the complex behavior needed to test this
onSettled: () => {
if (queryKey !== null) queryClient.invalidateQueries(queryKey);
},
// Stryker restore all
retry: false,
...useMutationParams,
});
}
|