30c68426d836b28b465fb967378e5de38590ce4e
[osm/NG-UI.git] / src / app / AppModule.ts
1 /*
2  Copyright 2020 TATA ELXSI
3
4  Licensed under the Apache License, Version 2.0 (the 'License');
5  you may not use this file except in compliance with the License.
6  You may obtain a copy of the License at
7
8     http://www.apache.org/licenses/LICENSE-2.0
9
10  Unless required by applicable law or agreed to in writing, software
11  distributed under the License is distributed on an "AS IS" BASIS,
12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  See the License for the specific language governing permissions and
14  limitations under the License.
15
16  Author: KUMARAN M (kumaran.m@tataelxsi.co.in), RAJESH S (rajesh.s@tataelxsi.co.in), BARATH KUMAR R (barath.r@tataelxsi.co.in)
17 */
18 /**
19  * @file Instance Module file
20  */
21 import { CommonModule, LOCATION_INITIALIZED } from '@angular/common';
22 import { HttpClient, HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
23 import { APP_INITIALIZER, Injector, NgModule } from '@angular/core';
24 import { FormsModule, ReactiveFormsModule } from '@angular/forms';
25 import { BrowserModule } from '@angular/platform-browser';
26 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
27 import { RouterModule } from '@angular/router';
28 import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
29 import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';
30 import { TranslateHttpLoader } from '@ngx-translate/http-loader';
31 import { NotifierModule, NotifierOptions } from 'angular-notifier';
32 import { AuthInterceptorService } from 'AuthInterceptorService';
33 import { HeaderComponent } from 'HeaderComponent';
34 import { LayoutComponent } from 'LayoutComponent';
35 import { Ng2SmartTableModule } from 'ng2-smart-table';
36 import { RestService } from 'RestService';
37 import { SidebarComponent } from 'SidebarComponent';
38 import { AppComponent } from './AppComponent';
39
40 import { appRoutes } from './approutes.module';
41
42 import { DataService } from 'DataService';
43 import { ProjectService } from 'ProjectService';
44 import { SharedService } from 'SharedService';
45
46 import { CodemirrorModule } from '@ctrl/ngx-codemirror';
47 import { NgSelectModule } from '@ng-select/ng-select';
48
49 import { NgIdleKeepaliveModule } from '@ng-idle/keepalive';
50 import { AuthenticationService } from 'AuthenticationService';
51 import { AuthGuardService } from 'AuthGuardService';
52 import { BreadcrumbComponent } from 'BreadCrumb';
53 import { ChangePasswordComponent } from 'ChangePasswordComponent';
54 import { ChangePasswordModule } from 'ChangePasswordModule';
55 import { ComposePackages } from 'ComposePackages';
56 import { ConfirmationTopologyComponent } from 'ConfirmationTopology';
57 import { DeleteComponent } from 'DeleteComponent';
58 import { DeviceCheckService } from 'DeviceCheckService';
59 import { GoToTopDirective } from 'GoToTopDirective';
60 import { InstantiateNetSliceTemplateComponent } from 'InstantiateNetSliceTemplate';
61 import { InstantiateNsComponent } from 'InstantiateNs';
62 import { LoaderModule } from 'LoaderModule';
63 import { LoginComponent } from 'LoginComponent';
64 import { NetsliceInstancesActionComponent } from 'NetsliceInstancesActionComponent';
65 import { NetslicePackagesActionComponent } from 'NetslicePackagesAction';
66 import { NSInstancesActionComponent } from 'NSInstancesActionComponent';
67 import { NsPackagesActionComponent } from 'NsPackagesAction';
68 import { NsUpdateComponent } from 'NsUpdateComponent';
69 import { PageNotFoundComponent } from 'PageNotFound';
70 import { PDUInstancesActionComponent } from 'PDUInstancesActionComponent';
71 import { ProjectLinkComponent } from 'ProjectLinkComponent';
72 import { ProjectsActionComponent } from 'ProjectsAction';
73 import { ScalingComponent } from 'ScalingComponent';
74 import { SDNControllerActionComponent } from 'SDNControllerActionComponent';
75 import { SharedModule } from 'SharedModule';
76 import { ShowInfoComponent } from 'ShowInfoComponent';
77 import { StartStopRebuildComponent } from 'StartStopRebuildComponent';
78 import { SwitchProjectComponent } from 'SwitchProjectComponent';
79 import { UsersActionComponent } from 'UsersActionComponent';
80 import { UserSettingsComponent } from 'UserSettingsComponent';
81 import { VimAccountsActionComponent } from 'VimAccountsAction';
82 import { VmMigrationComponent } from 'VmMigrationComponent';
83 import { VNFInstancesActionComponent } from 'VNFInstancesActionComponent';
84 import { VNFLinkComponent } from 'VNFLinkComponent';
85 import { VNFPackagesActionComponent } from 'VNFPackagesAction';
86 import { WarningComponent } from 'WarningComponent';
87 import { WIMAccountsActionComponent } from 'WIMAccountsAction';
88
89 /**
90  * Custom angular notifier options
91  */
92 const customNotifierOptions: NotifierOptions = {
93     position: { horizontal: { position: 'right' }, vertical: { position: 'top' } },
94     behaviour: { autoHide: 3000, onClick: 'hide', onMouseover: 'pauseAutoHide' }
95 };
96
97 /**
98  * An NgModule is a class adorned with the @NgModule decorator function.
99  * @NgModule takes a metadata object that tells Angular how to compile and run module code.
100  */
101 @NgModule({
102     declarations: [
103         AppComponent,
104         LayoutComponent,
105         HeaderComponent,
106         SidebarComponent,
107         LoginComponent,
108         PageNotFoundComponent,
109         VNFPackagesActionComponent,
110         NsPackagesActionComponent,
111         NSInstancesActionComponent,
112         VNFInstancesActionComponent,
113         VNFLinkComponent,
114         NetsliceInstancesActionComponent,
115         BreadcrumbComponent,
116         DeleteComponent,
117         NetslicePackagesActionComponent,
118         UsersActionComponent,
119         VimAccountsActionComponent,
120         ProjectsActionComponent,
121         ProjectLinkComponent,
122         UserSettingsComponent,
123         ShowInfoComponent,
124         InstantiateNetSliceTemplateComponent,
125         InstantiateNsComponent,
126         ConfirmationTopologyComponent,
127         ComposePackages,
128         WIMAccountsActionComponent,
129         PDUInstancesActionComponent,
130         SDNControllerActionComponent,
131         SwitchProjectComponent,
132         GoToTopDirective,
133         ScalingComponent,
134         ChangePasswordComponent,
135         VmMigrationComponent,
136         NsUpdateComponent,
137         WarningComponent,
138         StartStopRebuildComponent
139     ],
140     imports: [
141         NotifierModule.withConfig(customNotifierOptions),
142         CommonModule,
143         BrowserModule,
144         BrowserAnimationsModule,
145         FormsModule,
146         ReactiveFormsModule.withConfig({ warnOnNgModelWithFormControl: 'never' }),
147         Ng2SmartTableModule,
148         CodemirrorModule,
149         NgSelectModule,
150         HttpClientModule,
151         TranslateModule.forRoot({
152             loader: {
153                 provide: TranslateLoader,
154                 useFactory: HttpLoaderFactory,
155                 deps: [HttpClient]
156             }
157         }),
158         NgbModule,
159         NgSelectModule,
160         RouterModule.forRoot(appRoutes, { useHash: false, relativeLinkResolution: 'legacy' }),
161         NgIdleKeepaliveModule.forRoot(),
162         LoaderModule,
163         SharedModule,
164         ChangePasswordModule
165     ],
166     providers: [
167         {
168             provide: APP_INITIALIZER,
169             useFactory: appInitializerFactory,
170             deps: [TranslateService, Injector],
171             multi: true
172         },
173         {
174             provide: HTTP_INTERCEPTORS,
175             useClass: AuthInterceptorService,
176             multi: true
177         },
178         RestService,
179         AuthenticationService,
180         AuthGuardService,
181         DataService,
182         ProjectService,
183         SharedService,
184         DeviceCheckService
185     ],
186     bootstrap: [AppComponent],
187     entryComponents: [
188         VNFPackagesActionComponent,
189         NsPackagesActionComponent,
190         NSInstancesActionComponent,
191         VNFInstancesActionComponent,
192         VNFLinkComponent,
193         NetsliceInstancesActionComponent,
194         BreadcrumbComponent,
195         DeleteComponent,
196         NetslicePackagesActionComponent,
197         UsersActionComponent,
198         VimAccountsActionComponent,
199         ProjectsActionComponent,
200         ProjectLinkComponent,
201         UserSettingsComponent,
202         ShowInfoComponent,
203         InstantiateNetSliceTemplateComponent,
204         InstantiateNsComponent,
205         ConfirmationTopologyComponent,
206         ComposePackages,
207         WIMAccountsActionComponent,
208         PDUInstancesActionComponent,
209         SDNControllerActionComponent,
210         SwitchProjectComponent,
211         ScalingComponent,
212         ChangePasswordComponent,
213         VmMigrationComponent,
214         NsUpdateComponent,
215         WarningComponent,
216         StartStopRebuildComponent
217     ]
218 })
219
220 /** Exporting a class @exports AppModule */
221 export class AppModule {
222     /** Variables declared to avoid state-less class */
223     private appModule: string;
224 }
225
226 /**
227  * HttpLoaderFactory is for translate service of the application.
228  */
229 // tslint:disable:function-name
230 export function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader {
231     const now: number = new Date().getTime();
232     return new TranslateHttpLoader(http, './assets/i18n/', '.json?locale=' + now);
233 }
234 /**
235  * HttpLoaderFactory is for translate service of the application.
236  */
237 // tslint:disable:function-name
238 export function appInitializerFactory(translate: TranslateService, injector: Injector): Object {
239     // tslint:disable-next-line: no-any
240     return async (): Promise<any> => {
241         await injector.get(LOCATION_INITIALIZED, Promise.resolve(null));
242         translate.setDefaultLang('en');
243         const languageCode: string = localStorage.getItem('languageCode');
244         if (languageCode !== null && languageCode !== undefined && languageCode !== '') {
245             await translate.use(languageCode).toPromise().catch((): void => {
246                 translate.setDefaultLang('en');
247             });
248         } else {
249             await translate.use('en').toPromise();
250             localStorage.setItem('languageCode', 'en');
251         }
252     };
253 }