Browse Source

feat(core): Pass RequestContext to ShippingEligibilityChecker functions

BREAKING CHANGE: The ShippingEligibilityChecker `check()`
function signature has changed: the first argument is now the
RequestContext of the current request.
Michael Bromley 5 years ago
parent
commit
a5db02285a

+ 1 - 1
packages/core/src/config/shipping-method/default-shipping-eligibility-checker.ts

@@ -18,7 +18,7 @@ export const defaultShippingEligibilityChecker = new ShippingEligibilityChecker(
             ],
         },
     },
-    check: (order, args) => {
+    check: (ctx, order, args) => {
         return order.total >= args.orderMinimum;
     },
 });

+ 4 - 2
packages/core/src/config/shipping-method/shipping-eligibility-checker.ts

@@ -1,5 +1,6 @@
 import { ConfigArg } from '@vendure/common/lib/generated-types';
 
+import { RequestContext } from '../../api/common/request-context';
 import {
     ConfigArgs,
     ConfigArgValues,
@@ -57,8 +58,8 @@ export class ShippingEligibilityChecker<T extends ConfigArgs = ConfigArgs> exten
      *
      * @internal
      */
-    check(order: Order, args: ConfigArg[]): boolean | Promise<boolean> {
-        return this.checkFn(order, this.argsArrayToHash(args));
+    check(ctx: RequestContext, order: Order, args: ConfigArg[]): boolean | Promise<boolean> {
+        return this.checkFn(ctx, order, this.argsArrayToHash(args));
     }
 }
 
@@ -70,6 +71,7 @@ export class ShippingEligibilityChecker<T extends ConfigArgs = ConfigArgs> exten
  * @docsCategory shipping
  */
 export type CheckShippingEligibilityCheckerFn<T extends ConfigArgs> = (
+    ctx: RequestContext,
     order: Order,
     args: ConfigArgValues<T>,
 ) => boolean | Promise<boolean>;

+ 2 - 2
packages/core/src/entity/shipping-method/shipping-method.entity.ts

@@ -72,10 +72,10 @@ export class ShippingMethod extends VendureEntity implements ChannelAware, SoftD
         }
     }
 
-    async test(order: Order): Promise<boolean> {
+    async test(ctx: RequestContext, order: Order): Promise<boolean> {
         const checker = this.allCheckers[this.checker.code];
         if (checker) {
-            return checker.check(order, this.checker.args);
+            return checker.check(ctx, order, this.checker.args);
         } else {
             return false;
         }

+ 1 - 1
packages/core/src/service/helpers/shipping-calculator/shipping-calculator.ts

@@ -36,7 +36,7 @@ export class ShippingCalculator {
         order: Order,
         method: ShippingMethod,
     ): Promise<EligibleShippingMethod | undefined> {
-        const eligible = await method.test(order);
+        const eligible = await method.test(ctx, order);
         if (eligible) {
             const result = await method.apply(ctx, order);
             if (result) {

+ 1 - 1
packages/core/src/service/services/order-testing.service.ts

@@ -45,7 +45,7 @@ export class OrderTestingService {
             calculator: this.shippingConfiguration.parseCalculatorInput(input.calculator),
         });
         const mockOrder = await this.buildMockOrder(ctx, input.shippingAddress, input.lines);
-        const eligible = await shippingMethod.test(mockOrder);
+        const eligible = await shippingMethod.test(ctx, mockOrder);
         const result = eligible ? await shippingMethod.apply(ctx, mockOrder) : undefined;
         return {
             eligible,