cc9af15cfe2606e1221fdedd49d283ac33aaee1b
[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 { SwitchProjectComponent } from 'SwitchProjectComponent';
78 import { UsersActionComponent } from 'UsersActionComponent';
79 import { UserSettingsComponent } from 'UserSettingsComponent';
80 import { VimAccountsActionComponent } from 'VimAccountsAction';
81 import { VmMigrationComponent } from 'VmMigrationComponent';
82 import { VNFInstancesActionComponent } from 'VNFInstancesActionComponent';
83 import { VNFLinkComponent } from 'VNFLinkComponent';
84 import { VNFPackagesActionComponent } from 'VNFPackagesAction';
85 import { WarningComponent } from 'WarningComponent';
86 import { WIMAccountsActionComponent } from 'WIMAccountsAction';
87
88 /**
89  * Custom angular notifier options
90  */
91 const customNotifierOptions: NotifierOptions = {
92     position: { horizontal: { position: 'right' }, vertical: { position: 'top' } },
93     behaviour: { autoHide: 3000, onClick: 'hide', onMouseover: 'pauseAutoHide' }
94 };
95
96 /**
97  * An NgModule is a class adorned with the @NgModule decorator function.
98  * @NgModule takes a metadata object that tells Angular how to compile and run module code.
99  */
100 @NgModule({
101     declarations: [
102         AppComponent,
103         LayoutComponent,
104         HeaderComponent,
105         SidebarComponent,
106         LoginComponent,
107         PageNotFoundComponent,
108         VNFPackagesActionComponent,
109         NsPackagesActionComponent,
110         NSInstancesActionComponent,
111         VNFInstancesActionComponent,
112         VNFLinkComponent,
113         NetsliceInstancesActionComponent,
114         BreadcrumbComponent,
115         DeleteComponent,
116         NetslicePackagesActionComponent,
117         UsersActionComponent,
118         VimAccountsActionComponent,
119         ProjectsActionComponent,
120         ProjectLinkComponent,
121         UserSettingsComponent,
122         ShowInfoComponent,
123         InstantiateNetSliceTemplateComponent,
124         InstantiateNsComponent,
125         ConfirmationTopologyComponent,
126         ComposePackages,
127         WIMAccountsActionComponent,
128         PDUInstancesActionComponent,
129         SDNControllerActionComponent,
130         SwitchProjectComponent,
131         GoToTopDirective,
132         ScalingComponent,
133         ChangePasswordComponent,
134         VmMigrationComponent,
135         NsUpdateComponent,
136         WarningComponent
137     ],
138     imports: [
139         NotifierModule.withConfig(customNotifierOptions),
140         CommonModule,
141         BrowserModule,
142         BrowserAnimationsModule,
143         FormsModule,
144         ReactiveFormsModule.withConfig({ warnOnNgModelWithFormControl: 'never' }),
145         Ng2SmartTableModule,
146         CodemirrorModule,
147         NgSelectModule,
148         HttpClientModule,
149         TranslateModule.forRoot({
150             loader: {
151                 provide: TranslateLoader,
152                 useFactory: HttpLoaderFactory,
153                 deps: [HttpClient]
154             }
155         }),
156         NgbModule,
157         NgSelectModule,
158         RouterModule.forRoot(appRoutes, { useHash: false, relativeLinkResolution: 'legacy' }),
159         NgIdleKeepaliveModule.forRoot(),
160         LoaderModule,
161         SharedModule,
162         ChangePasswordModule
163     ],
164     providers: [
165         {
166             provide: APP_INITIALIZER,
167             useFactory: appInitializerFactory,
168             deps: [TranslateService, Injector],
169             multi: true
170         },
171         {
172             provide: HTTP_INTERCEPTORS,
173             useClass: AuthInterceptorService,
174             multi: true
175         },
176         RestService,
177         AuthenticationService,
178         AuthGuardService,
179         DataService,
180         ProjectService,
181         SharedService,
182         DeviceCheckService
183     ],
184     bootstrap: [AppComponent],
185     entryComponents: [
186         VNFPackagesActionComponent,
187         NsPackagesActionComponent,
188         NSInstancesActionComponent,
189         VNFInstancesActionComponent,
190         VNFLinkComponent,
191         NetsliceInstancesActionComponent,
192         BreadcrumbComponent,
193         DeleteComponent,
194         NetslicePackagesActionComponent,
195         UsersActionComponent,
196         VimAccountsActionComponent,
197         ProjectsActionComponent,
198         ProjectLinkComponent,
199         UserSettingsComponent,
200         ShowInfoComponent,
201         InstantiateNetSliceTemplateComponent,
202         InstantiateNsComponent,
203         ConfirmationTopologyComponent,
204         ComposePackages,
205         WIMAccountsActionComponent,
206         PDUInstancesActionComponent,
207         SDNControllerActionComponent,
208         SwitchProjectComponent,
209         ScalingComponent,
210         ChangePasswordComponent,
211         VmMigrationComponent,
212         NsUpdateComponent,
213         WarningComponent
214     ]
215 })
216
217 /** Exporting a class @exports AppModule */
218 export class AppModule {
219     /** Variables declared to avoid state-less class */
220     private appModule: string;
221 }
222
223 /**
224  * HttpLoaderFactory is for translate service of the application.
225  */
226 // tslint:disable:function-name
227 export function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader {
228     const now: number = new Date().getTime();
229     return new TranslateHttpLoader(http, './assets/i18n/', '.json?locale=' + now);
230 }
231 /**
232  * HttpLoaderFactory is for translate service of the application.
233  */
234 // tslint:disable:function-name
235 export function appInitializerFactory(translate: TranslateService, injector: Injector): Object {
236     // tslint:disable-next-line: no-any
237     return async (): Promise<any> => {
238         await injector.get(LOCATION_INITIALIZED, Promise.resolve(null));
239         translate.setDefaultLang('en');
240         const languageCode: string = localStorage.getItem('languageCode');
241         if (languageCode !== null && languageCode !== undefined && languageCode !== '') {
242             await translate.use(languageCode).toPromise().catch((): void => {
243                 translate.setDefaultLang('en');
244             });
245         } else {
246             await translate.use('en').toPromise();
247             localStorage.setItem('languageCode', 'en');
248         }
249     };
250 }