@medusajs/dashboard 2.22.0-snapshot-20261020204851 → 2.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/AGENTS.md ADDED
@@ -0,0 +1,89 @@
1
+ # @medusajs/dashboard
2
+
3
+ The Medusa Admin single-page app (React, Vite, React Router, TanStack Query, `@medusajs/ui`). Applications never run it directly: `@medusajs/admin-bundler` mounts it at `admin.path` (default `/app`) and feeds it app and plugin extensions through `virtual:medusa/*` modules.
4
+
5
+ ## Using this package
6
+
7
+ Widgets and UI routes are declared with `@medusajs/admin-sdk`. This package supplies the building blocks to use inside them (public since v2.21.0):
8
+
9
+ - `@medusajs/dashboard/components`: `LayoutComposer`, `DataTable`, `DataGrid`, `ActionMenu`, `RouteDrawer`, `RouteFocusModal`, `StackedDrawer`, `StackedFocusModal`, `useRouteModal`, `Form`, `Combobox`, `SectionRow`, `JsonViewSection`, product table cells, ...
10
+ - `@medusajs/dashboard/hooks`: TanStack Query hooks per resource (`useProducts`, `useOrder`, `useRegions`, ...) and their query key factories (`productsQueryKeys`, ...), plus `useQueryParams`, `useDate`, `useComboboxData`.
11
+ - `@medusajs/dashboard/lib`: `defineCellRenderer`, `defineSearchEntity`, `formatCurrency`, `getStylizedAmount`, address and validation helpers.
12
+ - `@medusajs/dashboard` (root): types `Resources` (for i18next type augmentation) and `DashboardPlugin`.
13
+
14
+ Only what `src/exports/*` re-exports is public. Never deep-import from `src/`.
15
+
16
+ ```tsx
17
+ import { useProducts, productsQueryKeys } from "@medusajs/dashboard/hooks"
18
+ import { useQueryClient } from "@tanstack/react-query"
19
+
20
+ const ProductCount = () => {
21
+ const queryClient = useQueryClient()
22
+ const { products, count, isPending } = useProducts({ limit: 10 })
23
+
24
+ const refresh = () =>
25
+ queryClient.invalidateQueries({ queryKey: productsQueryKeys.lists() })
26
+ // ...
27
+ }
28
+ ```
29
+
30
+ Expose injection zones on a custom page with `LayoutComposer` (zones are `<prefix>` and `<prefix>.side`):
31
+
32
+ ```tsx
33
+ import { LayoutComposer } from "@medusajs/dashboard/components"
34
+
35
+ <LayoutComposer
36
+ widgetsZonePrefix="brand.details"
37
+ preferredLayoutId="core:two-column"
38
+ data={brand}
39
+ sections={{ main: <GeneralSection brand={brand} /> }}
40
+ />
41
+ ```
42
+
43
+ Docs:
44
+ - https://docs.medusajs.com/resources/admin-components.md
45
+ - https://docs.medusajs.com/resources/admin-components/layouts/layout-composer.md
46
+ - https://docs.medusajs.com/resources/admin-components/hooks.md
47
+ - https://docs.medusajs.com/learn/fundamentals/admin/custom-injection-zones.md
48
+
49
+ ## Architecture
50
+
51
+ - `src/app.tsx`: entry. Imports the `virtual:medusa/*` modules; tsup keeps them `external` so `@medusajs/admin-vite-plugin` resolves them when the host app builds.
52
+ - `src/dashboard-app/`: `DashboardApp` merges core routes with extension routes, menu items, widgets, custom-field forms/displays, and layouts. `routes/get-route.map.tsx` is the core route table; every page is lazy-loaded.
53
+ - `src/routes/<domain>/<domain>-<page>/`: each page's `index.ts` exports `Component`, and optionally `loader`, `Breadcrumb`, `seo`, consumed by `lazy()` in the route map. Create/edit forms are child routes rendered in `RouteDrawer` / `RouteFocusModal` through the parent's `<Outlet />`.
54
+ - `src/hooks/api/<resource>.tsx`: one file per resource:
55
+ - `xQueryKeys = queryKeysFactory("x")` (`all`, `lists()`, `list(query)`, `details()`, `detail(id, query)`).
56
+ - Query hooks call `sdk.admin.*` from `src/lib/client` and return `{ ...data, ...rest }`.
57
+ - Mutation hooks invalidate the affected `lists()` / `detail(id)` keys in `onSuccess`, then call `options?.onSuccess?.(...)`.
58
+ - Detail-page loaders prefetch with `queryClient.getQueryData(key) ?? queryClient.fetchQuery(...)` using the same key and `fields` as the page's hook, which then receives the result as `initialData`. Keep loader and hook `fields` identical or the cache misses.
59
+ - Detail and list pages render `LayoutComposer` with `widgetsZonePrefix` set to the page's injection zone and wrap each core section in `<LayoutComposer.Entry id="...">`.
60
+ - `src/lib/client/client.ts`: JS SDK instance built from bundler defines `__BACKEND_URL__`, `__AUTH_TYPE__` (default `"session"`), `__JWT_TOKEN_STORAGE_KEY__`.
61
+ - `src/i18n/translations/`: `en.json` is the source of truth; `$schema.json` is generated from it.
62
+
63
+ ## Development
64
+
65
+ ```bash
66
+ yarn build # tsgo typecheck, then tsup
67
+ yarn typecheck
68
+ yarn lint
69
+ yarn test # vitest --run
70
+ yarn test src/lib/__tests__/promotions.spec.ts
71
+ yarn dev # standalone Vite dev server
72
+ yarn i18n:schema # regenerate translations/$schema.json from en.json
73
+ yarn i18n:validate de.json
74
+ yarn i18n:sync missing
75
+ ```
76
+
77
+ - `yarn dev` env vars (in `.env`): `VITE_MEDUSA_BACKEND_URL` (default `http://localhost:9000`), `VITE_MEDUSA_STOREFRONT_URL`, `VITE_MEDUSA_BASE`, and `VITE_MEDUSA_PROJECT`: path to a project's `src/admin` directory whose extensions should be loaded.
78
+ - Vitest runs in the `node` environment by default. Component tests need `// @vitest-environment jsdom` on the first line.
79
+ - Tests live in `__tests__/` directories or as `*.spec.tsx` beside the source.
80
+
81
+ ## Gotchas
82
+
83
+ - After adding or removing keys in `en.json`, run `yarn i18n:schema` and commit `$schema.json`; `src/i18n/translations/__tests__/validate-translations.spec.ts` validates every locale against it.
84
+ - Add new strings to `en.json` only. Other locales are filled by the daily `.github/workflows/admin-i18n-sync.yml` workflow.
85
+ - A new `widgetsZonePrefix` on a core page also needs its zones added to `INJECTION_ZONES` in `@medusajs/admin-shared`. Do not add `.before` / `.after` zones; they are legacy.
86
+ - Layout preferences are stored per `widgetsZonePrefix`, keyed by widget id and `LayoutComposer.Entry` id. Renaming an entry id drops users' saved placement for it.
87
+ - The `src/exports/*` surface is documented API for extensions. Changing a signature breaks plugins; update the matching page under `www/apps/resources/app/admin-components`.
88
+ - A new virtual module must be added to `external` in `tsup.config.cjs` and to `VIRTUAL_MODULES` in `@medusajs/admin-shared`.
89
+ - `yarn generate:static` writes `src/lib/currencies.ts`, but the app imports `src/lib/data/currencies.ts`. Move the output before relying on it.
package/README.md CHANGED
@@ -1,33 +1,83 @@
1
- # React + TypeScript + Vite
2
-
3
- This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
4
-
5
- Currently, two official plugins are available:
1
+ <p align="center">
2
+ <a href="https://www.medusajs.com">
3
+ <picture>
4
+ <source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/59018053/229103275-b5e482bb-4601-46e6-8142-244f531cebdb.svg">
5
+ <source media="(prefers-color-scheme: light)" srcset="https://user-images.githubusercontent.com/59018053/229103726-e5b529a3-9b3f-4970-8a1f-c6af37f087bf.svg">
6
+ <img alt="Medusa logo" src="https://user-images.githubusercontent.com/59018053/229103726-e5b529a3-9b3f-4970-8a1f-c6af37f087bf.svg">
7
+ </picture>
8
+ </a>
9
+ </p>
10
+ <h1 align="center">
11
+ @medusajs/dashboard
12
+ </h1>
13
+
14
+ <h4 align="center">
15
+ <a href="https://docs.medusajs.com">Documentation</a> |
16
+ <a href="https://www.medusajs.com">Website</a>
17
+ </h4>
18
+
19
+ <p align="center">
20
+ Building blocks for digital commerce
21
+ </p>
22
+ <p align="center">
23
+ <a href="https://github.com/medusajs/medusa/blob/develop/LICENSE">
24
+ <img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="Medusa is released under the MIT license." />
25
+ </a>
26
+ <a href="https://github.com/medusajs/medusa/blob/develop/CONTRIBUTING.md">
27
+ <img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat" alt="PRs welcome!" />
28
+ </a>
29
+ <a href="https://discord.gg/xpCwq3Kfn8">
30
+ <img src="https://img.shields.io/badge/chat-on%20discord-7289DA.svg" alt="Discord Chat" />
31
+ </a>
32
+ <a href="https://twitter.com/intent/follow?screen_name=medusajs">
33
+ <img src="https://img.shields.io/twitter/follow/medusajs.svg?label=Follow%20@medusajs" alt="Follow @medusajs" />
34
+ </a>
35
+ </p>
36
+
37
+ The Medusa Admin dashboard: the React and Vite single-page app that merchants use to manage a Medusa store. `@medusajs/medusa` builds it with `@medusajs/admin-bundler` and serves it at the `admin.path` set in `medusa-config.ts` (`/app` by default), so you don't install or run it yourself. Admin extensions can import its components, hooks, and utilities from the subpaths below.
38
+
39
+ ## At a glance
40
+
41
+ | | |
42
+ |---|---|
43
+ | Package | `@medusajs/dashboard` |
44
+ | Type | Admin |
45
+ | Import from | `@medusajs/dashboard/components`, `@medusajs/dashboard/hooks`, `@medusajs/dashboard/lib` |
46
+ | Entry points | `.` (the app), `./components`, `./hooks`, `./lib`, `./css` |
47
+
48
+ ## Usage
49
+
50
+ Import shared admin components, hooks, and utilities in your admin extensions:
51
+
52
+ ```tsx
53
+ import { getStylizedAmount } from "@medusajs/dashboard/lib"
54
+ ```
6
55
 
