Browse Source

feat(core): Expose order state machine config via `serverConfig` type

Michael Bromley 5 years ago
parent
commit
0a77438824

+ 7 - 0
packages/asset-server-plugin/e2e/graphql/generated-e2e-asset-server-plugin-types.ts

@@ -2440,6 +2440,12 @@ export type OrderListOptions = {
     filter?: Maybe<OrderFilterParameter>;
 };
 
+export type OrderProcessState = {
+    __typename?: 'OrderProcessState';
+    name: Scalars['String'];
+    to: Array<Scalars['String']>;
+};
+
 export type OrderSortParameter = {
     id?: Maybe<SortOrder>;
     createdAt?: Maybe<SortOrder>;
@@ -3210,6 +3216,7 @@ export type SearchResultSortParameter = {
 
 export type ServerConfig = {
     __typename?: 'ServerConfig';
+    orderProcess: Array<OrderProcessState>;
     customFieldConfig: CustomFields;
 };
 

+ 7 - 0
packages/common/src/generated-shop-types.ts

@@ -1649,6 +1649,12 @@ export type OrderListOptions = {
     filter?: Maybe<OrderFilterParameter>;
 };
 
+export type OrderProcessState = {
+    __typename?: 'OrderProcessState';
+    name: Scalars['String'];
+    to: Array<Scalars['String']>;
+};
+
 export type OrderSortParameter = {
     id?: Maybe<SortOrder>;
     createdAt?: Maybe<SortOrder>;
@@ -2133,6 +2139,7 @@ export type SearchResultSortParameter = {
 
 export type ServerConfig = {
     __typename?: 'ServerConfig';
+    orderProcess: Array<OrderProcessState>;
     customFieldConfig: CustomFields;
 };
 

+ 7 - 0
packages/common/src/generated-types.ts

@@ -2527,6 +2527,12 @@ export type OrderListOptions = {
   filter?: Maybe<OrderFilterParameter>;
 };
 
+export type OrderProcessState = {
+   __typename?: 'OrderProcessState';
+  name: Scalars['String'];
+  to: Array<Scalars['String']>;
+};
+
 export type OrderSortParameter = {
   id?: Maybe<SortOrder>;
   createdAt?: Maybe<SortOrder>;
@@ -3335,6 +3341,7 @@ export type SearchResultSortParameter = {
 
 export type ServerConfig = {
    __typename?: 'ServerConfig';
+  orderProcess: Array<OrderProcessState>;
   customFieldConfig: CustomFields;
 };
 

+ 7 - 0
packages/core/e2e/graphql/generated-e2e-admin-types.ts

@@ -2440,6 +2440,12 @@ export type OrderListOptions = {
     filter?: Maybe<OrderFilterParameter>;
 };
 
+export type OrderProcessState = {
+    __typename?: 'OrderProcessState';
+    name: Scalars['String'];
+    to: Array<Scalars['String']>;
+};
+
 export type OrderSortParameter = {
     id?: Maybe<SortOrder>;
     createdAt?: Maybe<SortOrder>;
@@ -3210,6 +3216,7 @@ export type SearchResultSortParameter = {
 
 export type ServerConfig = {
     __typename?: 'ServerConfig';
+    orderProcess: Array<OrderProcessState>;
     customFieldConfig: CustomFields;
 };
 

+ 7 - 0
packages/core/e2e/graphql/generated-e2e-shop-types.ts

@@ -1649,6 +1649,12 @@ export type OrderListOptions = {
     filter?: Maybe<OrderFilterParameter>;
 };
 
+export type OrderProcessState = {
+    __typename?: 'OrderProcessState';
+    name: Scalars['String'];
+    to: Array<Scalars['String']>;
+};
+
 export type OrderSortParameter = {
     id?: Maybe<SortOrder>;
     createdAt?: Maybe<SortOrder>;
@@ -2133,6 +2139,7 @@ export type SearchResultSortParameter = {
 
 export type ServerConfig = {
     __typename?: 'ServerConfig';
+    orderProcess: Array<OrderProcessState>;
     customFieldConfig: CustomFields;
 };
 

+ 12 - 2
packages/core/src/api/resolvers/admin/global-settings.resolver.ts

@@ -1,11 +1,16 @@
 import { Args, Mutation, Query, ResolveField, Resolver } from '@nestjs/graphql';
-import { MutationUpdateGlobalSettingsArgs, Permission } from '@vendure/common/lib/generated-types';
+import {
+    MutationUpdateGlobalSettingsArgs,
+    OrderProcessState,
+    Permission,
+} from '@vendure/common/lib/generated-types';
 
 import { UserInputError } from '../../../common/error/errors';
 import { ConfigService } from '../../../config/config.service';
 import { CustomFields } from '../../../config/custom-field/custom-field-types';
 import { ChannelService } from '../../../service/services/channel.service';
 import { GlobalSettingsService } from '../../../service/services/global-settings.service';
+import { OrderService } from '../../../service/services/order.service';
 import { Allow } from '../../decorators/allow.decorator';
 
 @Resolver('GlobalSettings')
@@ -14,6 +19,7 @@ export class GlobalSettingsResolver {
         private configService: ConfigService,
         private globalSettingsService: GlobalSettingsService,
         private channelService: ChannelService,
+        private orderService: OrderService,
     ) {}
 
     @Query()
@@ -26,7 +32,10 @@ export class GlobalSettingsResolver {
      * Exposes a subset of the VendureConfig which may be of use to clients.
      */
     @ResolveField()
-    serverConfig() {
+    serverConfig(): {
+        customFieldConfig: CustomFields;
+        orderProcess: OrderProcessState[];
+    } {
         // Do not expose custom fields marked as "internal".
         const exposedCustomFieldConfig: CustomFields = {};
         for (const [entityType, customFields] of Object.entries(this.configService.customFields)) {
@@ -36,6 +45,7 @@ export class GlobalSettingsResolver {
         }
         return {
             customFieldConfig: exposedCustomFieldConfig,
+            orderProcess: this.orderService.getOrderProcessStates(),
         };
     }
 

+ 8 - 1
packages/core/src/api/schema/type/global-settings.type.graphql

@@ -7,5 +7,12 @@ type GlobalSettings {
     serverConfig: ServerConfig!
 }
 
+type OrderProcessState {
+    name: String!
+    to: [String!]!
+}
+
 # Programatically extended by the addGraphQLCustomFields function
-type ServerConfig
+type ServerConfig {
+    orderProcess: [OrderProcessState!]!
+}

+ 1 - 3
packages/core/src/service/helpers/order-state-machine/order-state-machine.ts

@@ -1,7 +1,6 @@
 import { Injectable } from '@nestjs/common';
 import { InjectConnection } from '@nestjs/typeorm';
 import { HistoryEntryType } from '@vendure/common/lib/generated-types';
-import { from } from 'rxjs';
 import { Connection } from 'typeorm';
 
 import { RequestContext } from '../../../api/common/request-context';
@@ -14,7 +13,6 @@ import {
 import { mergeTransitionDefinitions } from '../../../common/finite-state-machine/merge-transition-definitions';
 import { validateTransitionDefinition } from '../../../common/finite-state-machine/validate-transition-definition';
 import { ConfigService } from '../../../config/config.service';
-import { OrderItem } from '../../../entity/order-item/order-item.entity';
 import { Order } from '../../../entity/order/order.entity';
 import { HistoryService } from '../../services/history.service';
 import { PromotionService } from '../../services/promotion.service';
@@ -31,7 +29,7 @@ import { OrderState, orderStateTransitions, OrderTransitionData } from './order-
 
 @Injectable()
 export class OrderStateMachine {
-    private readonly config: StateMachineConfig<OrderState, OrderTransitionData>;
+    readonly config: StateMachineConfig<OrderState, OrderTransitionData>;
     private readonly initialState: OrderState = 'AddingItems';
 
     constructor(

+ 8 - 0
packages/core/src/service/services/order.service.ts

@@ -9,6 +9,7 @@ import {
     FulfillOrderInput,
     HistoryEntryType,
     OrderLineInput,
+    OrderProcessState,
     RefundOrderInput,
     SettleRefundInput,
     ShippingMethodQuote,
@@ -90,6 +91,13 @@ export class OrderService {
         private eventBus: EventBus,
     ) {}
 
+    getOrderProcessStates(): OrderProcessState[] {
+        return Object.entries(this.orderStateMachine.config.transitions).map(([name, { to }]) => ({
+            name,
+            to,
+        }));
+    }
+
     findAll(ctx: RequestContext, options?: ListQueryOptions<Order>): Promise<PaginatedList<Order>> {
         return this.listQueryBuilder
             .build(Order, options, { relations: ['lines', 'customer', 'lines.productVariant'] })

+ 7 - 0
packages/elasticsearch-plugin/e2e/graphql/generated-e2e-elasticsearch-plugin-types.ts

@@ -2440,6 +2440,12 @@ export type OrderListOptions = {
     filter?: Maybe<OrderFilterParameter>;
 };
 
+export type OrderProcessState = {
+    __typename?: 'OrderProcessState';
+    name: Scalars['String'];
+    to: Array<Scalars['String']>;
+};
+
 export type OrderSortParameter = {
     id?: Maybe<SortOrder>;
     createdAt?: Maybe<SortOrder>;
@@ -3210,6 +3216,7 @@ export type SearchResultSortParameter = {
 
 export type ServerConfig = {
     __typename?: 'ServerConfig';
+    orderProcess: Array<OrderProcessState>;
     customFieldConfig: CustomFields;
 };
 

File diff suppressed because it is too large
+ 0 - 0
schema-admin.json


File diff suppressed because it is too large
+ 0 - 0
schema-shop.json


Some files were not shown because too many files changed in this diff