UNPKG

@suspensive/react

Version:

Suspensive interfaces for react

58 lines (55 loc) 3.35 kB
'use client'; Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); const require_objectSpread2 = require('./_virtual/_@oxc-project_runtime@0.130.0/helpers/objectSpread2.cjs'); const require_SuspensiveError = require('./models/SuspensiveError.cjs'); const require_useIsChanged = require('./hooks/useIsChanged.cjs'); const require_increase = require('./utils/increase.cjs'); let react = require("react"); let react_jsx_runtime = require("react/jsx-runtime"); //#region src/ErrorBoundaryGroup.tsx const ErrorBoundaryGroupContext = (0, react.createContext)(void 0); if (process.env.NODE_ENV === "development") ErrorBoundaryGroupContext.displayName = "ErrorBoundaryGroupContext"; /** * ErrorBoundaryGroup is a wrapper component that allows you to manage multiple ErrorBoundaries easily. * ErrorBoundaries as children of nested ErrorBoundaryGroup will also be reset by parent ErrorBoundaryGroup.Consumer. * @see {@link https://suspensive.org/docs/react/ErrorBoundaryGroup Suspensive Docs} */ const ErrorBoundaryGroup = Object.assign(({ blockOutside = false, children }) => { const [resetKey, reset] = (0, react.useReducer)(require_increase.increase, 0); const parentGroup = (0, react.useContext)(ErrorBoundaryGroupContext); const isParentGroupResetKeyChanged = require_useIsChanged.useIsChanged(parentGroup === null || parentGroup === void 0 ? void 0 : parentGroup.resetKey); (0, react.useEffect)(() => { if (!blockOutside && isParentGroupResetKeyChanged) reset(); }, [isParentGroupResetKeyChanged, blockOutside]); const value = (0, react.useMemo)(() => ({ reset, resetKey }), [resetKey]); return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ErrorBoundaryGroupContext.Provider, { value, children }); }, { displayName: "ErrorBoundaryGroup", with: (errorBoundaryGroupProps, Component) => Object.assign((props) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ErrorBoundaryGroup, require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, errorBoundaryGroupProps), {}, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Component, require_objectSpread2._objectSpread2({}, props)) })), { displayName: `${ErrorBoundaryGroup.displayName}.with(${Component.displayName || Component.name || "Component"})` }), Consumer: ({ children }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: children(useErrorBoundaryGroup()) }) }); /** * This hook provides the reset method for the ErrorBoundaryGroup. * Must be used within an ErrorBoundaryGroup component. * @see {@link https://suspensive.org/docs/react/ErrorBoundaryGroup#useerrorboundarygroup Suspensive Docs} */ const useErrorBoundaryGroup = () => { const group = (0, react.useContext)(ErrorBoundaryGroupContext); require_SuspensiveError.SuspensiveError.assert(group != null, require_SuspensiveError.Message_useErrorBoundaryGroup_this_hook_should_be_called_in_ErrorBoundary_props_children); return (0, react.useMemo)(() => ({ /** * When you want to reset multiple ErrorBoundaries as children of ErrorBoundaryGroup, You can use this reset */ reset: group.reset }), [group.reset]); }; //#endregion exports.ErrorBoundaryGroup = ErrorBoundaryGroup; exports.ErrorBoundaryGroupContext = ErrorBoundaryGroupContext; exports.useErrorBoundaryGroup = useErrorBoundaryGroup; //# sourceMappingURL=ErrorBoundaryGroup.cjs.map