66 lines
2.5 KiB
JavaScript
66 lines
2.5 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "createOptimisticTree", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return createOptimisticTree;
|
|
}
|
|
});
|
|
const _matchsegments = require("../match-segments");
|
|
function createOptimisticTree(segments, flightRouterState, parentRefetch) {
|
|
const [existingSegment, existingParallelRoutes, url, refresh, isRootLayout] = flightRouterState || [
|
|
null,
|
|
{}
|
|
];
|
|
const segment = segments[0];
|
|
const isLastSegment = segments.length === 1;
|
|
const segmentMatches = existingSegment !== null && (0, _matchsegments.matchSegment)(existingSegment, segment);
|
|
// if there are multiple parallel routes at this level, we need to refetch here
|
|
// to ensure we get the correct tree. This is because we don't know which
|
|
// parallel route will match the next segment.
|
|
const hasMultipleParallelRoutes = Object.keys(existingParallelRoutes).length > 1;
|
|
const shouldRefetchThisLevel = !flightRouterState || !segmentMatches || hasMultipleParallelRoutes;
|
|
let parallelRoutes = {};
|
|
if (existingSegment !== null && segmentMatches) {
|
|
parallelRoutes = existingParallelRoutes;
|
|
}
|
|
let childTree;
|
|
// if there's multiple parallel routes at this level, we shouldn't create an
|
|
// optimistic tree for the next level because we don't know which one will
|
|
// match the next segment.
|
|
if (!isLastSegment && !hasMultipleParallelRoutes) {
|
|
const childItem = createOptimisticTree(segments.slice(1), parallelRoutes ? parallelRoutes.children : null, parentRefetch || shouldRefetchThisLevel);
|
|
childTree = childItem;
|
|
}
|
|
const result = [
|
|
segment,
|
|
{
|
|
...parallelRoutes,
|
|
...childTree ? {
|
|
children: childTree
|
|
} : {}
|
|
}
|
|
];
|
|
if (url) {
|
|
result[2] = url;
|
|
}
|
|
if (!parentRefetch && shouldRefetchThisLevel) {
|
|
result[3] = "refetch";
|
|
} else if (segmentMatches && refresh) {
|
|
result[3] = refresh;
|
|
}
|
|
if (segmentMatches && isRootLayout) {
|
|
result[4] = isRootLayout;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
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=create-optimistic-tree.js.map
|