Next.js website for Rocky Mountain Vending company featuring: - Product catalog with Stripe integration - Service areas and parts pages - Admin dashboard with Clerk authentication - SEO optimized pages with JSON-LD structured data Co-authored-by: Cursor <cursoragent@cursor.com>
48 lines
No EOL
2 KiB
Text
48 lines
No EOL
2 KiB
Text
import { DEFAULT_SEGMENT_KEY } from '../../../../shared/lib/segment';
|
|
import { createRouterCacheKey } from '../create-router-cache-key';
|
|
export function findHeadInCache(cache, parallelRoutes) {
|
|
return findHeadInCacheImpl(cache, parallelRoutes, '', '');
|
|
}
|
|
function findHeadInCacheImpl(cache, parallelRoutes, keyPrefix, keyPrefixWithoutSearchParams) {
|
|
const isLastItem = Object.keys(parallelRoutes).length === 0;
|
|
if (isLastItem) {
|
|
// Returns the entire Cache Node of the segment whose head we will render.
|
|
return [
|
|
cache,
|
|
keyPrefix,
|
|
keyPrefixWithoutSearchParams
|
|
];
|
|
}
|
|
// First try the 'children' parallel route if it exists
|
|
// when starting from the "root", this corresponds with the main page component
|
|
const parallelRoutesKeys = Object.keys(parallelRoutes).filter((key)=>key !== 'children');
|
|
// if we are at the root, we need to check the children slot first
|
|
if ('children' in parallelRoutes) {
|
|
parallelRoutesKeys.unshift('children');
|
|
}
|
|
for (const key of parallelRoutesKeys){
|
|
const [segment, childParallelRoutes] = parallelRoutes[key];
|
|
// If the parallel is not matched and using the default segment,
|
|
// skip searching the head from it.
|
|
if (segment === DEFAULT_SEGMENT_KEY) {
|
|
continue;
|
|
}
|
|
const childSegmentMap = cache.parallelRoutes.get(key);
|
|
if (!childSegmentMap) {
|
|
continue;
|
|
}
|
|
const cacheKey = createRouterCacheKey(segment);
|
|
const cacheKeyWithoutSearchParams = createRouterCacheKey(segment, true);
|
|
const cacheNode = childSegmentMap.get(cacheKey);
|
|
if (!cacheNode) {
|
|
continue;
|
|
}
|
|
const item = findHeadInCacheImpl(cacheNode, childParallelRoutes, keyPrefix + '/' + cacheKey, keyPrefix + '/' + cacheKeyWithoutSearchParams);
|
|
if (item) {
|
|
return item;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
//# sourceMappingURL=find-head-in-cache.js.map |