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 { PageNotFoundComponent } from 'PageNotFound';
69 import { PDUInstancesActionComponent } from 'PDUInstancesActionComponent';
70 import { ProjectLinkComponent } from 'ProjectLinkComponent';
71 import { ProjectsActionComponent } from 'ProjectsAction';
72 import { ScalingComponent } from 'ScalingComponent';
73 import { SDNControllerActionComponent } from 'SDNControllerActionComponent';
74 import { SharedModule } from 'SharedModule';
75 import { ShowInfoComponent } from 'ShowInfoComponent';
76 import { SwitchProjectComponent } from 'SwitchProjectComponent';
77 import { UsersActionComponent } from 'UsersActionComponent';
78 import { UserSettingsComponent } from 'UserSettingsComponent';
79 import { VimAccountsActionComponent } from 'VimAccountsAction';
80 import { VmMigrationComponent } from 'VmMigrationComponent';
81 import { VNFInstancesActionComponent } from 'VNFInstancesActionComponent';
82 import { VNFLinkComponent } from 'VNFLinkComponent';
83 import { VNFPackagesActionComponent } from 'VNFPackagesAction';
84 import { WIMAccountsActionComponent } from 'WIMAccountsAction';
87 * Custom angular notifier options
89 const customNotifierOptions: NotifierOptions = {
90 position: { horizontal: { position: 'right' }, vertical: { position: 'top' } },
91 behaviour: { autoHide: 3000, onClick: 'hide', onMouseover: 'pauseAutoHide' }
95 * An NgModule is a class adorned with the @NgModule decorator function.
96 * @NgModule takes a metadata object that tells Angular how to compile and run module code.
105 PageNotFoundComponent,
106 VNFPackagesActionComponent,
107 NsPackagesActionComponent,
108 NSInstancesActionComponent,
109 VNFInstancesActionComponent,
111 NetsliceInstancesActionComponent,
114 NetslicePackagesActionComponent,
115 UsersActionComponent,
116 VimAccountsActionComponent,
117 ProjectsActionComponent,
118 ProjectLinkComponent,
119 UserSettingsComponent,
121 InstantiateNetSliceTemplateComponent,
122 InstantiateNsComponent,
123 ConfirmationTopologyComponent,
125 WIMAccountsActionComponent,
126 PDUInstancesActionComponent,
127 SDNControllerActionComponent,
128 SwitchProjectComponent,
131 ChangePasswordComponent,
135 NotifierModule.withConfig(customNotifierOptions),
138 BrowserAnimationsModule,
140 ReactiveFormsModule.withConfig({ warnOnNgModelWithFormControl: 'never' }),
145 TranslateModule.forRoot({
147 provide: TranslateLoader,
148 useFactory: HttpLoaderFactory,
154 RouterModule.forRoot(appRoutes, { useHash: false, relativeLinkResolution: 'legacy' }),
155 NgIdleKeepaliveModule.forRoot(),
162 provide: APP_INITIALIZER,
163 useFactory: appInitializerFactory,
164 deps: [TranslateService, Injector],
168 provide: HTTP_INTERCEPTORS,
169 useClass: AuthInterceptorService,
173 AuthenticationService,
180 bootstrap: [AppComponent],
182 VNFPackagesActionComponent,
183 NsPackagesActionComponent,
184 NSInstancesActionComponent,
185 VNFInstancesActionComponent,
187 NetsliceInstancesActionComponent,
190 NetslicePackagesActionComponent,
191 UsersActionComponent,
192 VimAccountsActionComponent,
193 ProjectsActionComponent,
194 ProjectLinkComponent,
195 UserSettingsComponent,
197 InstantiateNetSliceTemplateComponent,
198 InstantiateNsComponent,
199 ConfirmationTopologyComponent,
201 WIMAccountsActionComponent,
202 PDUInstancesActionComponent,
203 SDNControllerActionComponent,
204 SwitchProjectComponent,
206 ChangePasswordComponent,
211 /** Exporting a class @exports AppModule */
212 export class AppModule {
213 /** Variables declared to avoid state-less class */
214 private appModule: string;
218 * HttpLoaderFactory is for translate service of the application.
220 // tslint:disable:function-name
221 export function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader {
222 const now: number = new Date().getTime();
223 return new TranslateHttpLoader(http, './assets/i18n/', '.json?locale=' + now);
226 * HttpLoaderFactory is for translate service of the application.
228 // tslint:disable:function-name
229 export function appInitializerFactory(translate: TranslateService, injector: Injector): Object {
230 // tslint:disable-next-line: no-any
231 return async (): Promise<any> => {
232 await injector.get(LOCATION_INITIALIZED, Promise.resolve(null));
233 translate.setDefaultLang('en');
234 const languageCode: string = localStorage.getItem('languageCode');
235 if (languageCode !== null && languageCode !== undefined && languageCode !== '') {
236 await translate.use(languageCode).toPromise().catch((): void => {
237 translate.setDefaultLang('en');
240 await translate.use('en').toPromise();
241 localStorage.setItem('languageCode', 'en');