import { OverlayModule } from '@angular/cdk/overlay'; import { AsyncPipe, CommonModule } from '@angular/common'; import { HttpClientModule } from '@angular/common/http'; import { ModuleWithProviders, NgModule, Provider } from '@angular/core'; import { RouterModule } from '@angular/router'; import { EffectsModule } from '@ngrx/effects'; import { StoreModule } from '@ngrx/store'; import { TranslateModule } from '@ngx-translate/core'; import { YapAccessDirective } from './access/access.directive'; import { YAP_ACCESS_GUARD, YapDefaultAccessGuard } from './access/access.guard'; import { YAP_ACCESS_TOKEN, YapDefaultAccessService } from './access/access.service'; import { BaseLayoutComponent } from './components/base-layout/base-layout.component'; import { BaseMenuComponent } from './components/base-menu/base-menu.component'; import { BaseToolboxActionComponent } from './components/base-toolbox-action/base-toolbox-action.component'; import { BaseToolboxComponent } from './components/base-toolbox/base-toolbox.component'; import { GetSecuredImagePipe } from './components/get-secured-image/get-secured-image.pipe'; import { YapIconModule } from './components/icon/icon.module'; import { YapNqColorSelectorComponent } from './components/nq-color-selector/nq-color-selector.component'; import { YapOverlayModule } from './components/overlay/overlay.module'; import { YapSelectImageComponent } from './components/select-image/select-image.component'; import { TranslateIdPipe } from './components/translate-id/translate-id.pipe'; import { TranslateItemToSymbolPipe } from './components/translate-item-to-symbol/translate-item-to-symbol.pipe'; import { YapUploadComponent } from './components/upload/upload.component'; import { YapTranslateService } from './i18n/translate.service'; import { CategoryEffects } from './store/category/category.effects'; import { categoriesFeatureKey, categoryReducer } from './store/category/category.reducer'; import { ClassEffects } from './store/class/class.effects'; import { classesFeatureKey, classReducer } from './store/class/class.reducer'; import { ConfigEffects } from './store/config/config.effects'; import { configFeatureKey, configReducer } from './store/config/config.reducer'; import { ContextMenuEffects } from './store/context-menu/context-menu.effects'; import { contextMenuFeatureKey, contextMenuReducer } from './store/context-menu/context-menu.reducer'; import { FieldEffects } from './store/field/field.effects'; import { fieldReducer, fieldsFeatureKey } from './store/field/field.reducer'; import { ImageEffects } from './store/image/image.effects'; import { imageFeatureKey, imageReducer } from './store/image/image.reducer'; import { ItemEffects } from './store/item/item.effects'; import { NamedQueryEffects } from './store/named-query/named-query.effects'; import { namedQueryFeatureKey, namedQueryReducer } from './store/named-query/named-query.reducer'; import { RelationTypesEffects } from './store/relation-types/relation-types.effects'; import { relationTypeReducer, relationTypesFeatureKey } from './store/relation-types/relation-types.reducer'; import { SearchEffects } from './store/search/search.effects'; import { searchFeatureKey, searchReducer } from './store/search/search.reducer'; @NgModule({ declarations: [ TranslateIdPipe, TranslateItemToSymbolPipe, GetSecuredImagePipe, BaseLayoutComponent, BaseMenuComponent, BaseToolboxComponent, BaseToolboxActionComponent, YapNqColorSelectorComponent, YapAccessDirective, YapUploadComponent, YapSelectImageComponent ], imports: [ CommonModule, RouterModule, HttpClientModule, TranslateModule.forChild({ isolate: true }), StoreModule.forFeature(searchFeatureKey, searchReducer), StoreModule.forFeature(namedQueryFeatureKey, namedQueryReducer), StoreModule.forFeature(configFeatureKey, configReducer), StoreModule.forFeature(fieldsFeatureKey, fieldReducer), StoreModule.forFeature(classesFeatureKey, classReducer), StoreModule.forFeature(imageFeatureKey, imageReducer), StoreModule.forFeature(categoriesFeatureKey, categoryReducer), StoreModule.forFeature(contextMenuFeatureKey, contextMenuReducer), StoreModule.forFeature(relationTypesFeatureKey, relationTypeReducer), EffectsModule.forFeature([FieldEffects, ImageEffects]), EffectsModule.forFeature([ClassEffects]), EffectsModule.forFeature([ConfigEffects]), EffectsModule.forFeature([CategoryEffects]), EffectsModule.forFeature([ContextMenuEffects]), EffectsModule.forFeature([SearchEffects]), EffectsModule.forFeature([NamedQueryEffects]), EffectsModule.forFeature([RelationTypesEffects]), EffectsModule.forFeature([ItemEffects]), YapIconModule, OverlayModule, YapOverlayModule ], providers: [AsyncPipe, TranslateIdPipe, TranslateItemToSymbolPipe], exports: [ TranslateIdPipe, TranslateItemToSymbolPipe, GetSecuredImagePipe, BaseLayoutComponent, BaseMenuComponent, BaseToolboxComponent, YapNqColorSelectorComponent, YapAccessDirective, YapUploadComponent, YapSelectImageComponent ] }) export class YapCoreModule { constructor(private yapTranslateService: YapTranslateService) { this.yapTranslateService.activateAutoLoad(); } static forRoot(access?: { accessProvider?: Provider; guardProvider?: Provider }): ModuleWithProviders { const defaultAccessProvider = { provide: YAP_ACCESS_TOKEN, useClass: YapDefaultAccessService }; const defaultGuardProvider = { provide: YAP_ACCESS_GUARD, useClass: YapDefaultAccessGuard }; return { ngModule: YapCoreModule, providers: [access?.accessProvider ?? defaultAccessProvider, access?.guardProvider ?? defaultGuardProvider] }; } }