Skip to content

Commit

Permalink
refactor: reorganize core-module
Browse files Browse the repository at this point in the history
  • Loading branch information
dhhyi committed May 28, 2020
1 parent 557e7bb commit de0fd9d
Show file tree
Hide file tree
Showing 5 changed files with 83 additions and 66 deletions.
37 changes: 37 additions & 0 deletions src/app/core/appearance.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { NgModule } from '@angular/core';
import { NgbPopoverConfig } from '@ng-bootstrap/ng-bootstrap';
import { SWIPER_CONFIG, SwiperConfigInterface } from 'ngx-swiper-wrapper';
import { ToastrModule } from 'ngx-toastr';

import { IconModule } from './icon.module';
import { ThemeService } from './utils/theme/theme.service';

const DEFAULT_SWIPER_CONFIG: SwiperConfigInterface = {
direction: 'horizontal',
keyboard: true,
mousewheel: false,
navigation: true,
scrollbar: false,
};

@NgModule({
imports: [
IconModule,
ToastrModule.forRoot({
closeButton: true,
timeOut: 3000,
positionClass: 'toast-top-full-width', // toast-top-center
preventDuplicates: true,
}),
],
providers: [{ provide: SWIPER_CONFIG, useValue: DEFAULT_SWIPER_CONFIG }],
})
export class AppearanceModule {
constructor(popoverConfig: NgbPopoverConfig, themeService: ThemeService) {
popoverConfig.placement = 'top';
popoverConfig.triggers = 'hover';
popoverConfig.container = 'body';

themeService.init();
}
}
19 changes: 2 additions & 17 deletions src/app/core/configuration.module.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,10 @@
import { registerLocaleData } from '@angular/common';
import localeDe from '@angular/common/locales/de';
import localeFr from '@angular/common/locales/fr';
import { Inject, LOCALE_ID, NgModule } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';
import { NgModule } from '@angular/core';

import { environment } from '../../environments/environment';

import * as injectionKeys from './configurations/injection-keys';
import { FeatureToggleModule } from './feature-toggle.module';
import { ThemeService } from './utils/theme/theme.service';

@NgModule({
imports: [FeatureToggleModule],
providers: [
// tslint:disable-next-line:no-string-literal
{ provide: injectionKeys.MOCK_SERVER_API, useValue: environment['mockServerAPI'] },
Expand All @@ -32,12 +25,4 @@ import { ThemeService } from './utils/theme/theme.service';
{ provide: injectionKeys.THEME, useValue: environment.theme },
],
})
export class ConfigurationModule {
constructor(@Inject(LOCALE_ID) lang: string, translateService: TranslateService, themeService: ThemeService) {
themeService.init();
registerLocaleData(localeDe);
registerLocaleData(localeFr);

translateService.setDefaultLang(lang.replace(/\-/, '_'));
}
}
export class ConfigurationModule {}
60 changes: 13 additions & 47 deletions src/app/core/core.module.ts
Original file line number Diff line number Diff line change
@@ -1,85 +1,51 @@
import { HTTP_INTERCEPTORS, HttpClient, HttpClientModule } from '@angular/common/http';
import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';
import { NgModule, Optional, SkipSelf } from '@angular/core';
import { RouterModule } from '@angular/router';
import { NgbPopoverConfig } from '@ng-bootstrap/ng-bootstrap';
import { ServiceWorkerModule } from '@angular/service-worker';
import { FormlyModule } from '@ngx-formly/core';
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
import { TranslateModule } from '@ngx-translate/core';
import { NgxCookieBannerModule } from 'ngx-cookie-banner';
import { SWIPER_CONFIG, SwiperConfigInterface } from 'ngx-swiper-wrapper';
import { ToastrModule } from 'ngx-toastr';
import { BrowserCookiesModule } from 'ngx-utils-cookies-port';

import { environment } from '../../environments/environment';

