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 { 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';
89 * Custom angular notifier options
91 const customNotifierOptions: NotifierOptions = {
92 position: { horizontal: { position: 'right' }, vertical: { position: 'top' } },
93 behaviour: { autoHide: 3000, onClick: 'hide', onMouseover: 'pauseAutoHide' }
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.
107 PageNotFoundComponent,
108 VNFPackagesActionComponent,
109 NsPackagesActionComponent,
110 NSInstancesActionComponent,
111 VNFInstancesActionComponent,
113 NetsliceInstancesActionComponent,
116 NetslicePackagesActionComponent,
117 UsersActionComponent,
118 VimAccountsActionComponent,
119 ProjectsActionComponent,
120 ProjectLinkComponent,
121 UserSettingsComponent,
123 InstantiateNetSliceTemplateComponent,
124 InstantiateNsComponent,
125 ConfirmationTopologyComponent,
127 WIMAccountsActionComponent,
128 PDUInstancesActionComponent,
129 SDNControllerActionComponent,
130 SwitchProjectComponent,
133 ChangePasswordComponent,
134 VmMigrationComponent,
139 NotifierModule.withConfig(customNotifierOptions),
142 BrowserAnimationsModule,
144 ReactiveFormsModule.withConfig({ warnOnNgModelWithFormControl: 'never' }),
149 TranslateModule.forRoot({
151 provide: TranslateLoader,
152 useFactory: HttpLoaderFactory,
158 RouterModule.forRoot(appRoutes, { useHash: false, relativeLinkResolution: 'legacy' }),
159 NgIdleKeepaliveModule.forRoot(),
166 provide: APP_INITIALIZER,
167 useFactory: appInitializerFactory,
168 deps: [TranslateService, Injector],
172 provide: HTTP_INTERCEPTORS,
173 useClass: AuthInterceptorService,
177 AuthenticationService,
184 bootstrap: [AppComponent],
186 VNFPackagesActionComponent,
187 NsPackagesActionComponent,
188 NSInstancesActionComponent,
189 VNFInstancesActionComponent,
191 NetsliceInstancesActionComponent,
194 NetslicePackagesActionComponent,
195 UsersActionComponent,
196 VimAccountsActionComponent,
197 ProjectsActionComponent,
198 ProjectLinkComponent,
199 UserSettingsComponent,
201 InstantiateNetSliceTemplateComponent,
202 InstantiateNsComponent,
203 ConfirmationTopologyComponent,
205 WIMAccountsActionComponent,
206 PDUInstancesActionComponent,
207 SDNControllerActionComponent,
208 SwitchProjectComponent,
210 ChangePasswordComponent,
211 VmMigrationComponent,
217 /** Exporting a class @exports AppModule */
218 export class AppModule {
219 /** Variables declared to avoid state-less class */
220 private appModule: string;
224 * HttpLoaderFactory is for translate service of the application.
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);
232 * HttpLoaderFactory is for translate service of the application.
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');
246 await translate.use('en').toPromise();
247 localStorage.setItem('languageCode', 'en');