## Summary
**What** — What changes are introduced in this PR?
Export Zod as a dependency of `@medusajs/framework`.
Closes DX-2414
**Why** — Why are these changes relevant or necessary?
Zod is an essential part of Medusa development. We use it in the core and developers use it in their customizations.
Developers using pnpm won't have access to Zod, as it's not a top-level dependency. While they can install any version, since Zod is an essential aspect of our framework, it's more convenient that we export it and make it accessible to developers.
**How** — How have these changes been implemented?
1. Add Zod as a dependency in `@medusajs/deps` and export it in `@medusajs/framework`
2. Change imports of Zod across projects to import from `@medusajs/framework` and remove the Zod dependency.
> Note: this change doesn't cover admin extensions (and our related packages), as they're not related to the Medusa framework and using Zod in them isn't part of the conventions we document.
Developers can import Zod like this now:
```ts
import { z } from "@medusajs/framework/zod"
```
**Testing** — How have these changes been tested, or how can the reviewer test the feature?
Use the following import in a Medusa project to create an validate zod schemas:
```bash
import { MedusaRequest, MedusaResponse } from "@medusajs/framework/http";
import { z } from "@medusajs/framework/zod"
export const PostCustomSchema = z.object({
name: z.string(),
})
type PostCustomSchema = z.infer<typeof PostCustomSchema>
export async function POST(
req: MedusaRequest<PostCustomSchema>,
res: MedusaResponse
) {
res.json({
message: `Hello, ${req.validatedBody.name}`
})
}
// in middleware
import { defineMiddlewares, validateAndTransformBody } from "@medusajs/framework/http"
import { PostCustomSchema } from "./admin/custom/route"
export default defineMiddlewares({
routes: [
{
matcher: "/custom",
middlewares: [validateAndTransformBody(PostCustomSchema)],
},
],
})
```
---
## Examples
-
---
## Checklist
Please ensure the following before requesting a review:
- [x] I have added a **changeset** for this PR
- Every non-breaking change should be marked as a **patch**
- To add a changeset, run `yarn changeset` and follow the prompts
- [ ] The changes are covered by relevant **tests**
- [x] I have verified the code works as intended locally
- [x] I have linked the related issue(s) if applicable
---
## Additional Context
-
* fix(build): Introduce a schema only flag for more heavy light weight loading
* fix(build): cleanup and tests
* Create shy-snails-raise.md
* fix(build): cleanup
* feat(DML): Add a new translatable property modifier applicable on text
* feat(DML): Add a new translatable property modifier applicable on text
* feat(DML): Add a new translatable property modifier applicable on text
* Create gold-bobcats-decide.md
* feat(DML): Add a new translatable property modifier applicable on text
* feat(DML): Add a new translatable property modifier applicable on text
* simplification
* feat(translation): Add support for locale to the graph query
* feat(translation): Add support for locale to the graph query
* feat(translation): Add support for locale to the graph query
* feat(translation): fix import
* fix
* cleanup
* fix context in product routes
* Create dull-onions-punch.md
* Avoid checking existent inventory item on fulfillment cancellation for variants without managed inventory
* Add changeset
* Dismiss existent variant inventory links when updating to unmanaged inventory
* Update input type and step name
* Dismiss inventory when variant is updated to unmanaged inventory
* Review changes
* Fix
* Fix
* Comments
* Include Map to avoid iterating unnecessarily
## Summary
**What**
Adds metadata field for reset password route that allows passing data from caller that can be found in the subscriber.
## Checklist
Please ensure the following before requesting a review:
- [x] I have added a **changeset** for this PR
- Every non-breaking change should be marked as a **patch**
- To add a changeset, run `yarn changeset` and follow the prompts
- [x] The changes are covered by relevant **tests**
- [x] I have verified the code works as intended locally
- [ ] I have linked the related issue(s) if applicable
---
> [!NOTE]
> Introduces optional request `metadata` for reset-password and propagates it through to event subscribers.
>
> - Accepts `metadata` in `ResetPasswordRequest` validator and `reset-password` route; forwards it to `generateResetPasswordTokenWorkflow`
> - Workflow now accepts `metadata` and includes it in emitted `auth.password_reset` event data
> - Updates event docs to mention `metadata` field
> - Adds integration test verifying `metadata` is emitted in the password reset event
>
> <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 7f9855feabed284336e8872eebfb18fe3bd320db. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup>
* feat(): Translation settings + user configuration
* feat(): Translation settings + user configuration
* Create gentle-bees-grow.md
* add entities end point
* add entities end point
* add admin hook and js sdk method
* update changeset
* fix tests
* fix tests
* rm unnecessary copy
* update dashboard to use the new resources
* update dashboard to use the new resources
* update dashboard to use the new resources
* allow type inference through interface augmentation in the defineConfig of medusa-config
* allow type inference through interface augmentation in the defineConfig of medusa-config
* exclude id and _id props
---------
Co-authored-by: Oli Juhl <59018053+olivermrbl@users.noreply.github.com>
* Add Translations route and guard it with feature flag. Empty TranslationsList main component to test route.
* Translation list component
* Add translations namespace to js-sdk
* Translations hook
* Avoid incorrectly throwing when updating and locale not included
* Translations bulk editor component v1
* Add batch method to translations namespace in js-sdk
* Protect translations edit route with feature flag
* Handle reference_id search param
* Replace entity_type entity_id for reference reference_id
* Manage translations from product detail page
* Dynamically resolve base hook for retrieving translations
* Fix navigation from outside settings/translations
* Navigation to bulk editor from product list
* Add Translations to various product module types
* Type useVariants hook
* Handle product module entities translations in bulk editor
* Fix categories issue in datagrid due to column clash
* Translations bulk navigation from remaining entities detail pages
* Add remaining bulk editor navigation for list components. Fix invalidation query for variants
* Expandable text cell v1
* Popover approach
* Add *supported_locales.locale to default fields in stores list endpoint
* Make popover more aligned to excell approach
* Correctly tie the focused cell anchor to popover
* Rework translations main component UI
* Fix link def export
* Swap axis for translations datagrid
* Add original column to translations data grid
* Remove is_default store locale from backend
* Remove ldefault locale from ui
* Type
* Add changeset
* Comments
* Remove unused import
* Add translations to admin product categories endpoint allowed fields
* Default locale removal
* Lazy loading with infinite scroll data grid
* Infinite list hook and implementation for products and variants
* Translation bulk editor lazy loaded datagrid
* Prevent scroll when forcing focus, to avoid scrollTop reset on infinite loading
* Confgiure placeholder data
* Cleanup logs and refactor
* Infinite query hooks for translatable entities
* Batch requests for translation batch endpoint
* Clean up
* Update icon
* Add query param validator in settings endpoint
* Settings endpoint param type
* JS sdk methods for translation settings and statistics
* Retrieve translatable fields and entities dynamically. Remove hardcoded information from tranlations list
* Resolve translation aggregate completion dynamically
* Format label
* Resolve bulk editor header label dynamically
* Include type and collection in translations config
* Avoid showing product option and option values in translatable entities list
* Translations
* Make translations bulk editor content columns wider
* Disable hiding Original column in translations bulk editor
* Adjust translations completion styles
* Fix translations config screen
* Locale selector switcher with conditional locale column rendering
* Batch one locale at a time
* Hooks save actions to footer buttons
* Reset dirty state on save
* Dynamic row heights for translations bulk editor. Replace expandable cell for text cell, with additional isMultiLine config
* Make columns take as much responsive width as possible and divide equally
* more padding to avoid unnecessary horizontal scrollbar
* Update statistics graphs
* Translations
* Statistics graphs translations
* Translation, text sizes and weight in stat graphs
* Conditionally show/hide column visibility dropdown in datagrid
* Allow to pass component to place in DataGrid header and use it in translations bulk editor
* Center text regardless of multiLine config
* Apply full height to datagrid cell regardles of multiSelect config
* Colors and fonts
* Handle key down for text area in text cell
* MultilineCell with special keydown handling
* Rework form schema to match new single locale edit flow
* Update created translations to include id, to avoid duplication issue on subsequent calls
* Handle space key for text cells
* Finish hooking up multiline cell with key and mouse events
* Disable remaining buttons when batch is ongoing
* Style updates
* Update style
* Refactor to make form updates and sync/comparison with server data more comprehensive and robust
* Update styles
* Bars and labels alignment
* Add languages tooltip
* Styles and translation
* Navigation update
* Disable edit translations button when no reference count
* Invert colors
---------
Co-authored-by: Oli Juhl <59018053+olivermrbl@users.noreply.github.com>
Co-authored-by: Adrien de Peretti <adrien.deperetti@gmail.com>
## Summary
**What** — What changes are introduced in this PR?
Remove `default_locale` from Store <> Locale relation
**Why** — Why are these changes relevant or necessary?
*Please provide answer here*
**How** — How have these changes been implemented?
*Please provide answer here*
**Testing** — How have these changes been tested, or how can the reviewer test the feature?
*Please provide answer here*
---
## Examples
Provide examples or code snippets that demonstrate how this feature works, or how it can be used in practice.
This helps with documentation and ensures maintainers can quickly understand and verify the change.
```ts
// Example usage
```
---
## Checklist
Please ensure the following before requesting a review:
- [ ] I have added a **changeset** for this PR
- Every non-breaking change should be marked as a **patch**
- To add a changeset, run `yarn changeset` and follow the prompts
- [ ] The changes are covered by relevant **tests**
- [ ] I have verified the code works as intended locally
- [ ] I have linked the related issue(s) if applicable
---
## Additional Context
Add any additional context, related issues, or references that might help the reviewer understand this PR.
Co-authored-by: Oli Juhl <59018053+olivermrbl@users.noreply.github.com>
* feat: order export
* Merge branch 'develop' of https://github.com/medusajs/medusa into feat/order-export
* normalize status
* rm util
* serialize totals
* test
* lock
* comments
* configurable order list
## Summary
**What** — What changes are introduced in this PR?
Price lists prices didn't have a dedicated method to query them and instead, relied on being returned as part of price lists. This, however, introduces optimization issues that for price lists with many prices, could cause crashes. The reason being that relations are not paginated and thus, all prices linked to the price list would be returned.
This PR aims to solve this by introducing a dedicated endpoint and avoiding returning the `prices` as part of price lists by default. The idea being that it is up to the user to explicitly express this, which, for small price lists no issues will arise, but for bigger ones, they will easily recognize the performance impact.
**Why** — Why are these changes relevant or necessary?
Users with large enough price lists would have serious performance issues or even crashes when querying the `/admin/price-lists` endpoints. This is also true when navigating to the price list section of the Admin UI since it queries this same endpoints.
**How** — How have these changes been implemented?
- Removed the `prices` relation to be part of the default fields returned by the `/admin/price-lists/` endpoints. User may still request it by passing it in `fields` query param.
- Added new `/admin/price-lists/[id]/prices` GET endpoint to be able to retrieve a price list prices with pagination.
**Testing** — How have these changes been tested, or how can the reviewer test the feature?
Integration tests.
---
## Examples
Provide examples or code snippets that demonstrate how this feature works, or how it can be used in practice.
This helps with documentation and ensures maintainers can quickly understand and verify the change.
```ts
// Example usage
```
---
## Checklist
Please ensure the following before requesting a review:
- [x] I have added a **changeset** for this PR
- Every non-breaking change should be marked as a **patch**
- To add a changeset, run `yarn changeset` and follow the prompts
- [x] The changes are covered by relevant **tests**
- [x] I have verified the code works as intended locally
- [x] I have linked the related issue(s) if applicable
---
## Additional Context
The current state of the PR fixes the issue on the price list list and detail component. It still doesn't solve the issue for the following screens: Edit Prices & Add Prices
All the prices are still retrieved from the `/admin/price-lists/` endpoint for these. I want first some feedback before changing it to the new endpoint, since the current DataGrid implementation doesn't support pagination and it seems we are passing a default limit for the products to show there, an arbitrarily large number 9999 and there is also a TODO comment of changing that.
This previous point, though, could be implemented in a later PR, so we can already fix the issue in the price list list and detail pages, so at least for large price lists these screens don't explode and smaller price lists can still have its product prices edited, while only large ones will explode when trying to perform this action. @adrien2p @fPolic thoughts?
closes ENTSUP-265, CORE-1239
ref: https://github.com/medusajs/medusa/pull/14189
**Summary**
This PR extends the translation module to support automatic translation syncing for cart line items based on the cart's locale.
Key changes:
- Added locale field to the Cart model to store the cart's locale preference
- Created new workflow steps:
- getTranslatedLineItemsStep - Translates line items when adding to cart or creating a cart
- updateCartItemsTranslationsStep - Re-translates all cart items when the cart's locale changes
- Integrated translation logic into cart workflows:
- createCartWorkflow - Applies translations to initial line items
- addToCartWorkflow - Applies translations when adding new items
- updateCartWorkflow - Re-translates all items when locale_code is updated
- refreshCartItemsWorkflow - Maintains translations during cart refresh
- Added applyTranslationsToItems utility to map variant/product/type/collection translations to line item fields (title, subtitle, description, etc.)
* chore(): Accept an extra agument 'all-or-nothing' on the migrate command
* Create rich-camels-brush.md
* chore(): Accept an extra agument 'all-or-nothing' on the migrate command
* chore(): Accept an extra agument 'all-or-nothing' on the migrate command
* chore(): Accept an extra agument 'all-or-nothing' on the migrate command
* chore(): fix broken down migrations
* chore(): update changeset
* Allow id field in addresses properties for cart update validator
* Update cart addresses in update step where id is provided, both reference and nested fields
* Add tests
* Add changeset
* Remove unnecessary map step
* Review changes