Browse Source

refactor: Move ConfigResolver into GlobalSettings

Michael Bromley 7 years ago
parent
commit
0afede4bff

+ 9 - 1
admin-ui/src/app/core/providers/auth/auth.service.ts

@@ -4,6 +4,7 @@ import { catchError, mapTo, mergeMap, switchMap } from 'rxjs/operators';
 import { SetAsLoggedIn } from 'shared/generated-types';
 
 import { DataService } from '../../../data/providers/data.service';
+import { ServerConfigService } from '../../../data/server-config';
 import { LocalStorageService } from '../local-storage/local-storage.service';
 
 /**
@@ -11,7 +12,11 @@ import { LocalStorageService } from '../local-storage/local-storage.service';
  */
 @Injectable()
 export class AuthService {
-    constructor(private localStorageService: LocalStorageService, private dataService: DataService) {}
+    constructor(
+        private localStorageService: LocalStorageService,
+        private dataService: DataService,
+        private serverConfigService: ServerConfigService,
+    ) {}
 
     /**
      * Attempts to log in via the REST login endpoint and updates the app
@@ -21,6 +26,9 @@ export class AuthService {
         return this.dataService.auth.attemptLogin(username, password, rememberMe).pipe(
             switchMap(response => {
                 this.setChannelToken(response.login.user.channelTokens[0]);
+                return this.serverConfigService.getServerConfig();
+            }),
+            switchMap(() => {
                 return this.dataService.client.loginSuccess(username);
             }),
         );

+ 0 - 9
admin-ui/src/app/data/definitions/config-definitions.ts

@@ -1,9 +0,0 @@
-import gql from 'graphql-tag';
-
-export const GET_SERVER_CONFIG = gql`
-    query GetServerConfig {
-        config {
-            customFields
-        }
-    }
-`;

+ 10 - 0
admin-ui/src/app/data/definitions/settings-definitions.ts

@@ -358,3 +358,13 @@ export const UPDATE_GLOBAL_SETTINGS = gql`
     }
     ${GLOBAL_SETTINGS_FRAGMENT}
 `;
+
+export const GET_SERVER_CONFIG = gql`
+    query GetServerConfig {
+        globalSettings {
+            serverConfig {
+                customFields
+            }
+        }
+    }
+`;

+ 21 - 16
admin-ui/src/app/data/server-config.ts

@@ -1,11 +1,10 @@
 import { Injectable, Injector } from '@angular/core';
-import { GetServerConfig } from 'shared/generated-types';
+import gql from 'graphql-tag';
+import { GetServerConfig, ServerConfig } from 'shared/generated-types';
 
-import { GET_SERVER_CONFIG } from './definitions/config-definitions';
+import { GET_SERVER_CONFIG } from './definitions/settings-definitions';
 import { BaseDataService } from './providers/base-data.service';
 
-export type ServerConfig = GetServerConfig.Config;
-
 export function initializeServerConfigService(serverConfigService: ServerConfigService): () => Promise<any> {
     return serverConfigService.init();
 }
@@ -25,19 +24,25 @@ export class ServerConfigService {
      * to the Angular APP_INITIALIZER token.
      */
     init(): () => Promise<any> {
+        return () => this.getServerConfig();
+    }
+
+    /**
+     * Fetch the ServerConfig. Should be run on app init (in case user is already logged in) and on successful login.
+     */
+    getServerConfig() {
         const baseDataService = this.injector.get<BaseDataService>(BaseDataService);
-        return () =>
-            baseDataService
-                .query<GetServerConfig.Query>(GET_SERVER_CONFIG)
-                .single$.toPromise()
-                .then(
-                    result => {
-                        this._serverConfig = result.config;
-                    },
-                    err => {
-                        // Let the error fall through to be caught by the http interceptor.
-                    },
-                );
+        return baseDataService
+            .query<GetServerConfig.Query>(GET_SERVER_CONFIG)
+            .single$.toPromise()
+            .then(
+                result => {
+                    this._serverConfig = result.globalSettings.serverConfig;
+                },
+                err => {
+                    // Let the error fall through to be caught by the http interceptor.
+                },
+            );
     }
 
     get serverConfig(): ServerConfig {

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


+ 6 - 8
server/src/api/api.module.ts

@@ -18,7 +18,6 @@ import { AdministratorResolver } from './resolvers/administrator.resolver';
 import { AssetResolver } from './resolvers/asset.resolver';
 import { AuthResolver } from './resolvers/auth.resolver';
 import { ChannelResolver } from './resolvers/channel.resolver';
-import { ConfigResolver } from './resolvers/config.resolver';
 import { CountryResolver } from './resolvers/country.resolver';
 import { CustomerGroupResolver } from './resolvers/customer-group.resolver';
 import { CustomerResolver } from './resolvers/customer.resolver';
@@ -39,29 +38,28 @@ import { TaxRateResolver } from './resolvers/tax-rate.resolver';
 import { ZoneResolver } from './resolvers/zone.resolver';
 
 const resolvers = [
-    PromotionResolver,
     AdministratorResolver,
-    AuthResolver,
     AssetResolver,
+    AuthResolver,
     ChannelResolver,
-    ConfigResolver,
     CountryResolver,
+    CustomerGroupResolver,
+    CustomerResolver,
     FacetResolver,
+    GlobalSettingsResolver,
     ImportResolver,
-    CustomerResolver,
-    CustomerGroupResolver,
     OrderResolver,
     PaymentMethodResolver,
+    ProductCategoryResolver,
     ProductOptionResolver,
     ProductResolver,
-    ProductCategoryResolver,
+    PromotionResolver,
     RoleResolver,
     SearchResolver,
     ShippingMethodResolver,
     TaxCategoryResolver,
     TaxRateResolver,
     ZoneResolver,
-    GlobalSettingsResolver,
 ];
 
 /**

+ 0 - 20
server/src/api/resolvers/config.resolver.ts

@@ -1,20 +0,0 @@
-import { Query, Resolver } from '@nestjs/graphql';
-
-import { getConfig } from '../../config/config-helpers';
-import { ConfigService } from '../../config/config.service';
-import { VendureConfig } from '../../config/vendure-config';
-
-@Resolver('Config')
-export class ConfigResolver {
-    constructor(private configService: ConfigService) {}
-
-    /**
-     * Exposes a subset of the VendureConfig which may be of use to clients.
-     */
-    @Query()
-    config(): Partial<VendureConfig> {
-        return {
-            customFields: this.configService.customFields,
-        };
-    }
-}

+ 14 - 2
server/src/api/resolvers/global-settings.resolver.ts

@@ -1,12 +1,14 @@
-import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
+import { Args, Mutation, Query, ResolveProperty, Resolver } from '@nestjs/graphql';
 
 import { Permission, UpdateGlobalSettingsMutationArgs } from '../../../../shared/generated-types';
+import { VendureConfig } from '../../config';
+import { ConfigService } from '../../config/config.service';
 import { GlobalSettingsService } from '../../service/services/global-settings.service';
 import { Allow } from '../decorators/allow.decorator';
 
 @Resolver('GlobalSettings')
 export class GlobalSettingsResolver {
-    constructor(private globalSettingsService: GlobalSettingsService) {}
+    constructor(private configService: ConfigService, private globalSettingsService: GlobalSettingsService) {}
 
     @Query()
     @Allow(Permission.Authenticated)
@@ -14,6 +16,16 @@ export class GlobalSettingsResolver {
         return this.globalSettingsService.getSettings();
     }
 
+    /**
+     * Exposes a subset of the VendureConfig which may be of use to clients.
+     */
+    @ResolveProperty()
+    serverConfig(): Partial<VendureConfig> {
+        return {
+            customFields: this.configService.customFields,
+        };
+    }
+
     @Mutation()
     @Allow(Permission.UpdateSettings)
     async updateGlobalSettings(@Args() args: UpdateGlobalSettingsMutationArgs) {

+ 1 - 0
server/src/config/default-config.ts

@@ -88,6 +88,7 @@ export const defaultConfig: ReadOnlyRequired<VendureConfig> = {
         Customer: [],
         Facet: [],
         FacetValue: [],
+        GlobalSettings: [],
         Product: [],
         ProductCategory: [],
         ProductOption: [],

+ 5 - 0
server/src/entity/global-settings/global-settings.graphql

@@ -3,6 +3,11 @@ type GlobalSettings {
     createdAt: DateTime!
     updatedAt: DateTime!
     availableLanguages: [LanguageCode!]!
+    serverConfig: ServerConfig!
+}
+
+type ServerConfig {
+    customFields: JSON
 }
 
 input UpdateGlobalSettingsInput {

+ 49 - 20
shared/generated-types.ts

@@ -294,9 +294,14 @@ export interface GlobalSettings {
     createdAt: DateTime;
     updatedAt: DateTime;
     availableLanguages: LanguageCode[];
+    serverConfig: ServerConfig;
     customFields?: GlobalSettingsCustomFields | null;
 }
 
+export interface ServerConfig {
+    customFields?: Json | null;
+}
+
 export interface GlobalSettingsCustomFields {
     royalMailId?: string | null;
 }
@@ -3225,6 +3230,7 @@ export namespace GlobalSettingsResolvers {
         createdAt?: CreatedAtResolver<DateTime, any, Context>;
         updatedAt?: UpdatedAtResolver<DateTime, any, Context>;
         availableLanguages?: AvailableLanguagesResolver<LanguageCode[], any, Context>;
+        serverConfig?: ServerConfigResolver<ServerConfig, any, Context>;
         customFields?: CustomFieldsResolver<GlobalSettingsCustomFields | null, any, Context>;
     }
 
@@ -3236,6 +3242,11 @@ export namespace GlobalSettingsResolvers {
         Parent,
         Context
     >;
+    export type ServerConfigResolver<R = ServerConfig, Parent = any, Context = any> = Resolver<
+        R,
+        Parent,
+        Context
+    >;
     export type CustomFieldsResolver<
         R = GlobalSettingsCustomFields | null,
         Parent = any,
@@ -3243,6 +3254,18 @@ export namespace GlobalSettingsResolvers {
     > = Resolver<R, Parent, Context>;
 }
 
+export namespace ServerConfigResolvers {
+    export interface Resolvers<Context = any> {
+        customFields?: CustomFieldsResolver<Json | null, any, Context>;
+    }
+
+    export type CustomFieldsResolver<R = Json | null, Parent = any, Context = any> = Resolver<
+        R,
+        Parent,
+        Context
+    >;
+}
+
 export namespace GlobalSettingsCustomFieldsResolvers {
     export interface Resolvers<Context = any> {
         royalMailId?: RoyalMailIdResolver<string | null, any, Context>;
@@ -5355,20 +5378,6 @@ export namespace GetUiState {
     };
 }
 
-export namespace GetServerConfig {
-    export type Variables = {};
-
-    export type Query = {
-        __typename?: 'Query';
-        config: Config;
-    };
-
-    export type Config = {
-        __typename?: 'Config';
-        customFields?: Json | null;
-    };
-}
-
 export namespace GetCustomerList {
     export type Variables = {
         options: CustomerListOptions;
@@ -6394,10 +6403,7 @@ export namespace GetGlobalSettings {
         globalSettings: GlobalSettings;
     };
 
-    export type GlobalSettings = {
-        __typename?: 'GlobalSettings';
-        availableLanguages: LanguageCode[];
-    };
+    export type GlobalSettings = GlobalSettings.Fragment;
 }
 
 export namespace UpdateGlobalSettings {
@@ -6410,9 +6416,25 @@ export namespace UpdateGlobalSettings {
         updateGlobalSettings: UpdateGlobalSettings;
     };
 
-    export type UpdateGlobalSettings = {
+    export type UpdateGlobalSettings = GlobalSettings.Fragment;
+}
+
+export namespace GetServerConfig {
+    export type Variables = {};
+
+    export type Query = {
+        __typename?: 'Query';
+        globalSettings: GlobalSettings;
+    };
+
+    export type GlobalSettings = {
         __typename?: 'GlobalSettings';
-        availableLanguages: LanguageCode[];
+        serverConfig: ServerConfig;
+    };
+
+    export type ServerConfig = {
+        __typename?: 'ServerConfig';
+        customFields?: Json | null;
     };
 }
 
@@ -7115,6 +7137,13 @@ export namespace PaymentMethod {
     };
 }
 
+export namespace GlobalSettings {
+    export type Fragment = {
+        __typename?: 'GlobalSettings';
+        availableLanguages: LanguageCode[];
+    };
+}
+
 export namespace ShippingMethod {
     export type Fragment = {
         __typename?: 'ShippingMethod';

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