Initial Commit - NG UI
[osm/NG-UI.git] / src / app / AppModule.ts
diff --git a/src/app/AppModule.ts b/src/app/AppModule.ts
new file mode 100644 (file)
index 0000000..02fa736
--- /dev/null
@@ -0,0 +1,231 @@
+/*
+ Copyright 2020 TATA ELXSI
+
+ Licensed under the Apache License, Version 2.0 (the 'License');
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ Author: KUMARAN M (kumaran.m@tataelxsi.co.in), RAJESH S (rajesh.s@tataelxsi.co.in), BARATH KUMAR R (barath.r@tataelxsi.co.in)
+*/
+/**
+ * @file Instance Module file
+ */
+import { CommonModule, LOCATION_INITIALIZED } from '@angular/common';
+import { HTTP_INTERCEPTORS, HttpClient, HttpClientModule } from '@angular/common/http';
+import { APP_INITIALIZER, Injector, NgModule } from '@angular/core';
+import { FormsModule, ReactiveFormsModule } from '@angular/forms';
+import { BrowserModule } from '@angular/platform-browser';
+import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
+import { RouterModule } from '@angular/router';
+import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
+import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';
+import { TranslateHttpLoader } from '@ngx-translate/http-loader';
+import { NotifierModule, NotifierOptions } from 'angular-notifier';
+import { AuthInterceptorService } from 'AuthInterceptorService';
+import { HeaderComponent } from 'HeaderComponent';
+import { LayoutComponent } from 'LayoutComponent';
+import { Ng2SmartTableModule } from 'ng2-smart-table';
+import { RestService } from 'RestService';
+import { SidebarComponent } from 'SidebarComponent';
+import { AppComponent } from './AppComponent';
+
+import { appRoutes } from './approutes.module';
+
+import { DataService } from 'DataService';
+import { ProjectService } from 'ProjectService';
+import { SharedService } from 'SharedService';
+
+import { CodemirrorModule } from '@ctrl/ngx-codemirror';
+import { NgSelectModule } from '@ng-select/ng-select';
+
+import { NgIdleKeepaliveModule } from '@ng-idle/keepalive';
+import { AuthenticationService } from 'AuthenticationService';
+import { AuthGuardService } from 'AuthGuardService';
+import { BreadcrumbComponent } from 'BreadCrumb';
+import { ComposePackages } from 'ComposePackages';
+import { ConfirmationTopologyComponent } from 'ConfirmationTopology';
+import { DeleteComponent } from 'DeleteComponent';
+import { DeviceCheckService } from 'DeviceCheckService';
+import { GoToTopDirective } from 'GoToTopDirective';
+import { InstantiateNetSliceTemplateComponent } from 'InstantiateNetSliceTemplate';
+import { InstantiateNsComponent } from 'InstantiateNs';
+import { LoaderModule } from 'LoaderModule';
+import { LoginComponent } from 'LoginComponent';
+import { NetsliceInstancesActionComponent } from 'NetsliceInstancesActionComponent';
+import { NetslicePackagesActionComponent } from 'NetslicePackagesAction';
+import { NSInstancesActionComponent } from 'NSInstancesActionComponent';
+import { NsPackagesActionComponent } from 'NsPackagesAction';
+import { PageNotFoundComponent } from 'PageNotFound';
+import { PDUInstancesActionComponent } from 'PDUInstancesActionComponent';
+import { ProjectLinkComponent } from 'ProjectLinkComponent';
+import { ProjectsActionComponent } from 'ProjectsAction';
+import { SDNControllerActionComponent } from 'SDNControllerActionComponent';
+import { ShowInfoComponent } from 'ShowInfoComponent';
+import { SwitchProjectComponent } from 'SwitchProjectComponent';
+import { UsersActionComponent } from 'UsersActionComponent';
+import { UserSettingsComponent } from 'UserSettingsComponent';
+import { VimAccountsActionComponent } from 'VimAccountsAction';
+import { VNFInstancesActionComponent } from 'VNFInstancesActionComponent';
+import { VNFLinkComponent } from 'VNFLinkComponent';
+import { VNFPackagesActionComponent } from 'VNFPackagesAction';
+import { WIMAccountsActionComponent } from 'WIMAccountsAction';
+
+/**
+ * Custom angular notifier options
+ */
+const customNotifierOptions: NotifierOptions = {
+    position: { horizontal: { position: 'right' }, vertical: { position: 'top' } },
+    behaviour: { autoHide: 3000, onClick: 'hide', onMouseover: 'pauseAutoHide' }
+};
+
+/**
+ * An NgModule is a class adorned with the @NgModule decorator function.
+ * @NgModule takes a metadata object that tells Angular how to compile and run module code.
+ */
+@NgModule({
+    declarations: [
+        AppComponent,
+        LayoutComponent,
+        HeaderComponent,
+        SidebarComponent,
+        LoginComponent,
+        PageNotFoundComponent,
+        VNFPackagesActionComponent,
+        NsPackagesActionComponent,
+        NSInstancesActionComponent,
+        VNFInstancesActionComponent,
+        VNFLinkComponent,
+        NetsliceInstancesActionComponent,
+        BreadcrumbComponent,
+        DeleteComponent,
+        NetslicePackagesActionComponent,
+        UsersActionComponent,
+        VimAccountsActionComponent,
+        ProjectsActionComponent,
+        ProjectLinkComponent,
+        UserSettingsComponent,
+        ShowInfoComponent,
+        InstantiateNetSliceTemplateComponent,
+        InstantiateNsComponent,
+        ConfirmationTopologyComponent,
+        ComposePackages,
+        WIMAccountsActionComponent,
+        PDUInstancesActionComponent,
+        SDNControllerActionComponent,
+        SwitchProjectComponent,
+        GoToTopDirective
+    ],
+    imports: [
+        NotifierModule.withConfig(customNotifierOptions),
+        CommonModule,
+        BrowserModule,
+        BrowserAnimationsModule,
+        FormsModule,
+        ReactiveFormsModule.withConfig({ warnOnNgModelWithFormControl: 'never' }),
+        Ng2SmartTableModule,
+        CodemirrorModule,
+        NgSelectModule,
+        HttpClientModule,
+        TranslateModule.forRoot({
+            loader: {
+                provide: TranslateLoader,
+                useFactory: HttpLoaderFactory,
+                deps: [HttpClient]
+            }
+        }),
+        NgbModule,
+        NgSelectModule,
+        RouterModule.forRoot(appRoutes, { useHash: false }),
+        NgIdleKeepaliveModule.forRoot(),
+        LoaderModule
+    ],
+    providers: [
+        {
+            provide: APP_INITIALIZER,
+            useFactory: appInitializerFactory,
+            deps: [TranslateService, Injector],
+            multi: true
+        },
+        {
+            provide: HTTP_INTERCEPTORS,
+            useClass: AuthInterceptorService,
+            multi: true
+        },
+        RestService,
+        AuthenticationService,
+        AuthGuardService,
+        DataService,
+        ProjectService,
+        SharedService,
+        DeviceCheckService
+    ],
+    bootstrap: [AppComponent],
+    entryComponents: [
+        VNFPackagesActionComponent,
+        NsPackagesActionComponent,
+        NSInstancesActionComponent,
+        VNFInstancesActionComponent,
+        VNFLinkComponent,
+        NetsliceInstancesActionComponent,
+        BreadcrumbComponent,
+        DeleteComponent,
+        NetslicePackagesActionComponent,
+        UsersActionComponent,
+        VimAccountsActionComponent,
+        ProjectsActionComponent,
+        ProjectLinkComponent,
+        UserSettingsComponent,
+        ShowInfoComponent,
+        InstantiateNetSliceTemplateComponent,
+        InstantiateNsComponent,
+        ConfirmationTopologyComponent,
+        ComposePackages,
+        WIMAccountsActionComponent,
+        PDUInstancesActionComponent,
+        SDNControllerActionComponent,
+        SwitchProjectComponent
+    ]
+})
+
+/** Exporting a class @exports AppModule */
+export class AppModule {
+    /** Variables declared to avoid state-less class */
+    private appModule: string;
+}
+
+/**
+ * HttpLoaderFactory is for translate service of the application.
+ */
+// tslint:disable:function-name
+export function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader {
+    const now: number = new Date().getTime();
+    return new TranslateHttpLoader(http, './assets/i18n/', '.json?locale=' + now);
+}
+/**
+ * HttpLoaderFactory is for translate service of the application.
+ */
+// tslint:disable:function-name
+export function appInitializerFactory(translate: TranslateService, injector: Injector): Object {
+    // tslint:disable-next-line: no-any
+    return async (): Promise<any> => {
+        await injector.get(LOCATION_INITIALIZED, Promise.resolve(null));
+        translate.setDefaultLang('en');
+        const languageCode: string = localStorage.getItem('languageCode');
+        if (languageCode !== null && languageCode !== undefined && languageCode !== '') {
+            await translate.use(languageCode).toPromise().catch(() => {
+                translate.setDefaultLang('en');
+            });
+        } else {
+            await translate.use('en').toPromise();
+            localStorage.setItem('languageCode', 'en');
+        }
+    };
+}