@dark-engine/core
Version:
The lightweight and powerful UI rendering engine without dependencies and written in TypeScript (Browser, Node.js, Android, iOS, Windows, Linux, macOS)
37 lines (36 loc) • 1.38 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
exports.ErrorBoundary = exports.useError = void 0;
const internal_1 = require('../internal');
const utils_1 = require('../utils');
const use_update_1 = require('../use-update');
const use_effect_1 = require('../use-effect');
const component_1 = require('../component');
const use_state_1 = require('../use-state');
const use_event_1 = require('../use-event');
function useError() {
const cursor = (0, internal_1.__useCursor)();
const update = (0, use_update_1.useUpdate)();
const [error, setError] = (0, use_state_1.useState)(null);
const reset = (0, use_event_1.useEvent)(() => setError(null));
cursor.hook.setIsBoundary(true);
cursor.hook.setCatch(setError);
cursor.hook.setUpdate(update);
return [error, reset];
}
exports.useError = useError;
const ErrorBoundary = (0, component_1.component)(
({ fallback = null, renderFallback, onError, slot }) => {
const [error, reset] = useError();
(0, use_effect_1.useEffect)(() => {
if (!error) return;
(0, utils_1.detectIsFunction)(onError) && onError(error);
}, [error]);
return error ? ((0, utils_1.detectIsFunction)(renderFallback) ? renderFallback({ error, reset }) : fallback) : slot;
},
{
displayName: 'ErrorBoundary',
},
);
exports.ErrorBoundary = ErrorBoundary;
//# sourceMappingURL=boundary.js.map