aboutsummaryrefslogtreecommitdiff
path: root/src/reactHelper.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/reactHelper.js')
-rw-r--r--src/reactHelper.js40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/reactHelper.js b/src/reactHelper.js
new file mode 100644
index 00000000..c67f252b
--- /dev/null
+++ b/src/reactHelper.js
@@ -0,0 +1,40 @@
+import { useRef, useEffect, useCallback } from 'react';
+import { useDispatch } from 'react-redux';
+import { errorsActions } from './store';
+
+export const usePrevious = (value) => {
+ const ref = useRef();
+ useEffect(() => {
+ ref.current = value;
+ });
+ return ref.current;
+};
+
+/* eslint-disable */
+export const useEffectAsync = (effect, deps) => {
+ const dispatch = useDispatch();
+ const ref = useRef();
+ useEffect(() => {
+ effect()
+ .then((result) => ref.current = result)
+ .catch((error) => dispatch(errorsActions.push(error.message)));
+
+ return () => {
+ const result = ref.current;
+ if (result) {
+ result();
+ }
+ };
+ }, [...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);
+};