@tolokoban/ui
Version:
React components with theme
114 lines • 8.28 kB
JavaScript
/* eslint-disable react-hooks/exhaustive-deps */
import React from "react";
/**
* If an exception occurs during this effect, it can be caugth by a Error Boundary.
* With `useEffect()` such exceptions will just be silent.
*/
export function useThrowableCallback(callback, dependencies, errorMessage) {
const protectedAction = useProtectedAction(callback, errorMessage);
return React.useCallback(protectedAction, [
protectedAction,
...dependencies,
]);
}
/**
* If an exception occurs during this effect, it can be caugth by a Error Boundary.
* With `useEffect()` such exceptions will just be silent.
*/
export function useThrowableAsyncCallback(callback, dependencies, errorMessage) {
const protectedCallback = useProtectedAsyncAction(callback, errorMessage);
return React.useCallback(protectedCallback, [
protectedCallback,
...dependencies,
]);
}
/**
* If an exception occurs during this effect, it can be caugth by a Error Boundary.
* With `useEffect()` such exceptions will just be silent.
*/
export function useThrowableEffect(action, dependencies, errorMessage) {
const protectedAction = useProtectedAction(action, errorMessage);
return React.useEffect(protectedAction, dependencies);
}
/**
* If an exception occurs during this effect, it can be caugth by a Error Boundary.
* With `useEffect()` such exceptions will just be silent.
*/
export function useThrowableAsyncEffect(action, dependencies, errorMessage) {
const protectedAction = useProtectedAsyncAction(action, errorMessage);
return React.useEffect(protectedAction, dependencies);
}
function useProtectedAction(callback, errorMessage) {
const [, setError] = React.useState();
return React.useMemo(() => {
switch (typeof errorMessage) {
case "string":
return () => {
try {
return callback();
}
catch (ex) {
setError(() => {
const err = new Error(errorMessage);
err.cause = ex;
throw err;
});
}
};
case "function":
return () => {
try {
return callback();
}
catch (ex) {
setError(() => {
const err = new Error(errorMessage());
err.cause = ex;
throw err;
});
}
};
default:
return () => {
try {
return callback();
}
catch (ex) {
setError(() => {
throw ex;
});
}
};
}
}, [callback, errorMessage]);
}
function useProtectedAsyncAction(callback, errorMessage) {
const [, setError] = React.useState();
return React.useMemo(() => {
switch (typeof errorMessage) {
case "string":
return (...args) => {
callback(...args).catch((ex) => setError(() => {
const err = new Error(errorMessage);
err.cause = ex;
throw err;
}));
};
case "function":
return (...args) => {
callback(...args).catch((ex) => setError(() => {
const err = new Error(errorMessage());
err.cause = ex;
throw err;
}));
};
default:
return (...args) => {
callback(...args).catch((ex) => setError(() => {
throw ex;
}));
};
}
}, [callback, errorMessage]);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyb3dhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3Rocm93YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnREFBZ0Q7QUFDaEQsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFBO0FBRXpCOzs7R0FHRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FDaEMsUUFBa0MsRUFDbEMsWUFBa0MsRUFDbEMsWUFBc0M7SUFFdEMsTUFBTSxlQUFlLEdBQUcsa0JBQWtCLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFBO0lBQ2xFLE9BQU8sS0FBSyxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUU7UUFDdEMsZUFBZTtRQUNmLEdBQUcsWUFBWTtLQUNsQixDQUFDLENBQUE7QUFDTixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHlCQUF5QixDQUNyQyxRQUEyQyxFQUMzQyxZQUFrQyxFQUNsQyxZQUFzQztJQUV0QyxNQUFNLGlCQUFpQixHQUFHLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQTtJQUN6RSxPQUFPLEtBQUssQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUU7UUFDeEMsaUJBQWlCO1FBQ2pCLEdBQUcsWUFBWTtLQUNsQixDQUFDLENBQUE7QUFDTixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUM5QixNQUE0QixFQUM1QixZQUFtQyxFQUNuQyxZQUFzQztJQUV0QyxNQUFNLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUE7SUFDaEUsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FBQTtBQUN6RCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUNuQyxNQUEyQixFQUMzQixZQUFtQyxFQUNuQyxZQUFzQztJQUV0QyxNQUFNLGVBQWUsR0FBRyx1QkFB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