]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - client/src/app/app.module.ts
Update PeerTube features
[github/Chocobozzz/PeerTube.git] / client / src / app / app.module.ts
1 import { ApplicationRef, NgModule } from '@angular/core';
2 import { BrowserModule } from '@angular/platform-browser';
3 import { FormsModule, ReactiveFormsModule } from '@angular/forms';
4 import { HttpModule, RequestOptions, XHRBackend } from '@angular/http';
5 import { RouterModule } from '@angular/router';
6 import { removeNgStyles, createNewHosts } from '@angularclass/hmr';
7
8 import { BytesPipe } from 'angular-pipes/src/math/bytes.pipe';
9
10 import { DropdownModule } from 'ng2-bootstrap/components/dropdown';
11 import { ProgressbarModule } from 'ng2-bootstrap/components/progressbar';
12 import { PaginationModule } from 'ng2-bootstrap/components/pagination';
13 import { ModalModule } from 'ng2-bootstrap/components/modal';
14
15 import { FileUploadModule } from 'ng2-file-upload/ng2-file-upload';
16
17 import { MetaConfig, MetaModule } from 'ng2-meta';
18
19 /*
20 * Platform and Environment providers/directives/pipes
21 */
22 import { ENV_PROVIDERS } from './environment';
23 import { routes } from './app.routes';
24 // App is our top level component
25 import { AppComponent } from './app.component';
26 import { AppState } from './app.service';
27
28 import {
29 AdminComponent,
30 FriendsComponent,
31 FriendAddComponent,
32 FriendListComponent,
33 FriendService,
34 MenuAdminComponent,
35 RequestsComponent,
36 RequestStatsComponent,
37 RequestService,
38 UsersComponent,
39 UserAddComponent,
40 UserListComponent,
41 UserService
42 } from './admin';
43 import { AccountComponent, AccountService } from './account';
44 import { LoginComponent } from './login';
45 import { MenuComponent } from './menu.component';
46 import { AuthService, AuthHttp, RestExtractor, RestService, SearchComponent, SearchService } from './shared';
47 import {
48 LoaderComponent,
49 VideosComponent,
50 VideoAddComponent,
51 VideoListComponent,
52 VideoMiniatureComponent,
53 VideoSortComponent,
54 VideoWatchComponent,
55 VideoService,
56 WebTorrentService
57 } from './videos';
58
59 const metaConfig: MetaConfig = {
60 //Append a title suffix such as a site name to all titles
61 //Defaults to false
62 useTitleSuffix: true,
63 defaults: {
64 title: 'PeerTube'
65 }
66 };
67
68 // Application wide providers
69 const APP_PROVIDERS = [
70 AppState,
71
72 {
73 provide: AuthHttp,
74 useFactory: (backend: XHRBackend, defaultOptions: RequestOptions, authService: AuthService) => {
75 return new AuthHttp(backend, defaultOptions, authService);
76 },
77 deps: [ XHRBackend, RequestOptions, AuthService ]
78 },
79
80 AuthService,
81 RestExtractor,
82 RestService,
83
84 VideoService,
85 SearchService,
86 FriendService,
87 RequestService,
88 UserService,
89 AccountService,
90 WebTorrentService
91 ];
92 /**
93 * `AppModule` is the main entry point into Angular2's bootstraping process
94 */
95 @NgModule({
96 bootstrap: [ AppComponent ],
97 declarations: [
98 AccountComponent,
99 AdminComponent,
100 AppComponent,
101 BytesPipe,
102 FriendAddComponent,
103 FriendListComponent,
104 FriendsComponent,
105 LoaderComponent,
106 LoginComponent,
107 MenuAdminComponent,
108 MenuComponent,
109 RequestsComponent,
110 RequestStatsComponent,
111 SearchComponent,
112 UserAddComponent,
113 UserListComponent,
114 UsersComponent,
115 VideoAddComponent,
116 VideoListComponent,
117 VideoMiniatureComponent,
118 VideosComponent,
119 VideoSortComponent,
120 VideoWatchComponent,
121 ],
122 imports: [ // import Angular's modules
123 BrowserModule,
124 FormsModule,
125 ReactiveFormsModule,
126 HttpModule,
127 RouterModule.forRoot(routes),
128
129 DropdownModule,
130 ProgressbarModule,
131 PaginationModule,
132 ModalModule,
133
134 FileUploadModule,
135
136 MetaModule.forRoot(metaConfig)
137 ],
138 providers: [ // expose our Services and Providers into Angular's dependency injection
139 ENV_PROVIDERS,
140 APP_PROVIDERS
141 ]
142 })
143 export class AppModule {
144 constructor(public appRef: ApplicationRef, public appState: AppState) {}
145 hmrOnInit(store) {
146 if (!store || !store.state) return;
147 console.log('HMR store', store);
148 this.appState._state = store.state;
149 this.appRef.tick();
150 delete store.state;
151 }
152 hmrOnDestroy(store) {
153 const cmpLocation = this.appRef.components.map(cmp => cmp.location.nativeElement);
154 // recreate elements
155 const state = this.appState._state;
156 store.state = state;
157 store.disposeOldHosts = createNewHosts(cmpLocation);
158 // remove styles
159 removeNgStyles();
160 }
161 hmrAfterDestroy(store) {
162 // display new elements
163 store.disposeOldHosts();
164 delete store.disposeOldHosts;
165 }
166 }