aboutsummaryrefslogblamecommitdiffhomepage
path: root/client/src/app/app.module.ts
blob: 950b3c48e3117d2eced9140b64309278e35f2905 (plain) (tree)

































































































































                                                                                                             
import { NgModule, ApplicationRef } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { HttpModule, RequestOptions, XHRBackend } from '@angular/http';
import { RouterModule } from '@angular/router';
import { removeNgStyles, createNewHosts } from '@angularclass/hmr';

import { FileSelectDirective } from 'ng2-file-upload/ng2-file-upload';
import { ProgressbarModule } from 'ng2-bootstrap/components/progressbar';
import { PaginationModule } from 'ng2-bootstrap/components/pagination';
import { BytesPipe } from 'angular-pipes/src/math/bytes.pipe';

/*
 * Platform and Environment providers/directives/pipes
 */
import { ENV_PROVIDERS } from './environment';
import { routes } from './app.routes';
// App is our top level component
import { AppComponent } from './app.component';
import { AppState } from './app.service';
import { AccountComponent, AccountService } from './account';
import { LoginComponent } from './login';
import {
  LoaderComponent,
  VideosComponent,
  VideoAddComponent,
  VideoListComponent,
  VideoMiniatureComponent,
  VideoSortComponent,
  VideoWatchComponent,
  VideoService
} from './videos';
import {
  FriendsComponent,
  FriendAddComponent,
  FriendListComponent,
  FriendService,
  UsersComponent,
  UserAddComponent,
  UserListComponent,
  UserService,
  AdminComponent,
  MenuAdminComponent
} from './admin';
import { MenuComponent } from './menu.component';
import { AuthService, AuthHttp, RestExtractor, RestService, SearchComponent, SearchService } from './shared';

// Application wide providers
const APP_PROVIDERS = [
  AppState,

  {
    provide: AuthHttp,
    useFactory: (backend: XHRBackend, defaultOptions: RequestOptions, authService: AuthService) => {
      return new AuthHttp(backend, defaultOptions, authService);
    },
    deps: [ XHRBackend, RequestOptions, AuthService ]
  },

  AuthService,
  RestExtractor,
  RestExtractor, RestService, VideoService, SearchService, FriendService, UserService, AccountService
];
/**
 * `AppModule` is the main entry point into Angular2's bootstraping process
 */
@NgModule({
  bootstrap: [ AppComponent ],
  declarations: [
    AppComponent,
    BytesPipe,
    FileSelectDirective,
    AccountComponent,
    LoginComponent,
    LoaderComponent,
    VideosComponent,
    VideoAddComponent,
    VideoListComponent,
    VideoSortComponent,
    VideoMiniatureComponent,
    VideoWatchComponent,
    FriendsComponent,
    FriendAddComponent,
    FriendListComponent,
    UsersComponent,
    UserAddComponent,
    UserListComponent,
    AdminComponent,
    MenuAdminComponent,
    MenuComponent,
    SearchComponent
  ],
  imports: [ // import Angular's modules
    BrowserModule,
    FormsModule,
    ReactiveFormsModule,
    HttpModule,
    RouterModule.forRoot(routes),
    ProgressbarModule,
    PaginationModule
  ],
  providers: [ // expose our Services and Providers into Angular's dependency injection
    ENV_PROVIDERS,
    APP_PROVIDERS
  ]
})
export class AppModule {
  constructor(public appRef: ApplicationRef, public appState: AppState) {}
  hmrOnInit(store) {
    if (!store || !store.state) return;
    console.log('HMR store', store);
    this.appState._state = store.state;
    this.appRef.tick();
    delete store.state;
  }
  hmrOnDestroy(store) {
    const cmpLocation = this.appRef.components.map(cmp => cmp.location.nativeElement);
    // recreate elements
    const state = this.appState._state;
    store.state = state;
    store.disposeOldHosts = createNewHosts(cmpLocation);
    // remove styles
    removeNgStyles();
  }
  hmrAfterDestroy(store) {
    // display new elements
    store.disposeOldHosts();
    delete store.disposeOldHosts;
  }
}