@suspensive/react
Version:
Suspensive interfaces for react
58 lines (55 loc) • 3.35 kB
JavaScript
'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