Skip to content

feat: global product options - #13817

Merged
NicolasGorga merged 120 commits into
developfrom
chore/add-many-to-many-between-product-and-option
Jun 24, 2026
Merged

feat: global product options#13817
NicolasGorga merged 120 commits into
developfrom
chore/add-many-to-many-between-product-and-option

Conversation

@willbouch

@willbouch willbouch commented Oct 22, 2025

Copy link
Copy Markdown
Contributor

What

  • add support for global product options i.e. make the relationship between Product Options and Product many-to-many

How

  • by introducing 2 pivot tables
  • product_product_option -> linking options and products
  • product_product_option_value -> allows linking a subset of option values with a product
CleanShot_2025-10-21_at_13 27 29

@changeset-bot

changeset-bot Bot commented Oct 22, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 5ad08d9

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

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

@vercel

vercel Bot commented Oct 22, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

9 Skipped Deployments
Project Deployment Actions Updated (UTC)
api-reference Ignored Ignored Apr 30, 2026 10:25am
api-reference-v2 Ignored Ignored Preview Apr 30, 2026 10:25am
bloom-docs Ignored Ignored Preview Apr 30, 2026 10:25am
cloud-docs Ignored Ignored Preview Apr 30, 2026 10:25am
docs-ui Ignored Ignored Preview Apr 30, 2026 10:25am
docs-v2 Ignored Ignored Preview Apr 30, 2026 10:25am
medusa-docs Ignored Ignored Preview Apr 30, 2026 10:25am
resources-docs Ignored Ignored Preview Apr 30, 2026 10:25am
user-guide Ignored Ignored Preview Apr 30, 2026 10:25am

Request Review

@NicolasGorga

Copy link
Copy Markdown
Contributor

Hey Will, one thing i noticed is if the pivot entity is not defined between product and product option, additional columns can't be added to the pivot table, like for example the rank field, to be able to specify for a given product, the order you want its options to show.

@willbouch

Copy link
Copy Markdown
Contributor Author

Hey Will, one thing i noticed is if the pivot entity is not defined between product and product option, additional columns can't be added to the pivot table, like for example the rank field, to be able to specify for a given product, the order you want its options to show.

The rank field will be on product_option_value and also on the pivot table between product_option_value and product_option_option. Will take care of that later but you are right. I guess that I will have to create a model for the pivot table anyway, so will do it now

@willbouch willbouch changed the title chore(product,types): change relationship between product and option to many-to-many WIP chore(product,types): change relationship between product and option to many-to-many Oct 23, 2025
@willbouch willbouch changed the title WIP chore(product,types): change relationship between product and option to many-to-many WIP Oct 23, 2025
@willbouch willbouch changed the title WIP WIP - feat(): product options redesign (server-side) Oct 28, 2025
@willbouch willbouch changed the title WIP - feat(): product options redesign (server-side) WIP - feat(medusa,product,core-flows,types): product options redesign (server-side) Nov 3, 2025
shahednasser and others added 19 commits June 3, 2026 16:23
…many-between-product-and-option

