import { ModuleWithProviders, NgModule, Type } from '@angular/core'; import { CommonModule } from '@angular/common'; import { HttpClientModule } from '@angular/common/http'; import { StoreModule } from '@ngrx/store'; import { EffectsModule } from '@ngrx/effects'; import { reducers } from './reducers/root-reducer'; import { CoreEffects } from './effects/core.effects'; import { CoreService } from './services/core.service'; import { AgGridComponent } from './components/ag-grid/ag-grid.component'; import { ContextMenuComponent } from './components/context-menu/context-menu.component'; import { AgGridModule } from '@ag-grid-community/angular'; import { MatMenuModule } from '@angular/material/menu'; import { MatIconModule } from '@angular/material/icon'; import { DialogBoxComponent } from './components/dialog-box/dialog-box.component'; import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog'; import { PortalModule } from '@angular/cdk/portal'; import { MatCardModule } from '@angular/material/card'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { MatInputModule } from '@angular/material/input'; import { MatSelectModule } from '@angular/material/select'; import { LayoutComponent } from './components/layout/layout.component'; import { ToolbarComponent } from './components/layout/toolbar/toolbar.component'; import { NavComponent } from './components/layout/nav/nav.component'; import { FooterComponent } from './components/layout/footer/footer.component'; import { CaseSummaryHeaderComponent } from './components/case-summary-header/case-summary-header.component'; import { FlexLayoutModule } from '@angular/flex-layout'; import { MatSidenavModule } from '@angular/material/sidenav'; import { MatToolbarModule } from '@angular/material/toolbar'; import { RouterModule } from '@angular/router'; import { MatListModule } from '@angular/material/list'; import { MatButtonModule } from '@angular/material/button'; import { ModuleRegistry } from '@ag-grid-community/core'; import { ClientSideRowModelModule } from '@ag-grid-community/client-side-row-model'; import { ExcelExportModule } from '@ag-grid-enterprise/excel-export'; import { SideBarModule } from '@ag-grid-enterprise/side-bar'; import { ColumnsToolPanelModule } from '@ag-grid-enterprise/column-tool-panel'; import { SnackBarComponent } from './components/snack-bar/snack-bar.component'; import { ProgressIconComponent } from './components/progress-icon/progress-icon.component'; import { Environment } from '../shared/interfaces/environment.interface'; import { CaseNotesComponent } from './components/case-notes/case-notes.component'; import { CaseNotesEffects } from './effects/case-notes.effects'; import { CaseNotesService } from './services/case-notes.service'; import { CaseNotesDetailsComponent } from './components/case-notes/case-notes-details/case-notes-details.component'; import { CaseNotesContextMenuComponent } from './components/case-notes/case-notes-details/case-notes-context-menu/case-notes-context-menu.component'; import { MatSnackBarModule } from '@angular/material/snack-bar'; import { SSNMaskPipe } from '../shared/pipes/ssn-mask.pipe'; import { ExemptEpModalComponent } from './components/exempt-ep-modal/exempt-ep-modal.component'; import { MatRadioModule } from '@angular/material/radio'; import { FormFooterComponent } from './components/form-footer/form-footer.component'; import { ExemptEPService } from './services/exempt-ep.service'; import { ExemptEPEffects } from './effects/exempt-ep.effects'; import { LoaderComponent } from './components/loader/loader.component'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { PrutechNgxSpinnerComponent } from './components/prutech-ngx-spinner/prutech-ngx-spinner.component'; import { NgxSpinnerModule } from '../spinner/ngx-spinner.module'; import { ErrorListComponent } from './components/error-list/error-list.component'; const components: Type[] = [ AgGridComponent, ContextMenuComponent, LayoutComponent, ToolbarComponent, NavComponent, FooterComponent, DialogBoxComponent, CaseSummaryHeaderComponent, SnackBarComponent, ProgressIconComponent, CaseNotesComponent, CaseNotesDetailsComponent, CaseNotesContextMenuComponent, ExemptEpModalComponent, FormFooterComponent, LoaderComponent, PrutechNgxSpinnerComponent, ErrorListComponent, ]; ModuleRegistry.registerModules([ClientSideRowModelModule, ExcelExportModule, SideBarModule, ColumnsToolPanelModule]); @NgModule({ imports: [ CommonModule, HttpClientModule, MatMenuModule, MatIconModule, MatButtonModule, MatSidenavModule, MatToolbarModule, RouterModule, MatSelectModule, FlexLayoutModule, MatSelectModule, MatListModule, AgGridModule.withComponents([AgGridComponent]), StoreModule.forFeature('core-data', reducers), EffectsModule.forFeature([ CoreEffects, CaseNotesEffects, ExemptEPEffects, ]), MatDialogModule, PortalModule, MatCardModule, FormsModule, ReactiveFormsModule, MatInputModule, MatSnackBarModule, MatSelectModule, MatRadioModule, MatProgressSpinnerModule, NgxSpinnerModule, ], providers: [ CoreService, CaseNotesService, ExemptEPService, SSNMaskPipe, {provide: MatDialogRef, useValue: {}}, {provide: MAT_DIALOG_DATA, useValue: []}, ], declarations: [components, SSNMaskPipe], exports: components, entryComponents: components, }) export class CoreModule { public static forRoot(environment: Environment): ModuleWithProviders { return { ngModule: CoreModule, providers: [ CoreService, { provide: 'environment', useValue: environment, }, ], }; } }