Commit Graph

1535 Commits

Author SHA1 Message Date
Kasper Fabricius Kristensen 03b8bda1ba fix(dashboard): Fix size of buttons and use Link to navigate (#11366)
**What**
- Fixes the wrong `size` being used for the allocate items button.
- Updates the buttons that link to somewhere to use a Link and asChild instead of an onClick.
2025-02-14 15:19:31 +00:00
Kasper Fabricius Kristensen b37010857a fix(core-flows): Fix line item ids passed to deleteReservationsByLineItemsStep (#11465) 2025-02-14 15:10:52 +01:00
Kasper Fabricius Kristensen 825b8ad260 fix(medusa): Allow filtering by handle and title as arrays (#11472)
**What**
- Allows filtering products in the Store API with an array value for both `handle` and `title`.

RESOLVES SUP-893
2025-02-14 14:10:32 +00:00
Adrien de Peretti ceb99d073a fix(medusa): Re throw error in instrumentation after reporting it (#11464)
FIXES FRMW-2914

**What**
Currently, when the instrumentation is enabled, some instrument catches the errors in order to set the span status and info, unfortunately, these errors are not re throw leading to swallow them and return nothing in the end leading to potential breaks in flows
2025-02-14 12:50:52 +00:00
Harminder Virk bc02fde236 feat: allow all NodeSDK options via registerOtel (#11460) 2025-02-14 15:37:32 +05:30
Harminder Virk d1cbe4c61e fix: relationships to accept ids (#11399) 2025-02-14 05:41:36 +00:00
Kasper Fabricius Kristensen a88f6576bd feat(dashboard,admin-vite-plugin): Add support for outlet routes, loader, and handle (#11305)
**What**
- Add support for defining outlet routes using `@`, e.g. `/src/admin/routes/brands/@create/page.tsx`
- Add support for exporting a `loader` from a route file.
- Add support for exporting a `handle` from a route file.

Example usage of a loader and handle:

```tsx
// src/admin/routes/articles/[id]/page.tsx
import { Button, Container, Heading } from "@medusajs/ui";
import {
  Link,
  LoaderFunctionArgs,
  Outlet,
  UIMatch,
  useLoaderData,
} from "react-router-dom";

export async function loader({ params }: LoaderFunctionArgs) {
  const { id } = params;

  return {
    id,
  };
}

export const handle = {
  breadcrumb: (match: UIMatch<{ id: string }>) => {
    const { id } = match.params;
    return `#${id}`;
  },
};

const ProfilePage = () => {
  const { id } = useLoaderData() as Awaited<ReturnType<typeof loader>>;

  return (
    <div>
      <Container className="flex justify-between items-center">
        <Heading>Article {id}</Heading>
        <Button size="small" variant="secondary" asChild>
          <Link to="edit">Edit</Link>
        </Button>
      </Container>
      {/* This will be used for the next example of an Outlet route */}
      <Outlet />
    </div>
  );
};

export default ProfilePage;
```

In the above example we are passing data to the route from a loader, and defining a breadcrumb using the handle.

Example of a outlet route:

```tsx
// src/admin/routes/articles/[id]/@edit/page.tsx
import { Button, Container, Heading } from "@medusajs/ui";

const ProfileEditPage = () => {
  return (
    <div>
      {/* Form goes here */}
    </div>
  );
};

export default ProfileEditPage;
```
This outlet route will be rendered in the <Outlet /> in the above example when the URL is /articles/1/edit

Resolves CMRC-913, CMRC-914, CMRC-915
2025-02-13 20:37:55 +00:00
Harminder Virk 1a3843a92a fix: listVariantsList types (#11441) 2025-02-13 20:53:35 +05:30
Kasper Fabricius Kristensen 681121bb19 fix(medusa): Fix draft order validator, and endpoint (#11398)
Resolves CMRC-925, CMRC-924
2025-02-13 08:06:11 +00:00
Carlos R. L. Rodrigues 22276648ad feat: query.index (#11348)
What:
 - `query.index` helper. It queries the index module, and aggregate the rest of requested fields/relations if needed like `query.graph`.
 
Not covered in this PR:
 - Hydrate only sub entities returned by the query. Example: 1 out of 5 variants have returned, it should only hydrate the data of the single entity, currently it will merge all the variants of the product.
 - Generate types of indexed data
 
 example:
 ```ts
 const query = container.resolve(ContainerRegistrationKeys.QUERY)
        
 await query.index({
  entity: "product",
  fields: [
    "id",
    "description",
    "status",
    "variants.sku",
    "variants.barcode",
    "variants.material",
    "variants.options.value",
    "variants.prices.amount",
    "variants.prices.currency_code",
    "variants.inventory_items.inventory.sku",
    "variants.inventory_items.inventory.description",
  ],
  filters: {
    "variants.sku": { $like: "%-1" },
    "variants.prices.amount": { $gt: 30 },
  },
  pagination: {
    order: {
      "variants.prices.amount": "DESC",
    },
  },
})
```
This query return all products where at least one variant has the title ending in `-1` and at least one price bigger than `30`.
 
The Index Module only hold the data used to paginate and filter, and the returned object is:
```json
{
  "id": "prod_01JKEAM2GJZ14K64R0DHK0JE72",
  "title": null,
  "variants": [
    {
      "id": "variant_01JKEAM2HC89GWS95F6GF9C6YA",
      "sku": "extra-variant-1",
      "prices": [
        {
          "id": "price_01JKEAM2JADEWWX72F8QDP6QXT",
          "amount": 80,
          "currency_code": "USD"
        }
      ]
    }
  ]
}
```

All the rest of the fields will be hydrated from their respective modules, and the final result will be:

```json
{
  "id": "prod_01JKEAY2RJTF8TW9A23KTGY1GD",
  "description": "extra description",
  "status": "draft",
  "variants": [
    {
      "sku": "extra-variant-1",
      "barcode": null,
      "material": null,
      "id": "variant_01JKEAY2S945CRZ6X4QZJ7GVBJ",
      "options": [
        {
          "value": "Red"
        }
      ],
      "prices": [
        {
          "amount": 20,
          "currency_code": "CAD",
          "id": "price_01JKEAY2T2EEYSWZHPGG11B7W7"
        },
        {
          "amount": 80,
          "currency_code": "USD",
          "id": "price_01JKEAY2T2NJK2E5468RK84CAR"
        }
      ],
      "inventory_items": [
        {
          "variant_id": "variant_01JKEAY2S945CRZ6X4QZJ7GVBJ",
          "inventory_item_id": "iitem_01JKEAY2SNY2AWEHPZN0DDXVW6",
          "inventory": {
            "sku": "extra-variant-1",
            "description": "extra variant 1",
            "id": "iitem_01JKEAY2SNY2AWEHPZN0DDXVW6"
          }
        }
      ]
    }
  ]
}
```

Co-authored-by: Adrien de Peretti <25098370+adrien2p@users.noreply.github.com>
2025-02-12 12:55:09 +00:00
Kasper Fabricius Kristensen a039dd6932 chore(admin-sdk): Pin Zod version (#11413)
**What**
In order to prevent multiple version to exists and that might not be compatible with one another, we fix the zod package version in the admin-sdk in complement to the starter
2025-02-12 10:30:46 +00:00
Kasper Fabricius Kristensen 47edd01dee fix(admin-vite-plugin,admin-bundler,ui,icons,dashboard,framework,types): Update Vite dependencies (#11414)
**What**
- Bumps the versions of Vite across the entire stack, to prevent an issue similar to what is described here: https://github.com/vitejs/vite/discussions/18271

Not entirely sure what was happening as I couldn't reproduce the issue, but Adrien faced the issue yesterday when working with local versions of our packages. It does appear as if the range we had before could lead to a version of Vite to be installed with said bug.
2025-02-12 10:09:39 +00:00
Carlos R. L. Rodrigues d6c03ee542 fix(utils): custom linkable keys (#11400)
**What**
Fix linkable generation when there is no dml models and models are provided as virtual to the joiner config and therefore the linkable are inferred
2025-02-11 16:59:21 +00:00
olivermrbl 682dcf6507 chore: Version packages 2025-02-11 12:00:43 +01:00
olivermrbl d3bf59bb7a chore: Add missing changeset for payment module 2025-02-11 10:11:53 +01:00
Harminder Virk 244cd714b2 fix: add foreign keys to the generated query types output (#11388) 2025-02-11 14:16:10 +05:30
Paul Nodet 3f6425bada fix(ui): add missing use client directives (#11368)
Fix #11367
2025-02-10 09:07:53 +00:00
Kasper Fabricius Kristensen 3dbef519d9 fix(admin-vite-plugin,icons,ui,dashboard): Upgrade vitest in all packages and align Vite version (#11361) 2025-02-09 11:46:50 +01:00
Kasper Fabricius Kristensen d00825485f feat(ui,dashboard): Move Divider component to UI package (#11357) 2025-02-09 11:46:30 +01:00
Kasper Fabricius Kristensen acefcd7d80 fix(core-flows): Fix broken import of MedusaError (#11362) 2025-02-07 16:17:52 +00:00
Shahed Nasser cb0f065c9d fix(utils): add static identifier to AbstractNotificationProviderService (#11344) 2025-02-07 17:30:08 +02:00
Kasper Fabricius Kristensen fcd3e2226e feat(ui,dashboard): Migrate SC tables to DataTable (#11106) 2025-02-07 14:26:49 +00:00
Kasper Fabricius Kristensen 211997b137 fix(dashboard): Remove wrongful import of utils function (#11338)
Resolves SUP-819
2025-02-06 17:14:50 +00:00
Kasper Fabricius Kristensen f13c1215cb fix(cli): If NODE_ENV is not defined then default to production for medusa start (#11325)
Co-authored-by: Oli Juhl <59018053+olivermrbl@users.noreply.github.com>
2025-02-06 17:56:29 +01:00
Kasper Fabricius Kristensen 7d208afb07 fix(dashboard): Ensure conditional prices are assigned to region (#11335) 2025-02-06 16:55:11 +01:00
Adrien de Peretti a33aebd895 feat(index): full sync operations (#11178)
Closes: FRMW-2892, FRMW-2893

**What**
Wired up the building block that we merged previously in order to manage data synchronization. The flow is as follow
- On application start
  - Build schema object representation from configuration
  - Check configuration changes
    - if new entities configured
      - Data synchronizer initialize orchestrator and start sync
        - for each entity
          - acquire lock
          - mark existing data as staled
          - sync all data by batch
          - marked them not staled anymore
          - acknowledge each processed batch and renew lock
          - update metadata with last synced cursor for entity X
          - release lock
      - remove all remaining staled data
    - if any entities removed from last configuration
      - remove the index data and relations

Co-authored-by: Carlos R. L. Rodrigues <37986729+carlos-r-l-rodrigues@users.noreply.github.com>
2025-02-05 16:49:18 +00:00
Shahed Nasser da25980d24 chore(core-flows): update the TSDocs of new steps (#11315) 2025-02-05 16:20:23 +02:00
Kasper Fabricius Kristensen 6db96c80d0 fix(ui,types): Add Metadata form for collection (#11300)
**What**
- Adds missing Metadata form for collections
- Fixes type of metadata in update payload
- Fixes an issue where deleting the last row of a metadata form would prevent adding new ones.

Resolves SUP-784
2025-02-05 12:53:30 +00:00
Shahed Nasser 9f1a3b2a42 fix(medusa, types): fix promotion HTTP types in cart (#11304) 2025-02-05 12:31:24 +02:00
Harminder Virk 3c51709daf feat: map container types for core services to interface (#11295) 2025-02-04 15:47:55 +05:30
Kasper Fabricius Kristensen 3cf4307296 fix(ui): Prevent Command from triggering while a editable field has focus (#11254)
Resolves CMRC-909
2025-02-04 10:09:07 +00:00
Kasper Fabricius Kristensen f07af7b93c fix(dashboard,core-flows,types,medusa): Allow editing Order metadata (#11285)
Resolves SUP-780
2025-02-04 10:08:20 +00:00
Harminder Virk 016e332e9b feat: make AbstractModuleService create method type-safe (#11216) 2025-02-03 21:25:01 +05:30
Harminder Virk f4c2cd112e fix: issues with peer dependencies (#11272) 2025-02-03 18:46:03 +05:30
Carlos R. L. Rodrigues 65fae943c9 feat(orchestration): hydrate resultset (#11263)
What:
* Add support for aggregating data into existing resultset.
* `query.graph` new option `initialData` containing the resultset to be hydrated
* It fetches data where the requested fields are not present and merge with the existing resultset
2025-02-03 11:24:57 +00:00
Carlos R. L. Rodrigues c8376a9f15 chore(medusa): clear workflow execution (#11200)
CLOSES: SUP-704
2025-02-03 10:47:32 +00:00
Kasper Fabricius Kristensen 9822bd930b chore(ui,dashboard): Use radix-ui package (#11195)
* update deps for ui

* chore(ui,dashboard): Use radix-ui package

---------

Co-authored-by: Oli Juhl <59018053+olivermrbl@users.noreply.github.com>
2025-02-02 14:20:34 +01:00
Carlos R. L. Rodrigues e98d3c615e chore(orchestration): validate PK when throwIfKeyNotFound (#11190)
CLOSES: FRMW-2895
2025-01-29 19:17:36 +00:00
Kasper Fabricius Kristensen 51d2960a57 fix(dashboard): Allow admins to update default Sales Channel and Stock Location (#11196)
**Note** The huge diff is because the i18n schema wasn't formatted properly again. Not sure how that happened with the update to the script but perhaps someone didn't update their branch to include the change to format the schema on creation.
2025-01-29 16:14:47 +00:00
RONY GEDEON YEBADOKPO a16eaad6c9 fix(create-medusa-app): --db-url keep asking db credentials (#11037)
* fix create-medusa-app db-url error

* removed empty lines

* changeset
2025-01-29 15:30:18 +02:00
Shahed Nasser 16fe43f214 fix(order): add data model name in define schema (#11181)
Add missing data model name in `model.define` in the Order Module where missing, as we need to infer the names in the references we generate

Closes DX-1305
2025-01-29 10:53:13 +00:00
Shahed Nasser 040b7b274e fix(medusa): use correct request / response types (#11170) 2025-01-29 11:51:30 +01:00
Harminder Virk c982117186 fix: always load .env file alongside the environment specific file (#11188) 2025-01-29 14:22:50 +05:30
Harminder Virk 716de2cb3a fix: exit process with a status code when build fails (#11206)
Fixes: FRMW-2897
CLOSES CLO-434

Still need the frontend Admin bundler to provide some way to know if the build has failed or not.
2025-01-29 08:34:47 +00:00
Kasper Fabricius Kristensen 65d8d6dc0e fix(js-sdk,admin-bundler): Fix qs import (#11172) 2025-01-27 15:00:18 +00:00
olivermrbl 986ee8008e chore: Version packages 2025-01-27 09:35:06 +01:00
Carlos R. L. Rodrigues a76208ed02 chore(utils): patch unique index migration (#11136) 2025-01-24 13:48:37 -03:00
Kasper Fabricius Kristensen 4eecda5466 fix(dashboard): Format i18n schema with Prettier (#11107)
**What**
- Formats the schema that is generated by `yarn i18n:schema`. 
- Ensures we don't end up with huge diffs if one team member forgets to format the schema in one PR, and the schema is then updated and formatted later on.
2025-01-23 14:47:25 +00:00
Kasper Fabricius Kristensen 57892bee00 fix(admin-bundler): Optimize tanstack/react-query (#11112) 2025-01-23 14:10:10 +00:00
Harminder Virk 0deffe7b9b fix: switch from tsc watch to chokidar (#11110) 2025-01-23 19:12:07 +05:30