aboutsummaryrefslogtreecommitdiff
path: root/modern/src/reactHelper.js
diff options
context:
space:
mode:
authorAnton Tananaev <anton@traccar.org>2022-05-21 09:49:26 -0700
committerAnton Tananaev <anton@traccar.org>2022-05-21 09:49:26 -0700
commit7e96816f94314dcdf071eeee6e74a95bcace329f (patch)
tree21938fcdbe6e8b7a651308555af77c49dc59e1c2 /modern/src/reactHelper.js
parent79dd42f0bdeef6d9f6331c0ec8301b2631a9cb90 (diff)
downloadtrackermap-web-7e96816f94314dcdf071eeee6e74a95bcace329f.tar.gz
trackermap-web-7e96816f94314dcdf071eeee6e74a95bcace329f.tar.bz2
trackermap-web-7e96816f94314dcdf071eeee6e74a95bcace329f.zip
Implement API error handling
Diffstat (limited to 'modern/src/reactHelper.js')
-rw-r--r--modern/src/reactHelper.js23
1 files changed, 20 insertions, 3 deletions
diff --git a/modern/src/reactHelper.js b/modern/src/reactHelper.js
index 124bb40a..c67f252b 100644
--- a/modern/src/reactHelper.js
+++ b/modern/src/reactHelper.js
@@ -1,4 +1,6 @@
-import { useRef, useEffect } from 'react';
+import { useRef, useEffect, useCallback } from 'react';
+import { useDispatch } from 'react-redux';
+import { errorsActions } from './store';
export const usePrevious = (value) => {
const ref = useRef();
@@ -10,14 +12,29 @@ export const usePrevious = (value) => {
/* eslint-disable */
export const useEffectAsync = (effect, deps) => {
+ const dispatch = useDispatch();
const ref = useRef();
useEffect(() => {
- effect().then((result) => ref.current = result);
+ effect()
+ .then((result) => ref.current = result)
+ .catch((error) => dispatch(errorsActions.push(error.message)));
+
return () => {
const result = ref.current;
if (result) {
result();
}
};
- }, deps);
+ }, [...deps, dispatch]);
+};
+
+export const useCatch = (method) => {
+ const dispatch = useDispatch();
+ return (...parameters) => {
+ method(...parameters).catch((error) => dispatch(errorsActions.push(error.message)));
+ };
+};
+
+export const useCatchCallback = (method, deps) => {
+ return useCallback(useCatch(method), deps);
};