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 { 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 { ScalingComponent } from 'ScalingComponent';
71 import { SDNControllerActionComponent } from 'SDNControllerActionComponent';
72 import { ShowInfoComponent } from 'ShowInfoComponent';
73 import { SwitchProjectComponent } from 'SwitchProjectComponent';
74 import { UsersActionComponent } from 'UsersActionComponent';
75 import { UserSettingsComponent } from 'UserSettingsComponent';
76 import { VimAccountsActionComponent } from 'VimAccountsAction';
77 import { VNFInstancesActionComponent } from 'VNFInstancesActionComponent';
78 import { VNFLinkComponent } from 'VNFLinkComponent';
79 import { VNFPackagesActionComponent } from 'VNFPackagesAction';
80 import { WIMAccountsActionComponent } from 'WIMAccountsAction';
83 * Custom angular notifier options
85 const customNotifierOptions: NotifierOptions = {
86 position: { horizontal: { position: 'right' }, vertical: { position: 'top' } },
87 behaviour: { autoHide: 3000, onClick: 'hide', onMouseover: 'pauseAutoHide' }
91 * An NgModule is a class adorned with the @NgModule decorator function.
92 * @NgModule takes a metadata object that tells Angular how to compile and run module code.
101 PageNotFoundComponent,
102 VNFPackagesActionComponent,
103 NsPackagesActionComponent,
104 NSInstancesActionComponent,
105 VNFInstancesActionComponent,
107 NetsliceInstancesActionComponent,
110 NetslicePackagesActionComponent,
111 UsersActionComponent,
112 VimAccountsActionComponent,
113 ProjectsActionComponent,
114 ProjectLinkComponent,
115 UserSettingsComponent,
117 InstantiateNetSliceTemplateComponent,
118 InstantiateNsComponent,
119 ConfirmationTopologyComponent,
121 WIMAccountsActionComponent,
122 PDUInstancesActionComponent,
123 SDNControllerActionComponent,
124 SwitchProjectComponent,
129 NotifierModule.withConfig(customNotifierOptions),
132 BrowserAnimationsModule,
134 ReactiveFormsModule.withConfig({ warnOnNgModelWithFormControl: 'never' }),
139 TranslateModule.forRoot({
141 provide: TranslateLoader,
142 useFactory: HttpLoaderFactory,
148 RouterModule.forRoot(appRoutes, { useHash: false, relativeLinkResolution: 'legacy' }),
149 NgIdleKeepaliveModule.forRoot(),
154 provide: APP_INITIALIZER,
155 useFactory: appInitializerFactory,
156 deps: [TranslateService, Injector],
160 provide: HTTP_INTERCEPTORS,
161 useClass: AuthInterceptorService,
165 AuthenticationService,
172 bootstrap: [AppComponent],
174 VNFPackagesActionComponent,
175 NsPackagesActionComponent,
176 NSInstancesActionComponent,
177 VNFInstancesActionComponent,
179 NetsliceInstancesActionComponent,
182 NetslicePackagesActionComponent,
183 UsersActionComponent,
184 VimAccountsActionComponent,
185 ProjectsActionComponent,
186 ProjectLinkComponent,
187 UserSettingsComponent,
189 InstantiateNetSliceTemplateComponent,
190 InstantiateNsComponent,
191 ConfirmationTopologyComponent,
193 WIMAccountsActionComponent,
194 PDUInstancesActionComponent,
195 SDNControllerActionComponent,
196 SwitchProjectComponent,
201 /** Exporting a class @exports AppModule */
202 export class AppModule {
203 /** Variables declared to avoid state-less class */
204 private appModule: string;
208 * HttpLoaderFactory is for translate service of the application.
210 // tslint:disable:function-name
211 export function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader {
212 const now: number = new Date().getTime();
213 return new TranslateHttpLoader(http, './assets/i18n/', '.json?locale=' + now);
216 * HttpLoaderFactory is for translate service of the application.
218 // tslint:disable:function-name
219 export function appInitializerFactory(translate: TranslateService, injector: Injector): Object {
220 // tslint:disable-next-line: no-any
221 return async (): Promise<any> => {
222 await injector.get(LOCATION_INITIALIZED, Promise.resolve(null));
223 translate.setDefaultLang('en');
224 const languageCode: string = localStorage.getItem('languageCode');
225 if (languageCode !== null && languageCode !== undefined && languageCode !== '') {
226 await translate.use(languageCode).toPromise().catch(() => {
227 translate.setDefaultLang('en');
230 await translate.use('en').toPromise();
231 localStorage.setItem('languageCode', 'en');