Skip to content

Commit 143cf8d

Browse files
authored
Merge branch 'master' into patch-4
2 parents b13a2f9 + e662704 commit 143cf8d

File tree

100 files changed

+55894
-53484
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

100 files changed

+55894
-53484
lines changed

.github/workflows/publish_to_npm.yml

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,24 @@ on:
33
release:
44
types: [published]
55
workflow_dispatch:
6-
6+
7+
permissions:
8+
contents: read
9+
id-token: write
10+
711
jobs:
8-
build:
12+
publish:
913
runs-on: ubuntu-latest
10-
permissions:
11-
contents: read
12-
id-token: write
1314
steps:
1415
- uses: actions/checkout@v4
15-
# Setup .npmrc file to publish to npm
1616
- uses: actions/setup-node@v4
1717
with:
1818
node-version: '22.x'
1919
registry-url: 'https://registry.npmjs.org'
20-
# Install dependencies without modifying package-lock.json file
20+
# Ensure npm 11.5.1 or later is installed
21+
- name: Update npm
22+
run: npm install -g npm@latest
23+
# Install dependencies without modifying package-lock.json file
2124
- run: npm install --no-save
2225
- run: npm run build
2326
- run: lerna publish from-package --yes

CHANGELOG.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,46 @@
1+
## <small>3.5.1 (2025-11-14)</small>
2+
3+
4+
#### Fixes
5+
6+
* **admin-ui-plugin** Deprecate `compatibilityMode` option (#3953) ([e62fce2](https://github.com/vendure-ecommerce/vendure/commit/e62fce2)), closes [#3953](https://github.com/vendure-ecommerce/vendure/issues/3953)
7+
* **cli** Fix schema command "dir" option ([785ccf1](https://github.com/vendure-ecommerce/vendure/commit/785ccf1)), closes [#3896](https://github.com/vendure-ecommerce/vendure/issues/3896)
8+
* **core** Correctly persist relation custom fields on Zone entity (#3951) ([c68120a](https://github.com/vendure-ecommerce/vendure/commit/c68120a)), closes [#3951](https://github.com/vendure-ecommerce/vendure/issues/3951)
9+
* **core** Prevent duplicate GraphQL custom field input type definitions (#3889) ([f16f790](https://github.com/vendure-ecommerce/vendure/commit/f16f790)), closes [#3889](https://github.com/vendure-ecommerce/vendure/issues/3889)
10+
* **core** Roles query pagination (#3826) ([2d1c98d](https://github.com/vendure-ecommerce/vendure/commit/2d1c98d)), closes [#3826](https://github.com/vendure-ecommerce/vendure/issues/3826)
11+
* **create** Fix dev mode path to static dashboard files ([d0a3206](https://github.com/vendure-ecommerce/vendure/commit/d0a3206))
12+
* **create** Update CLI instructions to reflect the new Dashboard (#3957) ([dba8f44](https://github.com/vendure-ecommerce/vendure/commit/dba8f44)), closes [#3957](https://github.com/vendure-ecommerce/vendure/issues/3957)
13+
* **dashboard** add optional chaining to shipping lines to prevent UI from crashing (#3930) ([5e5ef68](https://github.com/vendure-ecommerce/vendure/commit/5e5ef68)), closes [#3930](https://github.com/vendure-ecommerce/vendure/issues/3930)
14+
* **dashboard** Allow rendering multiple blocks in same location (#3937) ([1206605](https://github.com/vendure-ecommerce/vendure/commit/1206605)), closes [#3937](https://github.com/vendure-ecommerce/vendure/issues/3937)
15+
* **dashboard** Allow the option "enableColumnFilter" for additionalColumns in ListPage (#3968) ([b9bc533](https://github.com/vendure-ecommerce/vendure/commit/b9bc533)), closes [#3968](https://github.com/vendure-ecommerce/vendure/issues/3968)
16+
* **dashboard** Copy requiresPermission to nav menu items (#3938) ([a2057de](https://github.com/vendure-ecommerce/vendure/commit/a2057de)), closes [#3938](https://github.com/vendure-ecommerce/vendure/issues/3938)
17+
* **dashboard** Do not block reload for pristine forms ([9a364f4](https://github.com/vendure-ecommerce/vendure/commit/9a364f4)), closes [#3964](https://github.com/vendure-ecommerce/vendure/issues/3964)
18+
* **dashboard** Fix custom field tab display logic ([504fa9b](https://github.com/vendure-ecommerce/vendure/commit/504fa9b))
19+
* **dashboard** Fix empty state of list type config args ([c95a00b](https://github.com/vendure-ecommerce/vendure/commit/c95a00b)), closes [#3969](https://github.com/vendure-ecommerce/vendure/issues/3969)
20+
* **dashboard** Fix healthcheck view when api endpoint is auto (#3919) ([62d5ddb](https://github.com/vendure-ecommerce/vendure/commit/62d5ddb)), closes [#3919](https://github.com/vendure-ecommerce/vendure/issues/3919)
21+
* **dashboard** Fix history entry item destructive icon color (#3954) ([e31e4cb](https://github.com/vendure-ecommerce/vendure/commit/e31e4cb)), closes [#3954](https://github.com/vendure-ecommerce/vendure/issues/3954)
22+
* **dashboard** Fix incorrect currency being displayed in product variant listing (#3906) ([b2077fa](https://github.com/vendure-ecommerce/vendure/commit/b2077fa)), closes [#3906](https://github.com/vendure-ecommerce/vendure/issues/3906)
23+
* **dashboard** Fix relation selector null/undefined handling (#3942) ([715b905](https://github.com/vendure-ecommerce/vendure/commit/715b905)), closes [#3942](https://github.com/vendure-ecommerce/vendure/issues/3942)
24+
* **dashboard** Fix saving global languages when selecting Norwegian (#3967) ([33071cc](https://github.com/vendure-ecommerce/vendure/commit/33071cc)), closes [#3967](https://github.com/vendure-ecommerce/vendure/issues/3967)
25+
* **dashboard** get the right vite __status on the starting page (#3891) ([521808b](https://github.com/vendure-ecommerce/vendure/commit/521808b)), closes [#3891](https://github.com/vendure-ecommerce/vendure/issues/3891)
26+
* **dashboard** Implement bulk actions for the zone members table (#3966) ([26997d3](https://github.com/vendure-ecommerce/vendure/commit/26997d3)), closes [#3966](https://github.com/vendure-ecommerce/vendure/issues/3966) [#3927](https://github.com/vendure-ecommerce/vendure/issues/3927)
27+
* **dashboard** Improve default string list component ([79fd8a4](https://github.com/vendure-ecommerce/vendure/commit/79fd8a4)), closes [#3916](https://github.com/vendure-ecommerce/vendure/issues/3916)
28+
* **dashboard** Improve security of html sanitization ([4fb3bb0](https://github.com/vendure-ecommerce/vendure/commit/4fb3bb0))
29+
* **dashboard** Include OrderLine custom fields in detail view (#3958) ([d314a6c](https://github.com/vendure-ecommerce/vendure/commit/d314a6c)), closes [#3958](https://github.com/vendure-ecommerce/vendure/issues/3958)
30+
* **dashboard** incorrect extension import path generation on windows (#3915) ([14cd5b4](https://github.com/vendure-ecommerce/vendure/commit/14cd5b4)), closes [#3915](https://github.com/vendure-ecommerce/vendure/issues/3915)
31+
* **dashboard** Increase rate limit for dev mode ([999d3e1](https://github.com/vendure-ecommerce/vendure/commit/999d3e1))
32+
* **dashboard** Introduce experimental support for ESM projects ([3881d46](https://github.com/vendure-ecommerce/vendure/commit/3881d46)), closes [#3727](https://github.com/vendure-ecommerce/vendure/issues/3727) [#3533](https://github.com/vendure-ecommerce/vendure/issues/3533)
33+
* **dashboard** Page block fixes (#3955) ([9c28eff](https://github.com/vendure-ecommerce/vendure/commit/9c28eff)), closes [#3955](https://github.com/vendure-ecommerce/vendure/issues/3955)
34+
* **dashboard** Properly convert price to minor units before saving product variants (#3907) ([7274b23](https://github.com/vendure-ecommerce/vendure/commit/7274b23)), closes [#3907](https://github.com/vendure-ecommerce/vendure/issues/3907)
35+
* **dashboard** Respect authTokenHeaderKey config (#3935) ([7324584](https://github.com/vendure-ecommerce/vendure/commit/7324584)), closes [#3935](https://github.com/vendure-ecommerce/vendure/issues/3935)
36+
* **dashboard** Show customFields on address forms (#3900) ([66b2568](https://github.com/vendure-ecommerce/vendure/commit/66b2568)), closes [#3900](https://github.com/vendure-ecommerce/vendure/issues/3900)
37+
* **payments-plugin** Support more payment flows by checking ArrangingAdditionalPayment state ([9ca67e9](https://github.com/vendure-ecommerce/vendure/commit/9ca67e9))
38+
39+
#### Features
40+
41+
* **dashboard** Support localization for dashboard extensions (#3962) ([112cb9d](https://github.com/vendure-ecommerce/vendure/commit/112cb9d)), closes [#3962](https://github.com/vendure-ecommerce/vendure/issues/3962)
42+
* **dashboard** Tag-based input for string list custom fields (#3934) ([3fb2786](https://github.com/vendure-ecommerce/vendure/commit/3fb2786)), closes [#3934](https://github.com/vendure-ecommerce/vendure/issues/3934)
43+
144
## 3.5.0 (2025-10-22)
245

346
#### Fixes

docs/docs/guides/extending-the-admin-ui/getting-started/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Until then, we will continue patching critical bugs and security issues. Communi
1111

1212
**For new projects, use the [React Admin Dashboard](/guides/extending-the-dashboard/getting-started/) instead.**
1313

14-
If you want to use the Admin UI and the Dashboard together please change the [compatibilityMode](/reference/core-plugins/admin-ui-plugin/admin-ui-plugin-options#compatibilitymode) to true.
14+
If you want to use the Admin UI and the Dashboard together, both plugins can now be used simultaneously without any special configuration.
1515
:::
1616

1717
When creating a plugin, you may wish to extend the Admin UI in order to expose a graphical interface to the plugin's functionality, or to add new functionality to the Admin UI itself. The UI can be extended with custom components written in [Angular](https://angular.io/) or [React](https://react.dev/).

docs/docs/guides/extending-the-dashboard/customizing-pages/page-blocks.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ defineDashboardExtension({
2626
location: {
2727
// This is the pageId of the page where this block will be
2828
pageId: 'product-detail',
29-
// can be "main" or "side"
29+
// can be "main", "side" or "full"
3030
column: 'side',
3131
position: {
3232
// Blocks are positioned relative to existing blocks on
@@ -90,10 +90,11 @@ position: {
9090

9191
## Block Columns
9292

93-
Blocks can be placed in two columns:
93+
Blocks can be placed in three columns:
9494

9595
- **`main`**: The main content area (wider column on the left)
9696
- **`side`**: The sidebar area (narrower column on the right)
97+
- **`full`**: Takes up the full horizontal width. This is mostly useful for adding blocks to list pages
9798

9899
## Context Data
99100

docs/docs/guides/extending-the-dashboard/deployment/index.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,10 @@ export default defineConfig({
5151

5252
### 2. Add DashboardPlugin to Vendure Config
5353

54-
:::warning Angular Admin UI compatibilityMode
55-
If you want to use the Admin UI and the Dashboard together please change the [compatibilityMode](/reference/core-plugins/admin-ui-plugin/admin-ui-plugin-options#compatibilitymode) to true.
54+
:::info Angular Admin UI compatibility
55+
If you want to use the Angular Admin UI and the Dashboard together, both plugins can now be used simultaneously without any special configuration.
5656
:::
5757

58-
5958
Add the DashboardPlugin to your `vendure-config.ts`:
6059

6160
```typescript title="src/vendure-config.ts"

docs/docs/guides/extending-the-dashboard/getting-started/index.md

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -188,19 +188,7 @@ npx vite
188188

189189
To stop the running dashboard, type `q` and hit enter.
190190

191-
:::warning Compatibility with the legacy Admin UI
191+
:::info Compatibility with the legacy Admin UI
192192
If you still need to run the legacy Angular-based Admin UI in parallel with the Dashboard,
193-
this is totally possible.
194-
195-
You just need to make sure to set the [compatibilityMode](/reference/core-plugins/admin-ui-plugin/admin-ui-plugin-options#compatibilitymode) setting in the
196-
AdminUiPlugin's init options.
197-
198-
```ts
199-
AdminUiPlugin.init({
200-
// ...
201-
// highlight-next-line
202-
compatibilityMode: true,
203-
})
204-
```
193+
this is totally possible. Both plugins can now be used simultaneously without any special configuration.
205194
:::
206-
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
---
2+
title: 'Localization'
3+
---
4+
5+
:::note
6+
Support for localization of Dashboard extensions was added in v3.5.1
7+
:::
8+
9+
The Dashboard uses [Lingui](https://lingui.dev/), which provides a powerful i18n solution for React:
10+
11+
- ICU MessageFormat support
12+
- Automatic message extraction
13+
- TypeScript integration
14+
- Pluralization support
15+
- Compile-time optimization
16+
17+
## Wrap your strings
18+
19+
First you'll need to wrap any strings that need to be localized:
20+
21+
```tsx
22+
import { Trans, useLingui } from '@lingui/react/macro';
23+
24+
function MyComponent() {
25+
const { t } = useLingui();
26+
27+
return (
28+
<div>
29+
<h1>
30+
// highlight-next-line
31+
<Trans>Welcome to Dashboard</Trans>
32+
</h1>
33+
// highlight-next-line
34+
<p>{t`Click here to continue`}</p>
35+
</div>
36+
);
37+
}
38+
```
39+
40+
You will mainly make use of the [Trans component](https://lingui.dev/ref/react#trans)
41+
and the [useLingui hook](https://lingui.dev/ref/react#uselingui).
42+
43+
## Extract translations
44+
45+
Create a `lingui.config.js` file in your project root, with references to any plugins that need to be localized:
46+
47+
```js title="lingui.config.js
48+
import { defineConfig } from '@lingui/cli';
49+
50+
export default defineConfig({
51+
sourceLocale: 'en',
52+
// Add any locales you wish to support
53+
locales: ['en', 'de'],
54+
catalogs: [
55+
// For each plugin you want to localize, add a catalog entry
56+
{
57+
// This is the output location of the generated .po files
58+
path: '<rootDir>/src/plugins/reviews/dashboard/i18n/{locale}',
59+
// This is the pattern that tells Lingui which files to scan
60+
// to extract translation strings
61+
include: ['<rootDir>/src/plugins/reviews/dashboard/**'],
62+
},
63+
],
64+
});
65+
```
66+
67+
Then extract the translations:
68+
69+
```bash
70+
npx lingui extract
71+
```
72+
73+
This will output the given locale files in the directories specified in the config file above.
74+
In this case:
75+
76+
```
77+
src/
78+
└── plugins/
79+
└── reviews/
80+
└── dashboard/
81+
└── i18n/
82+
├── en.po
83+
└── de.po
84+
```
85+
86+
Since we set the "sourceLocale" to be "en", the `en.po` file will already be complete. You'll then need to
87+
open up the `de.po` file and add German translations for each of the strings, by filling out the empty `msgstr` values:
88+
89+
```po title="de.po"
90+
#: test-plugins/reviews/dashboard/review-list.tsx:51
91+
msgid "Welcome to Dashboard"
92+
// highlight-next-line
93+
msgstr "Willkommen zum Dashboard"
94+
```

docs/docs/guides/extending-the-dashboard/migration/index.md

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,8 @@ Community contributions will always be merged and released.
1818
A recommended approach to migrating is to run both the Admin UI _and_ the new Dashboard in parallel. This allows you to start building
1919
new features right away with the new Dashboard while maintaining access to existing features that have not yet been migrated.
2020

21-
To do so, follow the instructions to [set up the Dashboard](/guides/extending-the-dashboard/getting-started/#installation--setup),
22-
and then make sure you set the [AdminUiPlugin compatibilityMode](/reference/core-plugins/admin-ui-plugin/admin-ui-plugin-options#compatibilitymode) option to `true`:
23-
24-
```ts
25-
AdminUiPlugin.init({
26-
// ... existing config
27-
compatibilityMode: true,
28-
}),
29-
```
21+
To do so, follow the instructions to [set up the Dashboard](/guides/extending-the-dashboard/getting-started/#installation--setup).
22+
Both plugins can now be used simultaneously without any special configuration.
3023

3124
## AI-Assisted Migration
3225

docs/docs/guides/how-to/telemetry/index.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ Clicking the blue "Run Query" button will show you the traces for that service.
233233
## Instrumenting Your Plugins
234234

235235
You can also instrument your own plugins and services with Open Telemetry. To do so,
236-
add the [Instrument decorator](/reference/typescript-api/telemetry/instrument) to your service class:
236+
add the [Instrument decorator](/reference/typescript-api/telemetry/instrument) to your **service class**:
237237

238238
```ts
239239
import { Injectable } from '@nestjs/common';
@@ -252,3 +252,9 @@ export class MyService {
252252
```
253253

254254
You should now be able to see calls to `MyService.myMethod` in your traces.
255+
256+
:::warning
257+
You should _not_ decorate GraphQL resolvers & REST controllers with this decorator. Those will
258+
already be instrumented, and adding the `@Instrument()` decorator will potentially
259+
interfere with other NestJS decorators on your resolver methods.
260+
:::

docs/docs/reference/core-plugins/admin-ui-plugin/admin-ui-plugin-options.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,12 @@ Allows the contents of the `vendure-ui-config.json` file to be set, e.g.
6363
for specifying the Vendure GraphQL API host, available UI languages, etc.
6464
### compatibilityMode
6565

66-
<MemberInfo kind="property" type={`boolean`} since="3.4.0" />
66+
<MemberInfo kind="property" type={`boolean`} since="3.4.0" />
6767

68-
If you are running the AdminUiPlugin at the same time as the new `DashboardPlugin`, you should
69-
set this to `true` in order to avoid a conflict caused by both plugins defining the same
70-
schema extensions.
68+
:::warning Deprecated
69+
This option is deprecated and no longer has any effect.
7170

71+
Previously used when running the AdminUiPlugin at the same time as the new `DashboardPlugin` to avoid conflicts, but this is no longer necessary as the schemas use different type names.
72+
:::
7273

7374
</div>

0 commit comments

Comments
 (0)