UNPKG

@tolokoban/ui

Version:

React components with theme

114 lines 8.28 kB
/* 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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