Просмотр исходного кода

Merge branch 'master' into new-docs

Michael Bromley 2 лет назад
Родитель
Сommit
b196e138cc
33 измененных файлов с 143 добавлено и 102 удалено
  1. 19 0
      CHANGELOG.md
  2. 4 4
      docs/docs/guides/extending-the-admin-ui/creating-detail-views/index.md
  3. 1 1
      lerna.json
  4. 3 3
      packages/admin-ui-plugin/package.json
  5. 1 1
      packages/admin-ui/package-lock.json
  6. 2 2
      packages/admin-ui/package.json
  7. 0 1
      packages/admin-ui/src/lib/catalog/src/components/collection-data-table/collection-data-table.component.html
  8. 1 1
      packages/admin-ui/src/lib/catalog/src/components/product-detail/product-detail.component.html
  9. 6 4
      packages/admin-ui/src/lib/catalog/src/components/product-variants-editor/product-variants-editor.component.ts
  10. 1 1
      packages/admin-ui/src/lib/core/src/common/version.ts
  11. 10 6
      packages/admin-ui/src/lib/core/src/providers/dashboard-widget/dashboard-widget.service.ts
  12. 0 1
      packages/admin-ui/src/lib/core/src/shared/components/data-table-2/data-table2.component.html
  13. 3 3
      packages/admin-ui/src/lib/dashboard/src/components/dashboard/dashboard.component.html
  14. 4 4
      packages/admin-ui/src/lib/dashboard/src/components/dashboard/dashboard.component.ts
  15. 0 1
      packages/admin-ui/src/lib/order/src/components/order-data-table/order-data-table.component.html
  16. 1 1
      packages/admin-ui/src/lib/order/src/components/order-detail/order-detail.component.html
  17. 3 3
      packages/asset-server-plugin/package.json
  18. 1 1
      packages/common/package.json
  19. 2 1
      packages/core/e2e/entity-hydrator.e2e-spec.ts
  20. 2 2
      packages/core/package.json
  21. 1 0
      packages/core/src/common/index.ts
  22. 2 1
      packages/core/src/config/session-cache/session-cache-strategy.ts
  23. 1 0
      packages/core/src/entity/index.ts
  24. 25 11
      packages/core/src/service/helpers/entity-hydrator/entity-hydrator.service.ts
  25. 3 3
      packages/create/package.json
  26. 3 3
      packages/elasticsearch-plugin/package.json
  27. 3 3
      packages/email-plugin/package.json
  28. 3 3
      packages/harden-plugin/package.json
  29. 3 3
      packages/job-queue-plugin/package.json
  30. 24 23
      packages/payments-plugin/e2e/mollie-dev-server.ts
  31. 4 4
      packages/payments-plugin/package.json
  32. 3 3
      packages/testing/package.json
  33. 4 4
      packages/ui-devkit/package.json

+ 19 - 0
CHANGELOG.md

