fix: regression bug when multiple routes share parent paths#16330
Open
fix: regression bug when multiple routes share parent paths#16330
Conversation
Contributor
📦 esbuild Bundle Analysis for payloadThis analysis was generated by esbuild-bundle-analyzer. 🤖
Largest pathsThese visualization shows top 20 largest paths in the bundle.Meta file: packages/next/meta_index.json, Out file: esbuild/index.js
Meta file: packages/payload/meta_index.json, Out file: esbuild/index.js
Meta file: packages/payload/meta_shared.json, Out file: esbuild/exports/shared.js
Meta file: packages/richtext-lexical/meta_client.json, Out file: esbuild/exports/client_optimized/index.js
Meta file: packages/ui/meta_client.json, Out file: esbuild/exports/client_optimized/index.js
Meta file: packages/ui/meta_shared.json, Out file: esbuild/exports/shared_optimized/index.js
DetailsNext to the size is how much the size has increased or decreased compared with the base branch of this PR.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What & why
Fixes a regression where two custom admin views sharing a parent path could resolve incorrectly depending on the order they were registered in the views object.
For example, given:
Navigating to
/orders/123previously resolved toordersIndex(the prefix match registered first) instead of the more specificorderDetail. Reversing registration order changed the result, making behavior non-deterministic from a user perspective.The custom-view resolver used
Object.entries(views).find(...), which returns the first match. This change replaces the early-exit lookup with a full scan that ranks all matching views by specificity and picks the best one.Specificity ranking
When more than one custom view matches the current URL, the winner is chosen by:
/orders/:id→ 11 chars vs/orders→ 7 chars for/orders/123)exact: truewins over a prefix matchChanges
isPathMatchingRoutenow returnsfalse | { matchedLength, dynamicSegmentCount }instead ofboolean. Existing call sites that only use truthy/falsy semantics are unaffected.getCustomViewByRoute(Root) andgetCustomCollectionViewByRoutenow scan all matches and pick by specificity.isPathMatchingRoute.spec.ts.test/adminwith newSiblingRootViewandSiblingChildViewfixtures verifying the rendering at/sibling-rootand/sibling-root/:id.