next
Version:
The React Framework
156 lines (154 loc) • 5.05 kB
JavaScript
'use client';
;
Object.defineProperty(exports, "__esModule", {
value: true
});
0 && (module.exports = {
SEGMENT_EXPLORER_SIMULATED_ERROR_MESSAGE: null,
SegmentBoundaryTriggerNode: null,
SegmentStateProvider: null,
SegmentViewNode: null,
SegmentViewStateNode: null,
useSegmentState: null
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: all[name]
});
}
_export(exports, {
SEGMENT_EXPLORER_SIMULATED_ERROR_MESSAGE: function() {
return SEGMENT_EXPLORER_SIMULATED_ERROR_MESSAGE;
},
SegmentBoundaryTriggerNode: function() {
return SegmentBoundaryTriggerNode;
},
SegmentStateProvider: function() {
return SegmentStateProvider;
},
SegmentViewNode: function() {
return SegmentViewNode;
},
SegmentViewStateNode: function() {
return SegmentViewStateNode;
},
useSegmentState: function() {
return useSegmentState;
}
});
const _jsxruntime = require("react/jsx-runtime");
const _react = require("react");
const _nextdevtools = require("next/dist/compiled/next-devtools");
const _notfound = require("../../../client/components/not-found");
const SEGMENT_EXPLORER_SIMULATED_ERROR_MESSAGE = 'NEXT_DEVTOOLS_SIMULATED_ERROR';
function SegmentTrieNode({ type, pagePath }) {
const { boundaryType, setBoundaryType } = useSegmentState();
const nodeState = (0, _react.useMemo)(()=>{
return {
type,
pagePath,
boundaryType,
setBoundaryType
};
}, [
type,
pagePath,
boundaryType,
setBoundaryType
]);
// Use `useLayoutEffect` to ensure the state is updated during suspense.
// `useEffect` won't work as the state is preserved during suspense.
(0, _react.useLayoutEffect)(()=>{
_nextdevtools.dispatcher.segmentExplorerNodeAdd(nodeState);
return ()=>{
_nextdevtools.dispatcher.segmentExplorerNodeRemove(nodeState);
};
}, [
nodeState
]);
return null;
}
function NotFoundSegmentNode() {
(0, _notfound.notFound)();
}
function ErrorSegmentNode() {
throw Object.defineProperty(new Error(SEGMENT_EXPLORER_SIMULATED_ERROR_MESSAGE), "__NEXT_ERROR_CODE", {
value: "E394",
enumerable: false,
configurable: true
});
}
const forever = new Promise(()=>{});
function LoadingSegmentNode() {
(0, _react.use)(forever);
return null;
}
function SegmentViewStateNode({ page }) {
(0, _react.useLayoutEffect)(()=>{
_nextdevtools.dispatcher.segmentExplorerUpdateRouteState(page);
return ()=>{
_nextdevtools.dispatcher.segmentExplorerUpdateRouteState('');
};
}, [
page
]);
return null;
}
function SegmentBoundaryTriggerNode() {
const { boundaryType } = useSegmentState();
let segmentNode = null;
if (boundaryType === 'loading') {
segmentNode = /*#__PURE__*/ (0, _jsxruntime.jsx)(LoadingSegmentNode, {});
} else if (boundaryType === 'not-found') {
segmentNode = /*#__PURE__*/ (0, _jsxruntime.jsx)(NotFoundSegmentNode, {});
} else if (boundaryType === 'error') {
segmentNode = /*#__PURE__*/ (0, _jsxruntime.jsx)(ErrorSegmentNode, {});
}
return segmentNode;
}
function SegmentViewNode({ type, pagePath, children }) {
const segmentNode = /*#__PURE__*/ (0, _jsxruntime.jsx)(SegmentTrieNode, {
type: type,
pagePath: pagePath
}, type);
return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
children: [
segmentNode,
children
]
});
}
const SegmentStateContext = /*#__PURE__*/ (0, _react.createContext)({
boundaryType: null,
setBoundaryType: ()=>{}
});
function SegmentStateProvider({ children }) {
const [boundaryType, setBoundaryType] = (0, _react.useState)(null);
const [errorBoundaryKey, setErrorBoundaryKey] = (0, _react.useState)(0);
const reloadBoundary = (0, _react.useCallback)(()=>setErrorBoundaryKey((prev)=>prev + 1), []);
const setBoundaryTypeAndReload = (0, _react.useCallback)((type)=>{
if (type === null) {
reloadBoundary();
}
setBoundaryType(type);
}, [
reloadBoundary
]);
return /*#__PURE__*/ (0, _jsxruntime.jsx)(SegmentStateContext.Provider, {
value: {
boundaryType,
setBoundaryType: setBoundaryTypeAndReload
},
children: children
}, errorBoundaryKey);
}
function useSegmentState() {
return (0, _react.useContext)(SegmentStateContext);
}
if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {
Object.defineProperty(exports.default, '__esModule', { value: true });
Object.assign(exports.default, exports);
module.exports = exports.default;
}
//# sourceMappingURL=segment-explorer-node.js.map