7
- - [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh
8
- - [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
56
+ ## Development
9
57
 
10
- ## Expanding the ESLint configuration
58
+ Run these from `packages/admin/dashboard`:
11
59
 
12
- If you are developing a production application, we recommend updating the configuration to enable type aware lint rules:
60
+ | Command | Description |
61
+ |---|---|
62
+ | `yarn dev` | Start the Vite dev server. |
63
+ | `yarn build` | Type-check and build the package with tsup. |
64
+ | `yarn build:preview` | Build the app with Vite. |
65
+ | `yarn preview` | Preview the Vite build. |
66
+ | `yarn test` | Run the Vitest tests. |
67
+ | `yarn lint` | Run ESLint. |
68
+ | `yarn typecheck` | Type-check the package. |
69
+ | `yarn i18n:validate <file>` | Validate a translation file, such as `de.json`, against the schema. |
70
+ | `yarn i18n:schema` | Regenerate `src/i18n/translations/$schema.json` from `en.json`. Run it after adding or removing keys in `en.json`. |
71
+ | `yarn i18n:sync` | Find or apply missing translations. See [Translations](#translations). |
13
72
 
14
- - Configure the top-level `parserOptions` property like this:
73
+ The dev server reads these variables from a `.env` file:
15
74
 
16
- ```js
17
- export default {
18
- // other rules...
19
- parserOptions: {
20
- ecmaVersion: 'latest',
21
- sourceType: 'module',
22
- project: ['./tsconfig.json', './tsconfig.node.json'],
23
- tsconfigRootDir: __dirname,
24
- },
25
- }
26
- ```
27
-
28
- - Replace `plugin:@typescript-eslint/recommended` to `plugin:@typescript-eslint/recommended-type-checked` or `plugin:@typescript-eslint/strict-type-checked`
29
- - Optionally add `plugin:@typescript-eslint/stylistic-type-checked`
30
- - Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and add `plugin:react/recommended` & `plugin:react/jsx-runtime` to the `extends` list
75
+ | Variable | Description | Default |
76
+ |---|---|---|
77
+ | `VITE_MEDUSA_BACKEND_URL` | URL of the Medusa server. | `http://localhost:9000` |
78
+ | `VITE_MEDUSA_STOREFRONT_URL` | URL of the storefront. | `http://localhost:8000` |
79
+ | `VITE_MEDUSA_BASE` | Base path the app is served from. | `/` |
80
+ | `VITE_MEDUSA_PROJECT` | Path to a Medusa project to load admin extensions from. | - |
31
81
 
32
82
  ## Translations
33
83
 
@@ -67,3 +117,10 @@ New keys are inserted next to their neighbors in `en.json`, and existing keys ke
67
117
  ### Automated sync
68
118
 
69
119
  The [Admin i18n Sync](../../../.github/workflows/admin-i18n-sync.yml) workflow runs daily. It finds missing translations, translates them with Claude, and opens a PR on the `chore/admin-i18n-sync-translations` branch. It skips runs while a previous sync PR is still open.
120
+
121
+ ## Resources
122
+
123
+ - [Admin Development](https://docs.medusajs.com/learn/fundamentals/admin)
124
+ - [Admin Components](https://docs.medusajs.com/resources/admin-components)
125
+ - [Admin Utilities](https://docs.medusajs.com/resources/admin-components/utilities)
126
+ - [Contribute Admin Translations](https://docs.medusajs.com/learn/resources/contribution-guidelines/admin-translations)
package/dist/app.js CHANGED
@@ -237839,7 +237839,7 @@ var init_search_index_reindex_modal = __esm({
237839
237839
  body.since = data.since.toISOString();
237840
237840
  }
237841
237841
  if (ids?.length) {
237842
- body.filters = { ids };
237842
+ body.filters = { id: ids };
237843
237843
  }
237844
237844
  await mutateAsync(
237845
237845
  {
package/dist/app.mjs CHANGED
@@ -14,7 +14,7 @@ import "./chunk-P3UUX2T6.mjs";
14
14
  import "./chunk-DG7J63J2.mjs";
15
15
  import {
16
16
  DashboardApp
17
- } from "./chunk-STD4XF6S.mjs";
17
+ } from "./chunk-ZCERNCOX.mjs";
18
18
  import "./chunk-ONB3JEHR.mjs";
19
19
  import "./chunk-JAW6ZD7F.mjs";
20
20
  import "./chunk-TO7QJZLE.mjs";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getLinkedFields
3
- } from "./chunk-STD4XF6S.mjs";
3
+ } from "./chunk-ZCERNCOX.mjs";
4
4
 
5
5
  // src/routes/products/product-detail/constants.ts
6
6
  var PRODUCT_DETAIL_FIELDS = getLinkedFields(
@@ -138787,7 +138787,7 @@ function getRouteMap({
138787
138787
  children: [
138788
138788
  {
138789
138789
  path: "create",
138790
- lazy: () => import("./product-create-BTTUQ3BI.mjs")
138790
+ lazy: () => import("./product-create-WUZ22WMJ.mjs")
138791
138791
  },
138792
138792
  {
138793
138793
  path: "import",
@@ -138803,7 +138803,7 @@ function getRouteMap({
138803
138803
  path: ":id",
138804
138804
  errorElement: /* @__PURE__ */ jsx21(ErrorBoundary, {}),
138805
138805
  lazy: async () => {
138806
- const { Breadcrumb, loader, seo } = await import("./product-detail-VBWNWTIK.mjs");
138806
+ const { Breadcrumb, loader, seo } = await import("./product-detail-Q7R6CEZD.mjs");
138807
138807
  return {
138808
138808
  Component: Outlet5,
138809
138809
  loader,
@@ -138816,11 +138816,11 @@ function getRouteMap({
138816
138816
  children: [
138817
138817
  {
138818
138818
  path: "",
138819
- lazy: () => import("./product-detail-VBWNWTIK.mjs"),
138819
+ lazy: () => import("./product-detail-Q7R6CEZD.mjs"),
138820
138820
  children: [
138821
138821
  {
138822
138822
  path: "edit",
138823
- lazy: () => import("./product-edit-RLWEFGUD.mjs")
138823
+ lazy: () => import("./product-edit-FIAXOVZP.mjs")
138824
138824
  },
138825
138825
  {
138826
138826
  path: "edit-variant",
@@ -138832,11 +138832,11 @@ function getRouteMap({
138832
138832
  },
138833
138833
  {
138834
138834
  path: "attributes",
138835
- lazy: () => import("./product-attributes-I637MRGI.mjs")
138835
+ lazy: () => import("./product-attributes-VDTTOEN6.mjs")
138836
138836
  },
138837
138837
  {
138838
138838
  path: "organization",
138839
- lazy: () => import("./product-organization-EFRLOE45.mjs")
138839
+ lazy: () => import("./product-organization-PAEWTW56.mjs")
138840
138840
  },
138841
138841
  {
138842
138842
  path: "shipping-profile",
@@ -138868,7 +138868,7 @@ function getRouteMap({
138868
138868
  },
138869
138869
  {
138870
138870
  path: "options/manage",
138871
- lazy: () => import("./product-options-manage-UYESJVPQ.mjs")
138871
+ lazy: () => import("./product-options-manage-H3RCESKS.mjs")
138872
138872
  }
138873
138873
  ]
138874
138874
  },
@@ -140194,7 +140194,7 @@ function getRouteMap({
140194
140194
  handle: {
140195
140195
  breadcrumb: () => t("searchIndexes.domain")
140196
140196
  },
140197
- lazy: () => import("./search-index-list-VFEM2IOS.mjs")
140197
+ lazy: () => import("./search-index-list-UMBYJEE2.mjs")
140198
140198
  },
140199
140199
  {
140200
140200
  path: "product-types",
@@ -6,7 +6,7 @@ import "./chunk-DG7J63J2.mjs";
6
6
  import {
7
7
  FormExtensionZone,
8
8
  useExtendableForm
9
- } from "./chunk-STD4XF6S.mjs";
9
+ } from "./chunk-ZCERNCOX.mjs";
10
10
  import "./chunk-ONB3JEHR.mjs";
11
11
  import "./chunk-JAW6ZD7F.mjs";
12
12
  import "./chunk-TO7QJZLE.mjs";
@@ -23,7 +23,7 @@ import {
23
23
  import {
24
24
  FormExtensionZone,
25
25
  useExtendableForm
26
- } from "./chunk-STD4XF6S.mjs";
26
+ } from "./chunk-ZCERNCOX.mjs";
27
27
  import "./chunk-ONB3JEHR.mjs";
28
28
  import "./chunk-JAW6ZD7F.mjs";
29
29
  import "./chunk-TO7QJZLE.mjs";
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-AM2BU2RH.mjs";
7
7
  import {
8
8
  PRODUCT_DETAIL_FIELDS
9
- } from "./chunk-B5FWZTCF.mjs";
9
+ } from "./chunk-O6JNJQ4K.mjs";
10
10
  import {
11
11
  SidebarLink
12
12
  } from "./chunk-U726TGCM.mjs";
@@ -19,7 +19,7 @@ import {
19
19
  getFormattedCountry
20
20
  } from "./chunk-B6ZOPCPA.mjs";
21
21
  import "./chunk-DG7J63J2.mjs";
22
- import "./chunk-STD4XF6S.mjs";
22
+ import "./chunk-ZCERNCOX.mjs";
23
23
  import "./chunk-ONB3JEHR.mjs";
24
24
  import "./chunk-JAW6ZD7F.mjs";
25
25
  import "./chunk-TO7QJZLE.mjs";
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  FormExtensionZone,
9
9
  useExtendableForm
10
- } from "./chunk-STD4XF6S.mjs";
10
+ } from "./chunk-ZCERNCOX.mjs";
11
11
  import "./chunk-ONB3JEHR.mjs";
12
12
  import "./chunk-JAW6ZD7F.mjs";
13
13
  import "./chunk-TO7QJZLE.mjs";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  PRODUCT_DETAIL_FIELDS
3
- } from "./chunk-B5FWZTCF.mjs";
3
+ } from "./chunk-O6JNJQ4K.mjs";
4
4
  import {
5
5
  useExtendableForm
6
- } from "./chunk-STD4XF6S.mjs";
6
+ } from "./chunk-ZCERNCOX.mjs";
7
7
  import "./chunk-ONB3JEHR.mjs";
8
8
  import "./chunk-JAW6ZD7F.mjs";
9
9
  import "./chunk-TO7QJZLE.mjs";
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  FormExtensionZone,
6
6
  useExtendableForm
7
- } from "./chunk-STD4XF6S.mjs";
7
+ } from "./chunk-ZCERNCOX.mjs";
8
8
  import "./chunk-ONB3JEHR.mjs";
9
9
  import "./chunk-JAW6ZD7F.mjs";
10
10
  import "./chunk-TO7QJZLE.mjs";
@@ -77,7 +77,7 @@ var SearchIndexReindexModal = ({
77
77
  body.since = data.since.toISOString();
78
78
  }
79
79
  if (ids?.length) {
80
- body.filters = { ids };
80
+ body.filters = { id: ids };
81
81
  }
82
82
  await mutateAsync(
83
83
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@medusajs/dashboard",
3
- "version": "2.22.0-snapshot-20261020204851",
3
+ "version": "2.22.0",
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "scripts": {
6
6
  "typecheck": "tsgo --noEmit -p tsconfig.typecheck.json",
@@ -58,8 +58,12 @@
58
58
  "files": [
59
59
  "package.json",
60
60
  "src",
61
- "dist"
61
+ "dist",
62
+ "AGENTS.md"
62
63
  ],
64
+ "llms": "https://docs.medusajs.com/llms.txt",
65
+ "llmsFull": "https://docs.medusajs.com/llms-full.txt",
66
+ "mcpServer": "https://docs.medusajs.com/mcp",
63
67
  "dependencies": {
64
68
  "@ariakit/react": "^0.4.15",
65
69
  "@babel/runtime": "^7.26.10",
@@ -68,10 +72,10 @@
68
72
  "@dnd-kit/utilities": "^3.2.2",
69
73
  "@hookform/error-message": "^2.0.1",
70
74
  "@hookform/resolvers": "5.5.7",
71
- "@medusajs/admin-shared": "2.22.0-snapshot-20261020204851",
72
- "@medusajs/icons": "2.22.0-snapshot-20261020204851",
73
- "@medusajs/js-sdk": "2.22.0-snapshot-20261020204851",
74
- "@medusajs/ui": "4.2.7-snapshot-20261020204851",
75
+ "@medusajs/admin-shared": "2.22.0",
76
+ "@medusajs/icons": "2.22.0",
77
+ "@medusajs/js-sdk": "2.22.0",
78
+ "@medusajs/ui": "4.2.7",
75
79
  "@radix-ui/react-dialog": "1.1.4",
76
80
  "@radix-ui/react-dismissable-layer": "1.1.4",
77
81
  "@tanstack/react-query": "5.64.2",
@@ -103,10 +107,10 @@
103
107
  "zod": "4.2.0"
104
108
  },
105
109
  "devDependencies": {
106
- "@medusajs/admin-shared": "2.22.0-snapshot-20261020204851",
107
- "@medusajs/admin-vite-plugin": "2.22.0-snapshot-20261020204851",
108
- "@medusajs/types": "2.22.0-snapshot-20261020204851",
109
- "@medusajs/ui-preset": "2.22.0-snapshot-20261020204851",
110
+ "@medusajs/admin-shared": "2.22.0",
111
+ "@medusajs/admin-vite-plugin": "2.22.0",
112
+ "@medusajs/types": "2.22.0",
113
+ "@medusajs/ui-preset": "2.22.0",
110
114
  "@types/qrcode": "^1.5.5",
111
115
  "@typescript/native-preview": "^7.0.0-dev.20260423.1",
112
116
  "eslint": "8",
@@ -52,7 +52,7 @@ export const SearchIndexReindexModal = ({
52
52
  body.since = data.since.toISOString()
53
53
  }
54
54
  if (ids?.length) {
55
- body.filters = { ids }
55
+ body.filters = { id: ids }
56
56
  }
57
57
 
58
58
  await mutateAsync(