# Conflicts:
#	packages/admin/dashboard/src/components/inputs/combobox/combobox.tsx
#	packages/admin/dashboard/src/components/layout/nav-item/nav-item.tsx
#	packages/admin/dashboard/src/i18n/translations/$schema.json
#	packages/core/js-sdk/src/admin/index.ts
#	packages/modules/product/src/services/product-module-service.ts
#	www/utils/generated/oas-output/base/store.oas.base.yaml
…rework product option values views and add dedicated endpoints (#15810)

* Rework product option values views and introduce dedicated endpoints

* Changeset

* Add .js ext
@NicolasGorga

Copy link
Copy Markdown
Contributor

/snapshot-this

@github-actions

Copy link
Copy Markdown
Contributor

🚀 A snapshot release has been made for this PR

Test the snapshots by updating your package.json with the newly published versions:

yarn add @medusajs/admin-bundler@2.17.0-snapshot-20260624135445
yarn add @medusajs/admin-sdk@2.17.0-snapshot-20260624135445
yarn add @medusajs/admin-shared@2.17.0-snapshot-20260624135445
yarn add @medusajs/admin-vite-plugin@2.17.0-snapshot-20260624135445
yarn add @medusajs/dashboard@2.17.0-snapshot-20260624135445
yarn add create-medusa-app@2.17.0-snapshot-20260624135445
yarn add @medusajs/http-types-generator@2.17.0-snapshot-20260624135445
yarn add @medusajs/cli@2.17.0-snapshot-20260624135445
yarn add medusa-dev-cli@2.17.0-snapshot-20260624135445
yarn add @medusajs/medusa-oas-cli@2.17.0-snapshot-20260624135445
yarn add @medusajs/core-flows@2.17.0-snapshot-20260624135445
yarn add @medusajs/framework@2.17.0-snapshot-20260624135445
yarn add @medusajs/js-sdk@2.17.0-snapshot-20260624135445
yarn add @medusajs/modules-sdk@2.17.0-snapshot-20260624135445
yarn add @medusajs/orchestration@2.17.0-snapshot-20260624135445
yarn add @medusajs/types@2.17.0-snapshot-20260624135445
yarn add @medusajs/utils@2.17.0-snapshot-20260624135445
yarn add @medusajs/workflows-sdk@2.17.0-snapshot-20260624135445
yarn add @medusajs/deps@2.17.0-snapshot-20260624135445
yarn add @medusajs/icons@2.17.0-snapshot-20260624135445
yarn add @medusajs/ui@4.1.17-snapshot-20260624135445
yarn add @medusajs/ui-preset@2.17.0-snapshot-20260624135445
yarn add @medusajs/eslint-plugin@2.17.0-snapshot-20260624135445
yarn add @medusajs/medusa@2.17.0-snapshot-20260624135445
yarn add @medusajs/telemetry@2.17.0-snapshot-20260624135445
yarn add @medusajs/test-utils@2.17.0-snapshot-20260624135445
yarn add @medusajs/analytics@2.17.0-snapshot-20260624135445
yarn add @medusajs/api-key@2.17.0-snapshot-20260624135445
yarn add @medusajs/auth@2.17.0-snapshot-20260624135445
yarn add @medusajs/cache-inmemory@2.17.0-snapshot-20260624135445
yarn add @medusajs/cache-redis@2.17.0-snapshot-20260624135445
yarn add @medusajs/caching@2.17.0-snapshot-20260624135445
yarn add @medusajs/cart@2.17.0-snapshot-20260624135445
yarn add @medusajs/currency@2.17.0-snapshot-20260624135445
yarn add @medusajs/customer@2.17.0-snapshot-20260624135445
yarn add @medusajs/event-bus-local@2.17.0-snapshot-20260624135445
yarn add @medusajs/event-bus-redis@2.17.0-snapshot-20260624135445
yarn add @medusajs/file@2.17.0-snapshot-20260624135445
yarn add @medusajs/fulfillment@2.17.0-snapshot-20260624135445
yarn add @medusajs/index@2.17.0-snapshot-20260624135445
yarn add @medusajs/inventory@2.17.0-snapshot-20260624135445
yarn add @medusajs/link-modules@2.17.0-snapshot-20260624135445
yarn add @medusajs/locking@2.17.0-snapshot-20260624135445
yarn add @medusajs/notification@2.17.0-snapshot-20260624135445
yarn add @medusajs/order@2.17.0-snapshot-20260624135445
yarn add @medusajs/payment@2.17.0-snapshot-20260624135445
yarn add @medusajs/pricing@2.17.0-snapshot-20260624135445
yarn add @medusajs/product@2.17.0-snapshot-20260624135445
yarn add @medusajs/promotion@2.17.0-snapshot-20260624135445
yarn add @medusajs/analytics-local@2.17.0-snapshot-20260624135445
yarn add @medusajs/analytics-posthog@2.17.0-snapshot-20260624135445
yarn add @medusajs/auth-emailpass@2.17.0-snapshot-20260624135445
yarn add @medusajs/auth-github@2.17.0-snapshot-20260624135445
yarn add @medusajs/auth-google@2.17.0-snapshot-20260624135445
yarn add @medusajs/caching-redis@2.17.0-snapshot-20260624135445
yarn add @medusajs/file-local@2.17.0-snapshot-20260624135445
yarn add @medusajs/file-s3@2.17.0-snapshot-20260624135445
yarn add @medusajs/fulfillment-manual@2.17.0-snapshot-20260624135445
yarn add @medusajs/locking-postgres@2.17.0-snapshot-20260624135445
yarn add @medusajs/locking-redis@2.17.0-snapshot-20260624135445
yarn add @medusajs/notification-local@2.17.0-snapshot-20260624135445
yarn add @medusajs/notification-sendgrid@2.17.0-snapshot-20260624135445
yarn add @medusajs/payment-stripe@2.17.0-snapshot-20260624135445
yarn add @medusajs/rbac@2.17.0-snapshot-20260624135445
yarn add @medusajs/region@2.17.0-snapshot-20260624135445
yarn add @medusajs/sales-channel@2.17.0-snapshot-20260624135445
yarn add @medusajs/settings@2.17.0-snapshot-20260624135445
yarn add @medusajs/stock-location@2.17.0-snapshot-20260624135445
yarn add @medusajs/store@2.17.0-snapshot-20260624135445
yarn add @medusajs/tax@2.17.0-snapshot-20260624135445
yarn add @medusajs/translation@2.17.0-snapshot-20260624135445
yarn add @medusajs/user@2.17.0-snapshot-20260624135445
yarn add @medusajs/workflow-engine-inmemory@2.17.0-snapshot-20260624135445
yarn add @medusajs/workflow-engine-redis@2.17.0-snapshot-20260624135445
yarn add @medusajs/draft-order@2.17.0-snapshot-20260624135445
yarn add @medusajs/loyalty-plugin@2.17.0-snapshot-20260624135445

Latest commit: 4495ea7

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.