@@ -1,3 +1,22 @@
+## <small>2.0.6 (2023-08-11)</small>
+
+
+#### Fixes
+
+* **admin-ui** Apply max dimensions to relation asset preview ([8169c4e](https://github.com/vendure-ecommerce/vendure/commit/8169c4e)), closes [#2320](https://github.com/vendure-ecommerce/vendure/issues/2320)
+* **admin-ui** Correctly display decimal tax rate in order summary ([1f507fa](https://github.com/vendure-ecommerce/vendure/commit/1f507fa)), closes [#2339](https://github.com/vendure-ecommerce/vendure/issues/2339)
+* **admin-ui** Correctly display widget titles in dropdown ([59a1d5d](https://github.com/vendure-ecommerce/vendure/commit/59a1d5d)), closes [#2334](https://github.com/vendure-ecommerce/vendure/issues/2334)
+* **admin-ui** Fix error when saving multiple new variant options ([e5ad0ee](https://github.com/vendure-ecommerce/vendure/commit/e5ad0ee)), closes [#2326](https://github.com/vendure-ecommerce/vendure/issues/2326)
+* **admin-ui** Fix header overlap on empty data tables ([ada153e](https://github.com/vendure-ecommerce/vendure/commit/ada153e)), closes [#2323](https://github.com/vendure-ecommerce/vendure/issues/2323) [#2325](https://github.com/vendure-ecommerce/vendure/issues/2325)
+* **admin-ui** Fix updating variant tax category ([ff29e9a](https://github.com/vendure-ecommerce/vendure/commit/ff29e9a)), closes [#2336](https://github.com/vendure-ecommerce/vendure/issues/2336)
+* **admin-ui** Fix width of affixed inputs ([75d51ed](https://github.com/vendure-ecommerce/vendure/commit/75d51ed))
+* **admin-ui** Fulfillment button takes existing state into account ([ef357cd](https://github.com/vendure-ecommerce/vendure/commit/ef357cd))
+* **admin-ui** Fulfillment dialog enforces max quantity ([571b157](https://github.com/vendure-ecommerce/vendure/commit/571b157)), closes [#2329](https://github.com/vendure-ecommerce/vendure/issues/2329)
+* **admin-ui** Prevent product creation without variants ([3364559](https://github.com/vendure-ecommerce/vendure/commit/3364559)), closes [#2337](https://github.com/vendure-ecommerce/vendure/issues/2337)
+* **core** Fix entity hydration of nested array entities ([55009a5](https://github.com/vendure-ecommerce/vendure/commit/55009a5)), closes [#2013](https://github.com/vendure-ecommerce/vendure/issues/2013)
+* **core** Fix logic relating to partial fulfillments ([6f48ee2](https://github.com/vendure-ecommerce/vendure/commit/6f48ee2)), closes [#2324](https://github.com/vendure-ecommerce/vendure/issues/2324) [#2191](https://github.com/vendure-ecommerce/vendure/issues/2191)
+* **core** Prevent fulfillments with too great a quantity ([579459a](https://github.com/vendure-ecommerce/vendure/commit/579459a)), closes [#2329](https://github.com/vendure-ecommerce/vendure/issues/2329)
+
 ## <small>2.0.5 (2023-07-27)</small>
 
 

+ 4 - 4
docs/docs/guides/extending-the-admin-ui/creating-detail-views/index.md

@@ -18,7 +18,7 @@ Let's say you have a plugin which adds a new entity to the database called `Prod
 The detail component itself is an Angular component which extends the [BaseDetailComponent]({{< relref "base-detail-component" >}}) or [TypedBaseDetailComponent]({{< relref "typed-base-detail-component" >}}) class.
 
 ```ts
-import { ChangeDetectionStrategy, Component } from '@angular/core';
+import { ChangeDetectionStrategy, Component, OnInit, OnDestroy } from '@angular/core';
 import { FormBuilder } from '@angular/forms';
 import { TypedBaseDetailComponent, LanguageCode } from '@vendure/admin-ui/core';
 import { gql } from 'apollo-angular';
@@ -47,7 +47,7 @@ export const GET_REVIEW_DETAIL = gql`
   styleUrls: ['./review-detail.component.scss'],
   changeDetection: ChangeDetectionStrategy.OnPush,
 })
-export class ReviewDetailComponent extends TypedBaseDetailComponent<typeof GetReviewDetailDocument> implements OnInit, OnDestroy {
+export class ReviewDetailComponent extends TypedBaseDetailComponent<typeof GetReviewDetailDocument, 'review'> implements OnInit, OnDestroy {
   detailForm = this.formBuilder.group({
     title: [''],
     rating: [1],
@@ -207,7 +207,7 @@ import { GetReviewDocument, GetReviewDetailQuery } from './generated-types';
             const review$ = inject(DataService)
               .query(GetReviewDocument, { id: route.paramMap.get('id') })
               .mapStream(data => data.review);
-            return of({ detail: { entity: review$ } });
+            return of({ entity: review$ });
           },
         },
         data: {
@@ -220,7 +220,7 @@ import { GetReviewDocument, GetReviewDetailQuery } from './generated-types';
                 link: ['/extensions', 'reviews'],
               },
               {
-                label: `${entity.title}`,
+                label: `${entity?.title ?? 'New Review'}`,
                 link: [],
               },
             ]),

+ 1 - 1
lerna.json

@@ -1,6 +1,6 @@
 {
     "packages": ["packages/*"],
-    "version": "2.0.5",
+    "version": "2.0.6",
     "npmClient": "yarn",
     "useWorkspaces": true,
     "command": {

+ 3 - 3
packages/admin-ui-plugin/package.json

@@ -1,6 +1,6 @@
 {
     "name": "@vendure/admin-ui-plugin",
-    "version": "2.0.5",
+    "version": "2.0.6",
     "main": "lib/index.js",
     "types": "lib/index.d.ts",
     "files": [
@@ -21,8 +21,8 @@
     "devDependencies": {
         "@types/express": "^4.17.8",
         "@types/fs-extra": "^9.0.1",
-        "@vendure/common": "^2.0.5",
-        "@vendure/core": "^2.0.5",
+        "@vendure/common": "^2.0.6",
+        "@vendure/core": "^2.0.6",
         "express": "^4.17.1",
         "rimraf": "^3.0.2",
         "typescript": "4.9.5"

+ 1 - 1
packages/admin-ui/package-lock.json

@@ -1,6 +1,6 @@
 {
     "name": "@vendure/admin-ui",
-    "version": "2.0.5",
+    "version": "2.0.6",
     "lockfileVersion": 1,
     "requires": true,
     "dependencies": {

+ 2 - 2
packages/admin-ui/package.json

@@ -1,6 +1,6 @@
 {
     "name": "@vendure/admin-ui",
-    "version": "2.0.5",
+    "version": "2.0.6",
     "license": "MIT",
     "scripts": {
         "ng": "ng",
@@ -49,7 +49,7 @@
         "@ng-select/ng-select": "^11.0.0",
         "@ngx-translate/core": "^14.0.0",
         "@ngx-translate/http-loader": "^7.0.0",
-        "@vendure/common": "^2.0.5",
+        "@vendure/common": "^2.0.6",
         "@webcomponents/custom-elements": "^1.5.1",
         "apollo-angular": "^5.0.0",
         "apollo-upload-client": "^17.0.0",

+ 0 - 1
packages/admin-ui/src/lib/catalog/src/components/collection-data-table/collection-data-table.component.html

@@ -5,7 +5,6 @@
     <table
         class=""
         [class.no-select]="disableSelect"
-        [style.table-layout]="!items?.length ? 'fixed' : 'inherit'"
     >
         <thead [class.items-selected]="selectionManager?.selection.length">
             <tr class="heading-row">

+ 1 - 1
packages/admin-ui/src/lib/catalog/src/components/product-detail/product-detail.component.html

@@ -16,7 +16,7 @@
                 class="btn btn-primary"
                 *ngIf="isNew$ | async; else updateButton"
                 (click)="create()"
-                [disabled]="detailForm.invalid || detailForm.pristine"
+                [disabled]="detailForm.invalid || detailForm.pristine || createVariantsConfig.variants.length === 0"
             >
                 {{ 'common.create' | translate }}
             </button>

+ 6 - 4
packages/admin-ui/src/lib/catalog/src/components/product-variants-editor/product-variants-editor.component.ts

@@ -15,6 +15,7 @@ import {
     SelectionManager,
 } from '@vendure/admin-ui/core';
 import { normalizeString } from '@vendure/common/lib/normalize-string';
+import { unique } from '@vendure/common/lib/unique';
 import { EMPTY, Observable, Subject } from 'rxjs';
 import { map, startWith, switchMap } from 'rxjs/operators';
 
@@ -296,14 +297,15 @@ export class ProductVariantsEditorComponent implements OnInit, DeactivateAware {
     }
 
     addOptionToVariant(variant: NonNullable<GetProductVariantOptionsQuery['product']>['variants'][number]) {
+        const optionIds = [
+            ...variant.options.map(o => o.id),
+            ...Object.values(this.optionsToAddToVariant[variant.id]),
+        ];
         this.dataService.product
             .updateProductVariants([
                 {
                     id: variant.id,
-                    optionIds: [
-                        ...variant.options.map(o => o.id),
-                        ...Object.values(this.optionsToAddToVariant[variant.id]),
-                    ],
+                    optionIds: unique(optionIds),
                 },
             ])
             .subscribe(({ updateProductVariants }) => {

+ 1 - 1
packages/admin-ui/src/lib/core/src/common/version.ts

@@ -1,2 +1,2 @@
 // Auto-generated by the set-version.js script.
-export const ADMIN_UI_VERSION = '2.0.5';
+export const ADMIN_UI_VERSION = '2.0.6';

+ 10 - 6
packages/admin-ui/src/lib/core/src/providers/dashboard-widget/dashboard-widget.service.ts

@@ -28,15 +28,19 @@ export class DashboardWidgetService {
         this.registry.set(id, config);
     }
 
-    getAvailableIds(currentUserPermissions: Permission[]): string[] {
-        const hasAllPermissions = (requiredPerms: string[], userPerms: string[]): boolean => requiredPerms.every(p => userPerms.includes(p));
+    getAvailableWidgets(
+        currentUserPermissions: Permission[],
+    ): Array<{ id: string; config: DashboardWidgetConfig }> {
+        const hasAllPermissions = (requiredPerms: string[], userPerms: string[]): boolean =>
+            requiredPerms.every(p => userPerms.includes(p));
 
         return [...this.registry.entries()]
-            .filter(([id, config]) => (
+            .filter(
+                ([id, config]) =>
                     !config.requiresPermissions ||
-                    hasAllPermissions(config.requiresPermissions, currentUserPermissions)
-                ))
-            .map(([id]) => id);
+                    hasAllPermissions(config.requiresPermissions, currentUserPermissions),
+            )
+            .map(([id, config]) => ({ id, config }));
     }
 
     getWidgetById(id: string) {

+ 0 - 1
packages/admin-ui/src/lib/core/src/shared/components/data-table-2/data-table2.component.html

@@ -5,7 +5,6 @@
     <table
         class=""
         [class.no-select]="disableSelect"
-        [style.table-layout]="!items?.length ? 'fixed' : 'inherit'"
     >
         <thead [class.items-selected]="selectionManager?.selection.length">
             <tr class="heading-row">

+ 3 - 3
packages/admin-ui/src/lib/dashboard/src/components/dashboard/dashboard.component.html

@@ -9,10 +9,10 @@
             <vdr-dropdown-menu vdrPosition="bottom-right">
                 <button
                     vdrDropdownItem
-                    *ngFor="let id of availableWidgetIds$ | async"
-                    (click)="addWidget(id)"
+                    *ngFor="let widget of availableWidgets$ | async"
+                    (click)="addWidget(widget.id)"
                 >
-                    {{ id }}
+                    {{ (widget.config.title ?? widget.id) | translate }}
                 </button>
             </vdr-dropdown-menu>
         </vdr-dropdown>

+ 4 - 4
packages/admin-ui/src/lib/dashboard/src/components/dashboard/dashboard.component.ts

@@ -22,7 +22,7 @@ import { map, tap } from 'rxjs/operators';
 })
 export class DashboardComponent implements OnInit {
     widgetLayout: WidgetLayout | undefined;
-    availableWidgetIds$: Observable<string[]>;
+    availableWidgets$: Observable<Array<{ id: string; config: DashboardWidgetConfig }>>;
     private readonly deletionMarker = '__delete__';
     private setTitle = titleSetter();
     constructor(
@@ -33,10 +33,10 @@ export class DashboardComponent implements OnInit {
     ) {}
 
     ngOnInit() {
-        this.availableWidgetIds$ = this.dataService.client.userStatus().stream$.pipe(
+        this.availableWidgets$ = this.dataService.client.userStatus().stream$.pipe(
             map(({ userStatus }) => userStatus.permissions),
-            map(permissions => this.dashboardWidgetService.getAvailableIds(permissions)),
-            tap(ids => (this.widgetLayout = this.initLayout(ids))),
+            map(permissions => this.dashboardWidgetService.getAvailableWidgets(permissions)),
+            tap(widgets => (this.widgetLayout = this.initLayout(widgets.map(w => w.id)))),
         );
         this.setTitle('breadcrumb.dashboard');
     }

+ 0 - 1
packages/admin-ui/src/lib/order/src/components/order-data-table/order-data-table.component.html

@@ -5,7 +5,6 @@
     <table
         class=""
         [class.no-select]="disableSelect"
-        [style.table-layout]="!items?.length ? 'fixed' : 'inherit'"
     >
         <thead [class.items-selected]="selectionManager?.selection.length">
             <tr class="heading-row">

+ 1 - 1
packages/admin-ui/src/lib/order/src/components/order-detail/order-detail.component.html

@@ -169,7 +169,7 @@
                 <tbody>
                     <tr *ngFor="let row of order.taxSummary">
                         <td>{{ row.description }}</td>
-                        <td>{{ row.taxRate / 100 | percent }}</td>
+                        <td>{{ row.taxRate / 100 | percent:'0.0-2' }}</td>
                         <td>{{ row.taxBase | localeCurrency : order.currencyCode }}</td>
                         <td>{{ row.taxTotal | localeCurrency : order.currencyCode }}</td>
                     </tr>

+ 3 - 3
packages/asset-server-plugin/package.json

@@ -1,6 +1,6 @@
 {
     "name": "@vendure/asset-server-plugin",
-    "version": "2.0.5",
+    "version": "2.0.6",
     "main": "lib/index.js",
     "types": "lib/index.d.ts",
     "files": [
@@ -27,8 +27,8 @@
         "@types/fs-extra": "^9.0.8",
         "@types/node-fetch": "^2.5.8",
         "@types/sharp": "^0.30.4",
-        "@vendure/common": "^2.0.5",
-        "@vendure/core": "^2.0.5",
+        "@vendure/common": "^2.0.6",
+        "@vendure/core": "^2.0.6",
         "express": "^4.17.1",
         "node-fetch": "^2.6.7",
         "rimraf": "^3.0.2",

+ 1 - 1
packages/common/package.json

@@ -1,6 +1,6 @@
 {
     "name": "@vendure/common",
-    "version": "2.0.5",
+    "version": "2.0.6",
     "main": "index.js",
     "license": "MIT",
     "scripts": {

+ 2 - 1
packages/core/e2e/entity-hydrator.e2e-spec.ts

@@ -257,13 +257,14 @@ describe('Entity hydration', () => {
             orderResultGuard.assertSuccess(addItemToOrder);
             const channel = await server.app.get(ChannelService).getDefaultChannel();
             // This is ugly, but in our real life example we use a CTX constructed by Vendure
+            const internalOrderId = +addItemToOrder.id.replace(/^\D+/g, '');
             const ctx = new RequestContext({
                 channel,
                 authorizedAsOwnerOnly: true,
                 apiType: 'shop',
                 isAuthorized: true,
                 session: {
-                    activeOrderId: addItemToOrder.id,
+                    activeOrderId: internalOrderId,
                     activeChannelId: 1,
                     user: {
                         id: 2,

+ 2 - 2
packages/core/package.json

@@ -1,6 +1,6 @@
 {
     "name": "@vendure/core",
-    "version": "2.0.5",
+    "version": "2.0.6",
     "description": "A modern, headless ecommerce framework",
     "repository": {
         "type": "git",
@@ -52,7 +52,7 @@
         "@nestjs/testing": "9.3.9",
         "@nestjs/typeorm": "9.0.1",
         "@types/fs-extra": "^9.0.1",
-        "@vendure/common": "^2.0.5",
+        "@vendure/common": "^2.0.6",
         "apollo-server-express": "3.6.3",
         "bcrypt": "^5.1.0",
         "body-parser": "^1.19.0",

+ 1 - 0
packages/core/src/common/index.ts

@@ -1,6 +1,7 @@
 export * from './finite-state-machine/finite-state-machine';
 export * from './finite-state-machine/types';
 export * from './async-queue';
+export * from './calculated-decorator';
 export * from './error/errors';
 export * from './error/error-result';
 export * from './error/generated-graphql-admin-errors';

+ 2 - 1
packages/core/src/config/session-cache/session-cache-strategy.ts

@@ -76,6 +76,7 @@ export type CachedSession = {
  * }
  * const loggerCtx = 'RedisSessionCacheStrategy';
  * const DEFAULT_NAMESPACE = 'vendure-session-cache';
+ * const DEFAULT_TTL = 86400;
  *
  * export class RedisSessionCacheStrategy implements SessionCacheStrategy {
  *   private client: Redis;
@@ -107,7 +108,7 @@ export type CachedSession = {
  *
  *   async set(session: CachedSession) {
  *     try {
- *       await this.client.set(this.namespace(session.token), JSON.stringify(session));
+ *       await this.client.set(this.namespace(session.token), JSON.stringify(session), 'EX', DEFAULT_TTL);
  *     } catch (e: any) {
  *       Logger.error(`Could not set cached session: ${e.message}`, loggerCtx);
  *     }

+ 1 - 0
packages/core/src/entity/index.ts

@@ -42,6 +42,7 @@ export * from './product/product.entity';
 export * from './promotion/promotion.entity';
 export * from './refund/refund.entity';
 export * from './role/role.entity';
+export * from './seller/seller.entity';
 export * from './session/anonymous-session.entity';
 export * from './session/authenticated-session.entity';
 export * from './session/session.entity';

+ 25 - 11
packages/core/src/service/helpers/entity-hydrator/entity-hydrator.service.ts

@@ -212,20 +212,34 @@ export class EntityHydrator {
         entity: VendureEntity,
         path: string[],
     ): VendureEntity | VendureEntity[] | undefined {
-        let relation: any = entity;
-        for (let i = 0; i < path.length; i++) {
-            const part = path[i];
-            const isLast = i === path.length - 1;
-            if (relation[part]) {
-                relation =
-                    Array.isArray(relation[part]) && relation[part].length && !isLast
-                        ? relation[part][0]
-                        : relation[part];
-            } else {
+        let isArrayResult = false;
+        const result: VendureEntity[] = [];
+
+        function visit(parent: any, parts: string[]): any {
+            if (parts.length === 0) {
                 return;
             }
+            const part = parts.shift() as string;
+            const target = parent[part];
+            if (Array.isArray(target)) {
+                isArrayResult = true;
+                if (parts.length === 0) {
+                    result.push(...target);
+                } else {
+                    for (const item of target) {
+                        visit(item, parts.slice());
+                    }
+                }
+            } else {
+                if (parts.length === 0) {
+                    result.push(target);
+                } else {
+                    visit(target, parts.slice());
+                }
+            }
         }
-        return relation;
+        visit(entity, path.slice());
+        return isArrayResult ? result : result[0];
     }
 
     private getRelationEntityTypeAtPath(entity: VendureEntity, path: string): Type<VendureEntity> {

+ 3 - 3
packages/create/package.json

@@ -1,6 +1,6 @@
 {
     "name": "@vendure/create",
-    "version": "2.0.5",
+    "version": "2.0.6",
     "license": "MIT",
     "bin": {
         "create": "./index.js"
@@ -28,14 +28,14 @@
         "@types/fs-extra": "^9.0.1",
         "@types/handlebars": "^4.1.0",
         "@types/semver": "^6.2.2",
-        "@vendure/core": "^2.0.5",
+        "@vendure/core": "^2.0.6",
         "rimraf": "^3.0.2",
         "ts-node": "^10.9.1",
         "typescript": "4.9.5"
     },
     "dependencies": {
         "@clack/prompts": "^0.6.3",
-        "@vendure/common": "^2.0.5",
+        "@vendure/common": "^2.0.6",
         "commander": "^10.0.0",
         "cross-spawn": "^7.0.3",
         "detect-port": "^1.5.1",

+ 3 - 3
packages/elasticsearch-plugin/package.json

@@ -1,6 +1,6 @@
 {
     "name": "@vendure/elasticsearch-plugin",
-    "version": "2.0.5",
+    "version": "2.0.6",
     "license": "MIT",
     "main": "lib/index.js",
     "types": "lib/index.d.ts",
@@ -26,8 +26,8 @@
         "fast-deep-equal": "^3.1.3"
     },
     "devDependencies": {
-        "@vendure/common": "^2.0.5",
-        "@vendure/core": "^2.0.5",
+        "@vendure/common": "^2.0.6",
+        "@vendure/core": "^2.0.6",
         "rimraf": "^3.0.2",
         "typescript": "4.9.5"
     }

+ 3 - 3
packages/email-plugin/package.json

@@ -1,6 +1,6 @@
 {
     "name": "@vendure/email-plugin",
-    "version": "2.0.5",
+    "version": "2.0.6",
     "license": "MIT",
     "main": "lib/index.js",
     "types": "lib/index.d.ts",
@@ -35,8 +35,8 @@
         "@types/fs-extra": "^9.0.1",
         "@types/handlebars": "^4.1.0",
         "@types/mjml": "^4.0.4",
-        "@vendure/common": "^2.0.5",
-        "@vendure/core": "^2.0.5",
+        "@vendure/common": "^2.0.6",
+        "@vendure/core": "^2.0.6",
         "rimraf": "^3.0.2",
         "typescript": "4.9.5"
     }

+ 3 - 3
packages/harden-plugin/package.json

@@ -1,6 +1,6 @@
 {
     "name": "@vendure/harden-plugin",
-    "version": "2.0.5",
+    "version": "2.0.6",
     "license": "MIT",
     "main": "lib/index.js",
     "types": "lib/index.d.ts",
@@ -21,7 +21,7 @@
         "graphql-query-complexity": "^0.12.0"
     },
     "devDependencies": {
-        "@vendure/common": "^2.0.5",
-        "@vendure/core": "^2.0.5"
+        "@vendure/common": "^2.0.6",
+        "@vendure/core": "^2.0.6"
     }
 }

+ 3 - 3
packages/job-queue-plugin/package.json

@@ -1,6 +1,6 @@
 {
     "name": "@vendure/job-queue-plugin",
-    "version": "2.0.5",
+    "version": "2.0.6",
     "license": "MIT",
     "main": "package/index.js",
     "types": "package/index.d.ts",
@@ -23,8 +23,8 @@
     },
     "devDependencies": {
         "@google-cloud/pubsub": "^2.8.0",
-        "@vendure/common": "^2.0.5",
-        "@vendure/core": "^2.0.5",
+        "@vendure/common": "^2.0.6",
+        "@vendure/core": "^2.0.6",
         "bullmq": "^3.15.5",
         "ioredis": "^5.3.0",
         "rimraf": "^3.0.2",

+ 24 - 23
packages/payments-plugin/e2e/mollie-dev-server.ts

@@ -20,8 +20,12 @@ import { MolliePlugin } from '../package/mollie';
 import { molliePaymentHandler } from '../package/mollie/mollie.handler';
 
 import { CREATE_PAYMENT_METHOD } from './graphql/admin-queries';
-import { CreatePaymentMethod } from './graphql/generated-admin-types';
-import { AddItemToOrder } from './graphql/generated-shop-types';
+import {
+    CreatePaymentMethodMutation,
+    CreatePaymentMethodMutationVariables,
+    LanguageCode,
+} from './graphql/generated-admin-types';
+import { AddItemToOrderMutation, AddItemToOrderMutationVariables } from './graphql/generated-shop-types';
 import { ADD_ITEM_TO_ORDER } from './graphql/shop-queries';
 import { CREATE_MOLLIE_PAYMENT_INTENT, setShipping } from './payment-helpers';
 
@@ -30,6 +34,7 @@ import { CREATE_MOLLIE_PAYMENT_INTENT, setShipping } from './payment-helpers';
  */
 /* eslint-disable @typescript-eslint/no-floating-promises */
 async function runMollieDevServer(useDynamicRedirectUrl: boolean) {
+    // eslint-disable-next-line no-console
     console.log('Starting Mollie dev server with dynamic redirectUrl: ', useDynamicRedirectUrl);
     // eslint-disable-next-line @typescript-eslint/no-var-requires
     require('dotenv').config();
@@ -68,18 +73,26 @@ async function runMollieDevServer(useDynamicRedirectUrl: boolean) {
         }
     `);
     // Create method
-    await adminClient.query<CreatePaymentMethod.Mutation, CreatePaymentMethod.Variables>(
+    await adminClient.query<CreatePaymentMethodMutation, CreatePaymentMethodMutationVariables>(
         CREATE_PAYMENT_METHOD,
         {
             input: {
                 code: 'mollie',
-                name: 'Mollie payment test',
-                description: 'This is a Mollie test payment method',
+                translations: [
+                    {
+                        languageCode: LanguageCode.en,
+                        name: 'Mollie payment test',
+                        description: 'This is a Mollie test payment method',
+                    },
+                ],
                 enabled: true,
                 handler: {
                     code: molliePaymentHandler.code,
                     arguments: [
-                        { name: 'redirectUrl', value: `${tunnel.url}/admin/orders?filter=open&page=1&dynamicRedirectUrl=false` },
+                        {
+                            name: 'redirectUrl',
+                            value: `${tunnel.url}/admin/orders?filter=open&page=1&dynamicRedirectUrl=false`,
+                        },
                         // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
                         { name: 'apiKey', value: process.env.MOLLIE_APIKEY! },
                         { name: 'autoCapture', value: 'false' },
@@ -90,9 +103,9 @@ async function runMollieDevServer(useDynamicRedirectUrl: boolean) {
     );
     // Prepare order for payment
     await shopClient.asUserWithCredentials('hayden.zieme12@hotmail.com', 'test');
-    await shopClient.query<AddItemToOrder.Order, AddItemToOrder.Variables>(ADD_ITEM_TO_ORDER, {
+    await shopClient.query<AddItemToOrderMutation, AddItemToOrderMutationVariables>(ADD_ITEM_TO_ORDER, {
         productVariantId: 'T_5',
-        quantity: 10,
+        quantity: 1,
     });
     const ctx = new RequestContext({
         apiType: 'admin',
@@ -100,22 +113,9 @@ async function runMollieDevServer(useDynamicRedirectUrl: boolean) {
         authorizedAsOwnerOnly: false,
         channel: await server.app.get(ChannelService).getDefaultChannel(),
     });
-    await server.app.get(OrderService).addSurchargeToOrder(ctx, 1, {
-        description: 'Negative test surcharge',
-        listPrice: -20000,
-    });
     await setShipping(shopClient);
     // Add pre payment to order
     const order = await server.app.get(OrderService).findOne(ctx, 1);
-    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
-    await server.app.get(PaymentService).createManualPayment(ctx, order!, 10000, {
-        method: 'Manual',
-        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
-        orderId: order!.id,
-        metadata: {
-            bogus: 'test',
-        },
-    });
     const { createMolliePaymentIntent } = await shopClient.query(CREATE_MOLLIE_PAYMENT_INTENT, {
         input: {
             redirectUrl: `${tunnel.url}/admin/orders?filter=open&page=1&dynamicRedirectUrl=true`,
@@ -126,10 +126,11 @@ async function runMollieDevServer(useDynamicRedirectUrl: boolean) {
     if (createMolliePaymentIntent.errorCode) {
         throw createMolliePaymentIntent;
     }
-    Logger.info(`Mollie payment link: ${createMolliePaymentIntent.url as string}`, 'Mollie DevServer');
+    // eslint-disable-next-line no-console
+    console.log('\x1b[41m', `Mollie payment link: ${createMolliePaymentIntent.url as string}`, '\x1b[0m');
 }
 
 (async () => {
     // Change the value of the parameter to true to test with the dynamic redirectUrl functionality
     await runMollieDevServer(false);
-})()
+})();

+ 4 - 4
packages/payments-plugin/package.json

@@ -1,6 +1,6 @@
 {
     "name": "@vendure/payments-plugin",
-    "version": "2.0.5",
+    "version": "2.0.6",
     "license": "MIT",
     "main": "package/index.js",
     "types": "package/index.d.ts",
@@ -46,9 +46,9 @@
         "@mollie/api-client": "^3.6.0",
         "@types/braintree": "^2.22.15",
         "@types/localtunnel": "2.0.1",
-        "@vendure/common": "^2.0.5",
-        "@vendure/core": "^2.0.5",
-        "@vendure/testing": "^2.0.5",
+        "@vendure/common": "^2.0.6",
+        "@vendure/core": "^2.0.6",
+        "@vendure/testing": "^2.0.6",
         "braintree": "^3.0.0",
         "localtunnel": "2.0.1",
         "nock": "^13.1.4",

+ 3 - 3
packages/testing/package.json

@@ -1,6 +1,6 @@
 {
     "name": "@vendure/testing",
-    "version": "2.0.5",
+    "version": "2.0.6",
     "description": "End-to-end testing tools for Vendure projects",
     "keywords": [
         "vendure",
@@ -38,7 +38,7 @@
     "dependencies": {
         "@graphql-typed-document-node/core": "^3.2.0",
         "@types/node-fetch": "^2.5.4",
-        "@vendure/common": "^2.0.5",
+        "@vendure/common": "^2.0.6",
         "faker": "^4.1.0",
         "form-data": "^3.0.0",
         "graphql": "16.6.0",
@@ -49,7 +49,7 @@
     "devDependencies": {
         "@types/mysql": "^2.15.15",
         "@types/pg": "^7.14.5",
-        "@vendure/core": "^2.0.5",
+        "@vendure/core": "^2.0.6",
         "mysql": "^2.18.1",
         "pg": "^8.4.0",
         "rimraf": "^3.0.0",

+ 4 - 4
packages/ui-devkit/package.json

@@ -1,6 +1,6 @@
 {
     "name": "@vendure/ui-devkit",
-    "version": "2.0.5",
+    "version": "2.0.6",
     "description": "A library for authoring Vendure Admin UI extensions",
     "keywords": [
         "vendure",
@@ -40,8 +40,8 @@
         "@angular/cli": "^16.0.3",
         "@angular/compiler": "^16.0.3",
         "@angular/compiler-cli": "^16.0.3",
-        "@vendure/admin-ui": "^2.0.5",
-        "@vendure/common": "^2.0.5",
+        "@vendure/admin-ui": "^2.0.6",
+        "@vendure/common": "^2.0.6",
         "chalk": "^4.1.0",
         "chokidar": "^3.5.1",
         "fs-extra": "^10.0.0",
@@ -51,7 +51,7 @@
     "devDependencies": {
         "@rollup/plugin-node-resolve": "^15.0.1",
         "@types/fs-extra": "^11.0.1",
-        "@vendure/core": "^2.0.5",
+        "@vendure/core": "^2.0.6",
         "rimraf": "^3.0.2",
         "rollup": "^3.18.0",
         "rollup-plugin-terser": "^7.0.2",