import { AppearanceModule } from './appearance.module';
import { ConfigurationModule } from './configuration.module';
import { ExtrasModule } from './extras.module';
import { IconModule } from './icon.module';
import { FeatureToggleModule } from './feature-toggle.module';
import { AuthInterceptor } from './interceptors/auth.interceptor';
import { MockInterceptor } from './interceptors/mock.interceptor';
import { InternationalizationModule } from './internationalization.module';
import { StateManagementModule } from './state-management.module';
import { ModuleLoaderService } from './utils/module-loader/module-loader.service';

export function translateFactory(http: HttpClient) {
return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
}

const DEFAULT_SWIPER_CONFIG: SwiperConfigInterface = {
direction: 'horizontal',
keyboard: true,
mousewheel: false,
navigation: true,
scrollbar: false,
};
@NgModule({
imports: [
AppearanceModule,
BrowserCookiesModule.forRoot(),
ConfigurationModule,
ExtrasModule,
FeatureToggleModule,
FormlyModule.forRoot(),
HttpClientModule,
IconModule,
InternationalizationModule,
NgxCookieBannerModule.forRoot({
cookieName: 'cookieLawSeen',
}),
RouterModule,
ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.serviceWorker }),
StateManagementModule,
ToastrModule.forRoot({
closeButton: true,
timeOut: 3000,
positionClass: 'toast-top-full-width', // toast-top-center
preventDuplicates: true,
}),
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: translateFactory,
deps: [HttpClient],
},
}),
],
providers: [
{ provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true },
{ provide: HTTP_INTERCEPTORS, useClass: MockInterceptor, multi: true },
{ provide: SWIPER_CONFIG, useValue: DEFAULT_SWIPER_CONFIG },
],
// exports needed to use the cookie banner in the AppComponent
exports: [NgxCookieBannerModule, TranslateModule],
})
export class CoreModule {
constructor(
@Optional()
@SkipSelf()
parentModule: CoreModule,
popoverConfig: NgbPopoverConfig,
moduleLoader: ModuleLoaderService
) {
constructor(@Optional() @SkipSelf() parentModule: CoreModule, moduleLoader: ModuleLoaderService) {
if (parentModule) {
throw new Error('CoreModule is already loaded. Import it in the AppModule only');
}

popoverConfig.placement = 'top';
popoverConfig.triggers = 'hover';
popoverConfig.container = 'body';

moduleLoader.init();
}
}
31 changes: 31 additions & 0 deletions src/app/core/internationalization.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { registerLocaleData } from '@angular/common';
import { HttpClient } from '@angular/common/http';
import localeDe from '@angular/common/locales/de';
import localeFr from '@angular/common/locales/fr';
import { Inject, LOCALE_ID, NgModule } from '@angular/core';
import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';

export function translateFactory(http: HttpClient) {
return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
}

@NgModule({
imports: [
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: translateFactory,
deps: [HttpClient],
},
}),
],
})
export class InternationalizationModule {
constructor(@Inject(LOCALE_ID) lang: string, translateService: TranslateService) {
registerLocaleData(localeDe);
registerLocaleData(localeFr);

translateService.setDefaultLang(lang.replace(/\-/, '_'));
}
}
2 changes: 0 additions & 2 deletions src/app/core/state-management.module.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { APP_INITIALIZER, NgModule } from '@angular/core';
import { BrowserTransferStateModule, TransferState } from '@angular/platform-browser';
import { ServiceWorkerModule } from '@angular/service-worker';
import { Actions } from '@ngrx/effects';
import { Store } from '@ngrx/store';
import { StoreDevtoolsModule } from '@ngrx/store-devtools';
Expand All @@ -17,7 +16,6 @@ import { ShoppingStoreModule } from './store/shopping/shopping-store.module';

@NgModule({
imports: [
ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.serviceWorker }),
BrowserTransferStateModule,
CoreStoreModule,
StoreDevtoolsModule.instrument({
Expand Down

0 comments on commit de0fd9d

Please sign in to comment.