46 lines
913 B
JavaScript
46 lines
913 B
JavaScript
import { useCallback, useMemo } from "react";
|
|
import { useToast } from "../context/ToastContext";
|
|
|
|
const useHttpRequest = () => {
|
|
const { error } = useToast();
|
|
|
|
const handleError = useCallback(
|
|
(err) => {
|
|
const message = `${err.title} ${err.correlationId}`;
|
|
error(message);
|
|
},
|
|
[error]
|
|
);
|
|
|
|
const defaultOptions = useMemo(
|
|
() => ({
|
|
onCompleted: () => {},
|
|
onError: handleError
|
|
}),
|
|
[handleError]
|
|
);
|
|
|
|
const exec = useCallback(
|
|
async (request, options) => {
|
|
const internalOptions = { ...defaultOptions, ...options };
|
|
const { onCompleted, onError } = internalOptions;
|
|
|
|
try {
|
|
const result = await request();
|
|
onCompleted(result);
|
|
return result;
|
|
} catch (error) {
|
|
onError(error);
|
|
throw error;
|
|
}
|
|
},
|
|
[defaultOptions]
|
|
);
|
|
|
|
return {
|
|
exec
|
|
};
|
|
};
|
|
|
|
export default useHttpRequest;
|