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 { HTTP_INTERCEPTORS, HttpClient, HttpClientModule } 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 { ComposePackages } from 'ComposePackages';
54 import { ConfirmationTopologyComponent } from 'ConfirmationTopology';
55 import { DeleteComponent } from 'DeleteComponent';
56 import { DeviceCheckService } from 'DeviceCheckService';
57 import { GoToTopDirective } from 'GoToTopDirective';
58 import { InstantiateNetSliceTemplateComponent } from 'InstantiateNetSliceTemplate';
59 import { InstantiateNsComponent } from 'InstantiateNs';
60 import { LoaderModule } from 'LoaderModule';
61 import { LoginComponent } from 'LoginComponent';
62 import { NetsliceInstancesActionComponent } from 'NetsliceInstancesActionComponent';
63 import { NetslicePackagesActionComponent } from 'NetslicePackagesAction';
64 import { NSInstancesActionComponent } from 'NSInstancesActionComponent';
65 import { NsPackagesActionComponent } from 'NsPackagesAction';
66 import { PageNotFoundComponent } from 'PageNotFound';
67 import { PDUInstancesActionComponent } from 'PDUInstancesActionComponent';
68 import { ProjectLinkComponent } from 'ProjectLinkComponent';
69 import { ProjectsActionComponent } from 'ProjectsAction';
70 import { SDNControllerActionComponent } from 'SDNControllerActionComponent';
71 import { ShowInfoComponent } from 'ShowInfoComponent';
72 import { SwitchProjectComponent } from 'SwitchProjectComponent';
73 import { UsersActionComponent } from 'UsersActionComponent';
74 import { UserSettingsComponent } from 'UserSettingsComponent';
75 import { VimAccountsActionComponent } from 'VimAccountsAction';
76 import { VNFInstancesActionComponent } from 'VNFInstancesActionComponent';
77 import { VNFLinkComponent } from 'VNFLinkComponent';
78 import { VNFPackagesActionComponent } from 'VNFPackagesAction';
79 import { WIMAccountsActionComponent } from 'WIMAccountsAction';
82 * Custom angular notifier options
84 const customNotifierOptions: NotifierOptions = {
85 position: { horizontal: { position: 'right' }, vertical: { position: 'top' } },
86 behaviour: { autoHide: 3000, onClick: 'hide', onMouseover: 'pauseAutoHide' }
90 * An NgModule is a class adorned with the @NgModule decorator function.
91 * @NgModule takes a metadata object that tells Angular how to compile and run module code.
100 PageNotFoundComponent,
101 VNFPackagesActionComponent,
102 NsPackagesActionComponent,
103 NSInstancesActionComponent,
104 VNFInstancesActionComponent,
106 NetsliceInstancesActionComponent,
109 NetslicePackagesActionComponent,
110 UsersActionComponent,
111 VimAccountsActionComponent,
112 ProjectsActionComponent,
113 ProjectLinkComponent,
114 UserSettingsComponent,
116 InstantiateNetSliceTemplateComponent,
117 InstantiateNsComponent,
118 ConfirmationTopologyComponent,
120 WIMAccountsActionComponent,
121 PDUInstancesActionComponent,
122 SDNControllerActionComponent,
123 SwitchProjectComponent,
127 NotifierModule.withConfig(customNotifierOptions),
130 BrowserAnimationsModule,
132 ReactiveFormsModule.withConfig({ warnOnNgModelWithFormControl: 'never' }),
137 TranslateModule.forRoot({
139 provide: TranslateLoader,
140 useFactory: HttpLoaderFactory,
146 RouterModule.forRoot(appRoutes, { useHash: false }),
147 NgIdleKeepaliveModule.forRoot(),
152 provide: APP_INITIALIZER,
153 useFactory: appInitializerFactory,
154 deps: [TranslateService, Injector],
158 provide: HTTP_INTERCEPTORS,
159 useClass: AuthInterceptorService,
163 AuthenticationService,
170 bootstrap: [AppComponent],
172 VNFPackagesActionComponent,
173 NsPackagesActionComponent,
174 NSInstancesActionComponent,
175 VNFInstancesActionComponent,
177 NetsliceInstancesActionComponent,
180 NetslicePackagesActionComponent,
181 UsersActionComponent,
182 VimAccountsActionComponent,
183 ProjectsActionComponent,
184 ProjectLinkComponent,
185 UserSettingsComponent,
187 InstantiateNetSliceTemplateComponent,
188 InstantiateNsComponent,
189 ConfirmationTopologyComponent,
191 WIMAccountsActionComponent,
192 PDUInstancesActionComponent,
193 SDNControllerActionComponent,
194 SwitchProjectComponent
198 /** Exporting a class @exports AppModule */
199 export class AppModule {
200 /** Variables declared to avoid state-less class */
201 private appModule: string;
205 * HttpLoaderFactory is for translate service of the application.
207 // tslint:disable:function-name
208 export function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader {
209 const now: number = new Date().getTime();
210 return new TranslateHttpLoader(http, './assets/i18n/', '.json?locale=' + now);
213 * HttpLoaderFactory is for translate service of the application.
215 // tslint:disable:function-name
216 export function appInitializerFactory(translate: TranslateService, injector: Injector): Object {
217 // tslint:disable-next-line: no-any
218 return async (): Promise<any> => {
219 await injector.get(LOCATION_INITIALIZED, Promise.resolve(null));
220 translate.setDefaultLang('en');
221 const languageCode: string = localStorage.getItem('languageCode');
222 if (languageCode !== null && languageCode !== undefined && languageCode !== '') {
223 await translate.use(languageCode).toPromise().catch(() => {
224 translate.setDefaultLang('en');
227 await translate.use('en').toPromise();
228 localStorage.setItem('languageCode', 'en');