Skip to content

Conversation

leobenzol
Copy link
Contributor

Closes #12348

This PR adds support for the missing route segment types available in react-router, namely splat(called catch-all in next.js) routes and optional static/dynamic/splat routes.

  1. Added translation from folder name to react-router symbol with the 4 .replace() lines
    Most people will only ever use optional splat and dynamic but I saw no reason to exclude the other two. I chose [[*]], [*], [[id]], (static) to somewhat align with next.js and the existing [id]. I used * instead of ... since that's what useParams() returns.
    Just my initial take, I can change the naming if needed or remove [*] and (static) if it's too much(they are somewhat useless after all)

  2. Allow routes with an optional segment at the end to be displayed in the sidebar menu items

  3. Fixed edge-case for splat routes in the logic for generating the react-router map, explained in comment

@leobenzol leobenzol requested a review from a team as a code owner September 18, 2025 18:16
Copy link

changeset-bot bot commented Sep 18, 2025

🦋 Changeset detected

Latest commit: d92105b

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 71 packages
Name Type
@medusajs/admin-vite-plugin Patch
@medusajs/dashboard Patch
@medusajs/admin-bundler Patch
@medusajs/medusa Patch
@medusajs/test-utils Patch
@medusajs/medusa-oas-cli Patch
integration-tests-http Patch
@medusajs/analytics Patch
@medusajs/api-key Patch
@medusajs/auth Patch
@medusajs/cart Patch
@medusajs/currency Patch
@medusajs/customer Patch
@medusajs/file Patch
@medusajs/fulfillment Patch
@medusajs/index Patch
@medusajs/inventory Patch
@medusajs/link-modules Patch
@medusajs/locking Patch
@medusajs/notification Patch
@medusajs/order Patch
@medusajs/payment Patch
@medusajs/pricing Patch
@medusajs/product Patch
@medusajs/promotion Patch
@medusajs/region Patch
@medusajs/sales-channel Patch
@medusajs/settings Patch
@medusajs/stock-location Patch
@medusajs/store Patch
@medusajs/tax Patch
@medusajs/user Patch
@medusajs/workflow-engine-inmemory Patch
@medusajs/workflow-engine-redis Patch
@medusajs/draft-order Patch
@medusajs/oas-github-ci Patch
@medusajs/cache-inmemory Patch
@medusajs/cache-redis Patch
@medusajs/event-bus-local Patch
@medusajs/event-bus-redis Patch
@medusajs/analytics-local Patch
@medusajs/analytics-posthog Patch
@medusajs/auth-emailpass Patch
@medusajs/auth-github Patch
@medusajs/auth-google Patch
@medusajs/file-local Patch
@medusajs/file-s3 Patch
@medusajs/fulfillment-manual Patch
@medusajs/locking-postgres Patch
@medusajs/locking-redis Patch
@medusajs/notification-local Patch
@medusajs/notification-sendgrid Patch
@medusajs/payment-stripe Patch
@medusajs/core-flows Patch
@medusajs/framework Patch
@medusajs/js-sdk Patch
@medusajs/modules-sdk Patch
@medusajs/orchestration Patch
@medusajs/types Patch
@medusajs/utils Patch
@medusajs/workflows-sdk Patch
@medusajs/cli Patch
@medusajs/telemetry Patch
@medusajs/admin-sdk Patch
@medusajs/admin-shared Patch
@medusajs/icons Patch
@medusajs/toolbox Patch
@medusajs/ui-preset Patch
create-medusa-app Patch
medusa-dev-cli Patch
@medusajs/ui Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Copy link

vercel bot commented Sep 18, 2025

@leobenzol is attempting to deploy a commit to the medusajs Team on Vercel.

A member of the Team first needs to authorize it.

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR is being reviewed by Cursor Bugbot

Details

Your team is on the Bugbot Free tier. On this plan, Bugbot will review limited PRs each billing cycle for each member of your team.

To receive Bugbot reviews on all of your PRs, visit the Cursor dashboard to activate Pro and start your 14-day free trial.

const leaf = createLeafRoute(Component, loader)
leaf.children = processParallelRoutes(parallelRoutes, currentFullPath)
route.children.push(leaf)
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Splat Route Configuration Overwrite Bug

For splat routes (* or *?), Object.assign(route, leaf) incorrectly overwrites the route's path, handle, loader, and children. This causes the route to lose its parent path and configuration, and can lead to errors if children becomes undefined. The code also processes remaining segments after a splat route, which violates React Router's terminal splat segment rule, creating invalid route structures.

Fix in Cursor Fix in Web

@willbouch
Copy link
Contributor

@adrien2p @carlos-r-l-rodrigues @fPolic @olivermrbl would like you opinion on this :)

@willbouch
Copy link
Contributor

@leobenzol the team is busy at the moment, I'll get a member to review this one asap

@leobenzol
Copy link
Contributor Author

@willbouch don't worry I know yall are busy for 2.10.4, I have no problem waiting until after the release 🙌

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: cannot create extension routes with catch-all or optional segments

2 participants