2 Copyright 2020 TATA ELXSI
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
8 http://www.apache.org/licenses/LICENSE-2.0
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.
16 Author: KUMARAN M (kumaran.m@tataelxsi.co.in), RAJESH S (rajesh.s@tataelxsi.co.in), BARATH KUMAR R (barath.r@tataelxsi.co.in)
19 * @file Instance Module file
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';
40 import { appRoutes } from './approutes.module';
42 import { DataService } from 'DataService';
43 import { ProjectService } from 'ProjectService';
44 import { SharedService } from 'SharedService';
46 import { CodemirrorModule } from '@ctrl/ngx-codemirror';
47 import { NgSelectModule } from '@ng-select/ng-select';
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 { VerticalScalingComponent } from 'VerticalScalingComponent';
82 import { VimAccountsActionComponent } from 'VimAccountsAction';
83 import { VmMigrationComponent } from 'VmMigrationComponent';
84 import { VNFInstancesActionComponent } from 'VNFInstancesActionComponent';
85 import { VNFLinkComponent } from 'VNFLinkComponent';
86 import { VNFPackagesActionComponent } from 'VNFPackagesAction';
87 import { WarningComponent } from 'WarningComponent';
88 import { WIMAccountsActionComponent } from 'WIMAccountsAction';
91 * Custom angular notifier options
93 const customNotifierOptions: NotifierOptions = {
94 position: { horizontal: { position: 'right' }, vertical: { position: 'top' } },
95 behaviour: { autoHide: 3000, onClick: 'hide', onMouseover: 'pauseAutoHide' }
99 * An NgModule is a class adorned with the @NgModule decorator function.
100 * @NgModule takes a metadata object that tells Angular how to compile and run module code.
109 PageNotFoundComponent,
110 VNFPackagesActionComponent,
111 NsPackagesActionComponent,
112 NSInstancesActionComponent,
113 VNFInstancesActionComponent,
115 NetsliceInstancesActionComponent,
118 NetslicePackagesActionComponent,
119 UsersActionComponent,
120 VimAccountsActionComponent,
121 ProjectsActionComponent,
122 ProjectLinkComponent,
123 UserSettingsComponent,
125 InstantiateNetSliceTemplateComponent,
126 InstantiateNsComponent,
127 ConfirmationTopologyComponent,
129 WIMAccountsActionComponent,
130 PDUInstancesActionComponent,
131 SDNControllerActionComponent,
132 SwitchProjectComponent,
135 ChangePasswordComponent,
136 VmMigrationComponent,
139 StartStopRebuildComponent,
140 VerticalScalingComponent
143 NotifierModule.withConfig(customNotifierOptions),
146 BrowserAnimationsModule,
148 ReactiveFormsModule.withConfig({ warnOnNgModelWithFormControl: 'never' }),
153 TranslateModule.forRoot({
155 provide: TranslateLoader,
156 useFactory: HttpLoaderFactory,
162 RouterModule.forRoot(appRoutes, { useHash: false, relativeLinkResolution: 'legacy' }),
163 NgIdleKeepaliveModule.forRoot(),
170 provide: APP_INITIALIZER,
171 useFactory: appInitializerFactory,
172 deps: [TranslateService, Injector],
176 provide: HTTP_INTERCEPTORS,
177 useClass: AuthInterceptorService,
181 AuthenticationService,
188 bootstrap: [AppComponent],
190 VNFPackagesActionComponent,
191 NsPackagesActionComponent,
192 NSInstancesActionComponent,
193 VNFInstancesActionComponent,
195 NetsliceInstancesActionComponent,
198 NetslicePackagesActionComponent,
199 UsersActionComponent,
200 VimAccountsActionComponent,
201 ProjectsActionComponent,
202 ProjectLinkComponent,
203 UserSettingsComponent,
205 InstantiateNetSliceTemplateComponent,
206 InstantiateNsComponent,
207 ConfirmationTopologyComponent,
209 WIMAccountsActionComponent,
210 PDUInstancesActionComponent,
211 SDNControllerActionComponent,
212 SwitchProjectComponent,
214 ChangePasswordComponent,
215 VmMigrationComponent,
218 StartStopRebuildComponent,
219 VerticalScalingComponent
223 /** Exporting a class @exports AppModule */
224 export class AppModule {
225 /** Variables declared to avoid state-less class */
226 private appModule: string;
230 * HttpLoaderFactory is for translate service of the application.
232 // tslint:disable:function-name
233 export function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader {
234 const now: number = new Date().getTime();
235 return new TranslateHttpLoader(http, './assets/i18n/', '.json?locale=' + now);
238 * HttpLoaderFactory is for translate service of the application.
240 // tslint:disable:function-name
241 export function appInitializerFactory(translate: TranslateService, injector: Injector): Object {
242 // tslint:disable-next-line: no-any
243 return async (): Promise<any> => {
244 await injector.get(LOCATION_INITIALIZED, Promise.resolve(null));
245 translate.setDefaultLang('en');
246 const languageCode: string = localStorage.getItem('languageCode');
247 if (languageCode !== null && languageCode !== undefined && languageCode !== '') {
248 await translate.use(languageCode).toPromise().catch((): void => {
249 translate.setDefaultLang('en');
252 await translate.use('en').toPromise();
253 localStorage.setItem('languageCode', 'en');