UNPKG

next

Version:

The React Framework

156 lines (154 loc) 5.05 kB
'use client'; "use strict"; 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