UNPKG

@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
'use strict'; 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