{"version":3,"file":"main.js","mappings":"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O,GAET,CACEN,QAASO,KACTC,SAAUlC,GACVgC,OAAO,GAET,CACEN,QAASO,KACTC,SAAUC,KACVH,OAAO,GAET,CACEN,QAASU,KACTC,WAAYvB,IAEd,CACEY,QAAS3B,KACT6B,SAAU,CACRN,gBAAiBC,gBAGrB,CACEG,QAASY,KACTD,WAAYlB,IAEdoB,KACAtL,KACAuL,KACAC,KACAhmB,EACA,CAAEilB,QAASgB,KAAed,SAAU,KAAO3pB,EAAamB,GACzDupB,SA5ECC,KACAC,KACAC,KACAC,KACAC,MACAC,MACAC,KACAC,MACAC,KACAC,MACAC,MACAC,MACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,MACAC,MACAC,KACAC,MACAC,KACAC,gBACAxM,GACAyM,gBACAC,MACAC,KACAC,KACAC,MACAC,KACAC,KACAC,KACAC,KACAC,SA4CStD,CAAb,KC3LA,MAAMuD,GAAY,CAChB,CAAErD,QAAS,WAAYW,WALnB,SAAU2C,KACd,OAAOtf,SAASuf,qBAAqB,QAAQ,GAAGpkB,IACjD,EAGgDqkB,KAAM,KAGnD3S,kBACF4S,SAGFC,KAAuBL,IAAWM,gBAAgB7D,IAC/C8D,MAAM1sB,GAAOsJ,QAAQC,IAAIvJ,GAD5B,wNCvBA,OACA,aACA,gBACA,WACA,eACA,kBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,cACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,aACA,gBACA,YACA,eACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,mBACA,gBACA,aACA,gBACA,aACA,gBACA,gBACA,mBACA,gBACA,mBACA,eACA,kBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,cACA,iBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,mBACA,gBACA,WACA,cACA,aACA,gBACA,aACA,gBACA,YACA,eACA,mBACA,sBACA,kBACA,qBACA,aACA,gBACA,aACA,gBACA,WACA,cACA,aACA,gBACA,aACA,gBACA,gBACA,mBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,iBACA,oBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,aACA,gBACA,iBACA,oBACA,gBACA,mBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,kBACA,qBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,cACA,iBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,gBACA,mBACA,cACA,iBACA,aACA,gBACA,cACA,iBACA,cACA,kBACA,qBACA,iBACA,gBACA,mBACA,aACA,gBACA,aACA,gBACA,aACA,kBACA,qBACA,gBACA,aACA,gBACA,mBACA,sBACA,aACA,gBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,oBAIA,cACA,WACA,WACA,CACA,cACA,cACA,8CACA,gCACA2sB,CACA,CACA,WACA,CACAC,kBACA,qBACA,EACAA,YACAC,YACAD","names":["ComponentTargetConfigurations","i0","AlertComponent","constructor","dialogRef","data","this","title","success","onCancelClick","close","MAT_DIALOG_DATA","selectors","ctx","HttpService","http","headers","HttpHeaders","delete","url","httpParams","header","params","pipe","catchError","err","handleError","post","body","get","error","throwError","factory","GlobalService","httpService","httpClient","dialog","EventEmitter","showAlert","model","open","width","panelClass","height","showAlertWithCallBack","methodRef","thisRef","afterClosed","subscribe","result","openModelWindow","modelComponent","widthOfWindow","panelClassName","dataToPass","undefined","replaceDisplayText","tempText","replaceFilterText","conditionalDataFiltering","filterResponse","temp","selectedFieldName","selectedValue","length","filter","df","selectedCondition","parseInt","isNotNullObject","response","isNotNull","getAssetAppConfig","request","XMLHttpRequest","setRequestHeader","send","status","JSON","parse","responseText","applyFilter","filterValue","dataSource","trim","toLowerCase","Globals","platformAdminApi_client_resourceUri","platformAdminApi_client_resourceScope","graphApi_client_resourceUri","graphApi_client_resourceScope","modelListULR","deleteModelURL","assetUrl","registerModelURL","platformHubUrl","platformHomeUrl","SseService","getEventSource","EventSource","adminService","globals","_zone","_sseService","apiUri","config","graphUri","getTenantList","refinaryId","tenantListApi","getComponentList","componentListApi","getDatasourceList","datasourceListApi","getNotificationSubscriptionList","notificationListUrl","deleteNotificationSubscription","id","HttpParams","set","toString","notificationDeleteUrl","saveTenant","tenantData","displayMode","tenantUrl","put","deleteTenant","keyVaultName","resourceGroup","deleteKv","GetResourceGroup","keyvaultName","getReourceGroupNameApi","fetchMasterComponentList","masterComponentUrl","saveComponent","componentData","componentUrl","deleteComponent","getResourceList","resourceListApi","createKeyvault","arrObjectIds","createKeyvaultApi","saveDatasource","datasourceModel","dataSourceUrl","deleteDatasource","getDataSourceTypesList","dataSourceTypesUrl","redirectTo","window","location","href","getComponentSubscription","tenantId","masterComponentId","componentConfigurationApi","getNotificationById","subscriptionId","getNotificationDetailsById","getReportScheduler","getReportSchedulerDetails","getNotificationCategory","getNotificationCategoryApi","saveNotificationSubscription","notificationData","addNotificationSubscription","updateNotificationSubscription","RefineryService","Subject","getRefineryListFromServer","refineryList$","next","console","log","GetToken","getRefineries","asObservable","setCurrentRefinery","refinery","currentRefinery","getCurrentRefinery","ComponentPageComponent","globalService","adminservice","refineryService","UntypedFormGroup","componentId","UntypedFormControl","value","disabled","Validators","componentDbConnStr","componentDbConnStrValue","componentDbOdbcConnStr","componentDbOdbcConnStrValue","componentTargetConfiguration","targetTypeId","targetTableName","targetDbConnStr","targetDbOdbcConnStr","targetDbConnStrValue","targetDbOdbcConnStrValue","cosmosDbKey","cosmosDbKeyValue","cosmosDbApiUrl","cosmosDbApiUrlValue","cosmosDbName","ngOnInit","isLoading","loadMasterComponentData","loadComponentDataPage","getDataSourceTypes","changeComponent","event","dbCreationAllowed","target","selectedOptions","text","componentDetailForm","controls","isDbCreationAllowed","selectedComponentId","masterComponentList","find","component","componentDbConnStrSecretName","componentDbOdbcConnStrSecretName","setValue","document","addEventListener","getElementById","message","dataSourceTypesList","componentTargetConfigurations","displayType","disableMode","loadTenantList","refineryId","tenantList","displayTargetData","check","hideCheckBox","componentName","item","tenantName","createdBy","loggedInUser","createdTime","moment","Date","local","format","lastModifiedBy","lastModifiedTime","componentTargetConfigurationsData","setConnStrings","thisref","replace","disableSave","datasourceTypeName","clearValidators","setValidators","valid","ConfirmModelComponent","chkDelKv","localStorage","getItem","isChecked","KvSelection","setItem","intendedAction","FilterModel","CommonConstants","FilterFieldTypes","FilterResponseModel","AddFilterComponent","fb","constants","addFilterForm","group","filterName","condition","onFieldSelected","valuesList","selectedField","reset","filterList","o","fieldName","fieldType","conditionList","conditionTypeText","conditionTypeValues","onConditionSelected","tempType","values","sort","a","b","localeCompare","hideFieldName","selectedFilters","t","disableValues","element","includes","submitFilter","emit","element_r26","ComponentComponent","_router","httpClientObj","refinaryService","route","componentListDetails","MatTableDataSource","getSearchText","searchText","setSearchText","refineryDetails","filterPredicate","masterData","createFilterList","paginator","openDialog","mode","deleteModel","isDelete","selectedComponent","deleteModelAfterConfirmation","deleteFailed","createComponent","filterRes","push","popover","isOpen","displayedColumns","tempFilter","unique","Array","from","Set","map","remove","selectedFilter","i","indexOf","splice","slice","ele","ngOnDestroy","destroyed","complete","MatPaginator","MatSort","sheet","DatasourcePageComponent","datasourceId","datasourceName","datasourceTableName","datasourceConnStr","datasourceConnStrValue","datasourceOdbcConnStr","datasourceOdbcConnStrValue","loadDatasourcePage","datasourceDetailForm","masterDataTable","representation","dataCharacteristic","idCol","timeCol","valueCol","eventProcessedTimeCol","masterDataConnStr","masterDataConnStrValue","masterDataOdbcConnStr","masterDataOdbcConnStrValue","switchMap","of","changePage","pageStatus","loadPage2","datasourceTypeId","element_r35","DatasourceComponent","datasourceListDetails","createDatasource","selectedDatasource","ds","GraphService","displayName","groupIDs","getGroups","getNextPage","nextPage","OverageComponent","authService","service","router","handleResponse","handleGroupResponse","InteractionRequiredAuthError","errorCode","errorMessage","acquireTokenPopup","scopes","toPromise","then","v","groups","handleNextPage","syncGroups","user","navigate","redirectPath","OverageService","readGraphGroups","objRef","handleNextPageWithMethodRef","syncGroupswithRef","GroupGuardService","overage","globalServ","canActivate","validateGroup","routeConfig","path","expectedGroups","matchGroups","grp","redirectOnUnAuthorizedAccess","KeyvaultComponent","accessRights","environment","toUpperCase","keyvaultDetailsForm","fetchResourceList","resourceList","kvUrl","TenantPageComponent","tenantSecurityGrp","tenantEmailId","tenantKeyvaultUrl","refineryMap","loadTenantPageData","isTenantDisabled","tenantDetailForm","onRefineryChange","tenantRefinery","refineryShortName","openKeyvaultPopup","setkeyVaultUrl","element_r29","TenantComponent","tenantListDetails","fetchTenantData","selectedRefinery","refinerySelected","split","tenantname","ResourceGroup","selectedTenant","openComponent","openDataSource","createTenant","removeItem","production","process","clientId","authority","validateAuthority","redirectUri","postLogoutRedirectUri","navigateToLoginRequestUrl","groups_client_TenantAdminGroupId","cache_client","cacheLocation","ReleaseDetails","Version","DateOfBuild","BuildNumber","subscription","appInsightKey","platformDocumentation","NotificationPageComponent","notificationCategoryId","channelName","webHookUrl","successNotification","failureNotification","reportScheduleId","loadNotificationCategoryList","loadReportScheduler","loadNotificationPageData","notificationDetailForm","webhookUrl","failedNotification","schedulerList","categoryList","updateValueAndValidity","saveSubscription","notificationCategoryName","categoryName","notificationSubscriptionId","emailDLName","subscribedBy","routes","MsalGuard","NotificationsComponent","datePipe","notificationListDetails","fetchSubscriptionData","transform","subscribedDateTime","deleteNotification","deleteNotificationAfterConfirmation","createNotification","pathMatch","AppRoutingModule","RouterModule","useHash","DialogData","AboutComponent","onNoClick","MLService","getConfigParameter","name","version","getConfigParameters","getLocations","locationApi","CreateMLWorkspace","worksapceDetail","createMLWorkspace","saveModelMasterData","modelMasterData","saveModelMasterDataApi","getModelList","getModelListApi","getModelParameters","modelId","getModelParametersApi","getDataSources","flowsheetUri","getDataSourcesApi","getDataSourceParameters","dataSourceId","getDataSourceParametersApi","light","properties","dark","ThemeService","isDarkTheme","active","setDarkTheme","setActiveTheme","setLightTheme","theme","Object","keys","forEach","property","documentElement","style","setProperty","NavBarComponent","mlServie","themeService","countryList","Id","Name","Code","getReleaseDetails","countryCode","$","click","toggleClass","removeClass","addClass","getRefineriesList","callByRefineryNameNotMatch","refinerytMap","u","index","refineryName","callByRefineryName","logout","openAboutRelease","releaseDetails","selectFlag","toggleTheme","isCallFromUI","$localize","AppComponent","msalGuardConfig","msalBroadcastService","grphService","overageService","getScreenSize","screenWidth","innerWidth","isMobileResolution","initialize","msalSubject$","msg","eventType","EventType","takeUntil","_destroying$","concatMap","_this","checkoutAccount","login","authRequest","loginPopup","instance","setActiveAccount","account","getActiveAccount","getAllAccounts","accounts","userAccount","userName","idParts","userShortName","charAt","userEmail","username","initAppInsight","assignRole","appInsights","ApplicationInsights","instrumentationKey","enableAutoRouteTracking","loadAppInsights","setUserId","logPageView","measurements","trackPageView","uri","setAuthenticatedUserContext","context","rbacName","toggleCollapse","sidenavWidth","disableTooltip","showCross","isActive","label","MSAL_GUARD_CONFIG","XsrfInterceptor","xsrfTokenExtractor","intercept","req","xsrfToken","getToken","authorizedRequest","clone","withCredentials","handle","enValue","isIE","navigator","userAgent","MSALInstanceFactory","PublicClientApplication","auth","cache","storeAuthStateInCookie","MSALInterceptorConfigFactory","protectedResourceMap","Map","interactionType","InteractionType","AppModule","bootstrap","provide","APP_INITIALIZER","useValue","Promise","resolve","setTimeout","multi","HTTP_INTERCEPTORS","useClass","MsalInterceptor","MSAL_INSTANCE","useFactory","MSAL_INTERCEPTOR_CONFIG","MsalService","MsalBroadcastService","DatePipe","APP_BASE_HREF","imports","BrowserModule","HttpClientModule","FormsModule","ReactiveFormsModule","MatStepperModule","MatToolbarModule","MatIconModule","MatTabsModule","MatSidenavModule","MatMenuModule","MatFormFieldModule","MatSelectModule","MatListModule","MatTooltipModule","MatTableModule","MatDialogModule","MatInputModule","MatSortModule","MatPaginatorModule","MatRadioModule","MatAutocompleteModule","MatChipsModule","BrowserAnimationsModule","NgbModule","NgMultiSelectDropDownModule","TypeaheadModule","MatDatepickerModule","MatNativeDateModule","MatRippleModule","OwlDateTimeModule","OwlNativeDateTimeModule","MatCheckboxModule","DragDropModule","MatTableExporterModule","MatExpansionModule","providers","getBaseUrl","getElementsByTagName","deps","enableProdMode","__NgCli_bootstrap_1","bootstrapModule","catch","e","webpackContext","module"],"sourceRoot":"webpack:///","sources":["./src/app/models/component.model.ts","./src/app/common/alert/alert.component.html","./src/app/common/alert/alert.component.ts","./src/app/services/http.service.ts","./src/app/services/global.service.ts","./src/app/models/globals.model.ts","./src/app/services/sse-service.ts","./src/app/services/admin.service.ts","./src/app/services/refinery.service.ts","./src/app/view-page/component-page/component-page.component.html","./src/app/view-page/component-page/component-page.component.ts","./src/app/common/confirm-model/confirm-model.component.html","./src/app/common/confirm-model/confirm-model.component.ts","./src/app/models/filter/filter-request.model.ts","./src/app/common/common-constants.ts","./src/app/models/filter/filter-response.model.ts","./src/app/common/add-filter/add-filter.component.html","./src/app/common/add-filter/add-filter.component.ts","./src/app/component/component.component.html","./src/app/component/component.component.ts","./src/app/view-page/datasource-page/datasource-page.component.html","./src/app/view-page/datasource-page/datasource-page.component.ts","./src/app/datasource/datasource.component.html","./src/app/datasource/datasource.component.ts","./src/app/services/graph.service.ts","./src/app/overage/overage.component.ts","./src/app/services/overage.service.ts","./src/app/services/group-guard.service.ts","./src/app/keyvault/keyvault.component.html","./src/app/keyvault/keyvault.component.ts","./src/app/view-page/tenant-page/tenant-page.component.html","./src/app/view-page/tenant-page/tenant-page.component.ts","./src/app/tenant/tenant.component.html","./src/app/tenant/tenant.component.ts","./src/environments/environment.ts","./src/app/view-page/notification-page/notification-page.component.html","./src/app/view-page/notification-page/notification-page.component.ts","./src/app/notifications/notifications.component.html","./src/app/app-routing.module.ts","./src/app/notifications/notifications.component.ts","./src/app/about/about.component.ts","./src/app/about/about.component.html","./src/app/services/ml-service.ts","./src/app/theme/theme.module.ts","./src/app/services/theme.service.ts","./src/app/nav-bar/nav-bar.component.html","./src/app/nav-bar/nav-bar.component.ts","./src/app/app.component.html","./src/app/app.component.ts","./src/app/services/xsrf.interceptor.ts","./src/app/app.module.ts","./src/main.ts","./node_modules/moment/locale/ sync ^\\.\\/.*$"],"sourcesContent":["export class ComponentModel {\r\n componentName: string;\r\n componentId: number;\r\n tenantId: number;\r\n tenantName: string;\r\n componentDbConnStr: string;\r\n componentDbConnStrValue: string;\r\n componentDbOdbcConnStr: string;\r\n componentDbOdbcConnStrValue: string;\r\n createdBy: string;\r\n createdTime: string;\r\n lastModifiedBy: string;\r\n lastModifiedTime: string;\r\n masterComponentId: number;\r\n componentTargetConfigurations: ComponentTargetConfigurations[];\r\n}\r\n\r\nexport class ComponentTargetConfigurations {\r\n id: number;\r\n targetTypeId: number;\r\n tenantId: number;\r\n componentId: number;\r\n targetTableName: string;\r\n targetDbConnStr: string;\r\n targetDbConnStrValue: string;\r\n targetDbOdbcConnStr: string;\r\n targetDbOdbcConnStrValue: string;\r\n cosmosDbKey: string;\r\n cosmosDbKeyValue: string;\r\n cosmosDbApiUrl: string;\r\n cosmosDbApiUrlValue: string;\r\n cosmosDbName: string;\r\n}\r\n","
\r\n
\r\n \r\n
\r\n
\r\n {{data.title}}\r\n
\r\n
\r\n
\r\n
\"Success\"
\r\n
\r\n
\r\n
\"Failure\"
\r\n
\r\n
{{data.message}}
\r\n
\r\n
\r\n\r\n","import { Component, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'app-alert',\r\n templateUrl: './alert.component.html',\r\n styleUrls: ['./alert.component.css']\r\n})\r\nexport class AlertComponent {\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any\r\n ) {\r\n data.title = data.success ? \"Success\" : \"Failure\";\r\n };\r\n\r\n onCancelClick(): void {\r\n this.dialogRef.close();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders, HttpParams, HttpErrorResponse } from '@angular/common/http';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError } from 'rxjs/operators';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HttpService {\r\n private readonly header = { headers: new HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded' }) };\r\n constructor(private readonly http: HttpClient) { }\r\n\r\n public delete(url: string, httpParams: HttpParams, header: HttpHeaders): Observable {\r\n const httpOptions = {\r\n headers: header,\r\n params: httpParams\r\n };\r\n return this.http.delete(url, httpOptions)\r\n .pipe(catchError(err => this.handleError(err)));\r\n }\r\n\r\n public post(url: string, body: any, header: HttpHeaders): Observable {\r\n const httpOptions = {\r\n headers: header\r\n };\r\n return this.http.post(url, body, httpOptions)\r\n .pipe(catchError(err => this.handleError(err)));\r\n }\r\n\r\n public get(url: string, header: HttpHeaders): Observable {\r\n const httpOptions = {\r\n headers: header\r\n };\r\n return this.http.get(url, httpOptions)\r\n .pipe(catchError(err => this.handleError(err)));\r\n }\r\n\r\n public handleError(error: HttpErrorResponse) {\r\n switch (error.status) {\r\n default:\r\n return throwError(error);\r\n }\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { EventEmitter, Injectable, Output } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { FilterResponseModel } from '../models/filter/filter-response.model';\r\nimport { HttpService } from './../services/http.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class GlobalService {\r\n @Output() renderRibbon: EventEmitter = new EventEmitter();\r\n authCode: any;\r\n loggedInUser;\r\n subscription: string;\r\n environment: string;\r\n tagMovMsg;\r\n constructor(private readonly httpService: HttpService, public httpClient: HttpClient, public dialog: MatDialog) { }\r\n isAuthorize: boolean = false;\r\n isActivate: boolean = true;\r\n userDetails: any;\r\n firstTimeLoad: boolean = true;\r\n \r\n showAlert(model, data) {\r\n this.dialog.open(model, {\r\n width: '450px',\r\n panelClass: 'confirm-modalbox-dark',\r\n height: 'auto',\r\n data: data\r\n });\r\n }\r\n\r\n showAlertWithCallBack(model, data, methodRef: (thisRef: any, result?: any) => void, thisRef) {\r\n const dialogRef = this.dialog.open(model, {\r\n width: '450px',\r\n panelClass: 'confirm-modalbox-dark',\r\n height: 'auto',\r\n data: data\r\n });\r\n dialogRef.afterClosed().subscribe(result => {\r\n methodRef(thisRef);\r\n });\r\n }\r\n\r\n openModelWindow(methodRef: (thisRef: any, result?: any) => void, thisRef, modelComponent, widthOfWindow, panelClassName, dataToPass) {\r\n {\r\n const dialogRef = this.dialog.open(modelComponent, {\r\n width: widthOfWindow,\r\n panelClass: panelClassName,\r\n data: dataToPass\r\n });\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (result === true && methodRef != null) {\r\n methodRef(thisRef);\r\n }\r\n else if (result !== false && result !== undefined) {\r\n methodRef(thisRef, result);\r\n }\r\n });\r\n }\r\n }\r\n\r\n \r\n /**\r\n * Replaces display text for filter\r\n * @param tempText\r\n */\r\n replaceDisplayText(tempText: string) {\r\n if (tempText === 'tenantRefinery') {\r\n return 'Refinery';\r\n } else if (tempText === 'tenantName') {\r\n return 'Tenant';\r\n } else if (tempText === 'tenantSecurityGrp') {\r\n return 'Security Group';\r\n }else if (tempText === 'tenantId') {\r\n return 'Tenant Id';\r\n } else if (tempText === 'lastModifiedBy') {\r\n return 'Last Modified By';\r\n } else if (tempText === 'componentName') {\r\n return 'Component';\r\n } else if (tempText === 'datasourceName') {\r\n return 'Datasource';\r\n } else if (tempText === 'datasourceTypeName') {\r\n return 'Type';\r\n } else if (tempText === 'datasourceTableName') {\r\n return 'Datasource Table';\r\n } else if (tempText === 'masterDataTable') {\r\n return 'Master Data Table';\r\n } else if (tempText === 'categoryName') {\r\n return 'Notification Category';\r\n } else if (tempText === 'subscribedBy') {\r\n return 'Subscribed By';\r\n } else if (tempText === 'subscribedDateTime') {\r\n return 'Subscribed Date and Time';\r\n } \r\n }\r\n\r\n /**\r\n * Replace filter texts\r\n * @param tempText\r\n */\r\n replaceFilterText(tempText: string): string {\r\n if (tempText === 'Refinery') {\r\n return 'tenantRefinery';\r\n } else if (tempText === 'Tenant') {\r\n return 'tenantName';\r\n } else if (tempText === 'Version') {\r\n return 'version';\r\n } else if (tempText === 'Security Group') {\r\n return 'tenantSecurityGrp';\r\n } else if (tempText === 'Tenant Id') {\r\n return 'tenantId';\r\n } else if (tempText === 'Last Modified By') {\r\n return 'lastModifiedBy';\r\n } else if (tempText === 'Component') {\r\n return 'componentName';\r\n } else if (tempText === 'Datasource') {\r\n return 'datasourceName';\r\n } else if (tempText === 'Type') {\r\n return 'datasourceTypeName';\r\n } else if (tempText === 'Datasource Table') {\r\n return 'datasourceTableName';\r\n } else if (tempText === 'Master Data Table') {\r\n return 'masterDataTable';\r\n } else if (tempText === 'Notification Category') {\r\n return 'categoryName';\r\n } else if (tempText === 'Subscribed By') {\r\n return 'subscribedBy';\r\n } else if (tempText === 'Subscribed Date and Time') {\r\n return 'subscribedDateTime';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n /**\r\n * \r\n * @param filterResponse\r\n */\r\n conditionalDataFiltering(filterResponse: FilterResponseModel, data) {\r\n let temp;\r\n if (filterResponse.selectedFieldName !== 'version' && filterResponse.selectedFieldName !==\"tenantId\") {\r\n switch(filterResponse.selectedValue.length){\r\n case 1: {\r\n temp = data.filter(function (df) {\r\n return (df[filterResponse.selectedFieldName] === filterResponse.selectedValue[0]);\r\n });\r\n break;\r\n } \r\n case 2: {\r\n temp = data.filter(function (df) {\r\n return (df[filterResponse.selectedFieldName] === filterResponse.selectedValue[0]) || (df[filterResponse.selectedFieldName] === filterResponse.selectedValue[1]);\r\n });\r\n break;\r\n } \r\n case 3: {\r\n temp = data.filter(function (df) {\r\n return (df[filterResponse.selectedFieldName] === filterResponse.selectedValue[0]) || (df[filterResponse.selectedFieldName] === filterResponse.selectedValue[1])\r\n || (df[filterResponse.selectedFieldName] === filterResponse.selectedValue[2]);\r\n });\r\n break;\r\n } \r\n case 4: {\r\n temp = data.filter(function (df) {\r\n return (df[filterResponse.selectedFieldName] === filterResponse.selectedValue[0]) || (df[filterResponse.selectedFieldName] === filterResponse.selectedValue[1])\r\n || (df[filterResponse.selectedFieldName] === filterResponse.selectedValue[2]) || (df[filterResponse.selectedFieldName] === filterResponse.selectedValue[3]);\r\n });\r\n break;\r\n } \r\n case 5: {\r\n temp = data.filter(function (df) {\r\n return (df[filterResponse.selectedFieldName] === filterResponse.selectedValue[0]) || (df[filterResponse.selectedFieldName] === filterResponse.selectedValue[1])\r\n || (df[filterResponse.selectedFieldName] === filterResponse.selectedValue[2]) || (df[filterResponse.selectedFieldName] === filterResponse.selectedValue[3])\r\n || (df[filterResponse.selectedFieldName] === filterResponse.selectedValue[4]);\r\n });\r\n break;\r\n }\r\n default:{break;}\r\n }\r\n } else {\r\n switch(filterResponse.selectedCondition){\r\n case '==': {\r\n temp = data.filter((df) => df[filterResponse.selectedFieldName] === filterResponse.selectedValue[0]);\r\n break;\r\n }\r\n case '>=': {\r\n temp = data.filter((df) => df[filterResponse.selectedFieldName] >= parseInt(filterResponse.selectedValue[0], 10));\r\n break;\r\n } \r\n case '<=': {\r\n temp = data.filter((df) => df[filterResponse.selectedFieldName] <= parseInt(filterResponse.selectedValue[0], 10));\r\n break;\r\n }\r\n default:{break;}\r\n }\r\n }\r\n return temp;\r\n }\r\n\r\n /**\r\n * Checks if the given object is not undefined or null.\r\n * @param data string to be checked\r\n */\r\n isNotNullObject(data) {\r\n let response: boolean = false;\r\n if (data !== undefined && data != null) {\r\n response = true;\r\n }\r\n return response;\r\n }\r\n\r\n /**\r\n * Checks if the given string parameter is not undefined, null or empty.\r\n * @param data string to be checked\r\n */\r\n isNotNull(data: string) {\r\n let response: boolean = false;\r\n if (data !== undefined && data != null && data !== '') {\r\n response = true;\r\n }\r\n return response;\r\n }\r\n\r\n getAssetAppConfig() {\r\n let request = new XMLHttpRequest();\r\n request.open('GET', './assets/config/app-config.json', false);\r\n request.setRequestHeader('Cache-Control', 'max-age=0');\r\n request.send(null);\r\n\r\n if (request.status === 200) {\r\n let data = JSON.parse(request.responseText);\r\n return data;\r\n }\r\n }\r\n\r\n /**\r\n * Filters data based on input text\r\n * @param filterValue\r\n */\r\n applyFilter(filterValue: string, dataSource) {\r\n filterValue = filterValue.trim().toLowerCase(); // Remove whitespace and MatTableDataSource defaults to lowercase matches\r\n dataSource.filter = filterValue;\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class Globals {\r\n config: any = {\r\n platformAdminApi_client_resourceUri: \"\",\r\n platformAdminApi_client_resourceScope: \"\",\r\n graphApi_client_resourceUri: \"\",\r\n graphApi_client_resourceScope: \"\",\r\n modelListULR: '',\r\n deleteModelURL: '',\r\n assetUrl: '',\r\n registerModelURL: '',\r\n platformHubUrl: '',\r\n platformHomeUrl: ''\r\n };\r\n\r\n userName = '';\r\n name: string = '';\r\n userShortName: string;\r\n userEmail: string;\r\n rbacName: string;\r\n groups: any = [];\r\n\r\n subscription = '';\r\n releaseDetails: any;\r\n}\r\n","import { Injectable} from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class SseService {\r\n\r\n\r\n\r\n getEventSource(url: string): EventSource {\r\n return new EventSource(url);\r\n }\r\n\r\n}\r\n","import { Injectable, NgZone } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { HttpService } from './../services/http.service';\r\nimport { Globals } from '../models/globals.model';\r\nimport { SseService } from './sse-service';\r\nimport { Tenant } from '../models/tenant.model';\r\nimport { NotificationSubscription } from '../models/notification-subscription.model';\r\nimport { ComponentModel } from '../models/component.model';\r\nimport { Datasource } from '../models/datasource.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class adminService {\r\n\r\n apiUri: string;\r\n graphUri: string;\r\n\r\n tenantListApi = 'api/Tenant/GetTenantList?refineryId=';\r\n componentListApi = 'api/Component/GetComponentList?refineryId=';\r\n datasourceListApi = 'api/DataSource/GetDatasourceList?refineryId=';\r\n tenantUrl = 'api/tenant';\r\n masterComponentUrl = 'api/component/getMasterComponentList';\r\n componentUrl = 'api/component';\r\n dataSourceUrl = 'api/DataSource';\r\n dataSourceTypesUrl = 'api/datasource/getDatasourceTypes';\r\n resourceListApi = 'api/Tenant/GetResourceList';\r\n createKeyvaultApi = 'api/Tenant/CreateKeyVault?keyvaultName=';\r\n componentConfigurationApi = 'api/Component/GetComponentSubscription?tenantId=';\r\n getReourceGroupNameApi = \"api/Tenant/GetResourceGroupName?keyvaultName=\";\r\n getNotificationCategoryApi = \"api/Notification/GetNotificationCategory\";\r\n getReportSchedulerDetails = \"api/Notification/GetReportSchedulerDetails\";\r\n addNotificationSubscription = \"api/Notification/AddSubscription\";\r\n updateNotificationSubscription = \"api/Notification/UpdateSubscription\";\r\n getNotificationDetailsById = \"api/Notification/GetNotificationDetailsById?subscriptionId=\"; \r\n notificationListUrl = 'api/Notification/GetNotificationSubscription?refineryId=';\r\n notificationDeleteUrl = 'api/Notification/DeleteSubscription';\r\n\r\n constructor(private readonly httpService: HttpService, private readonly globals: Globals, private readonly http: HttpClient,\r\n private readonly _zone: NgZone, private readonly _sseService: SseService) {\r\n this.apiUri = this.globals.config.platformAdminApi_client_resourceUri;\r\n this.graphUri = this.globals.config.graphApi_client_resourceUri;\r\n }\r\n\r\n getTenantList(refinaryId) {\r\n return this.http.get(this.apiUri + this.tenantListApi + refinaryId);\r\n }\r\n\r\n getComponentList(refinaryId) {\r\n return this.http.get(this.apiUri + this.componentListApi + refinaryId);\r\n }\r\n\r\n getDatasourceList(refinaryId) {\r\n return this.http.get(this.apiUri + this.datasourceListApi + refinaryId);\r\n }\r\n\r\n getNotificationSubscriptionList(refinaryId) {\r\n return this.http.get(this.apiUri + this.notificationListUrl + refinaryId);\r\n }\r\n\r\n deleteNotificationSubscription(id: number) {\r\n const params = new HttpParams().set('subscriptionId', id.toString());\r\n return this.http.delete(this.apiUri + this.notificationDeleteUrl, { params: params });\r\n }\r\n\r\n saveTenant(tenantData: Tenant, displayMode: string) {\r\n if (displayMode == 'add') {\r\n return this.http.post(this.apiUri + this.tenantUrl, tenantData);\r\n } else {\r\n return this.http.put(this.apiUri + this.tenantUrl, tenantData);\r\n }\r\n }\r\n\r\n deleteTenant(id, keyVaultName, resourceGroup, deleteKv) {\r\n const params = new HttpParams().set('tenantId', id.toString())\r\n .set('keyVaultName', keyVaultName)\r\n .set('removeKv', deleteKv)\r\n .set('resourceGroup', resourceGroup);\r\n\r\n return this.http.delete(this.apiUri + this.tenantUrl, { params: params });\r\n }\r\n GetResourceGroup(keyvaultName) {\r\n return this.http.get(this.apiUri + this.getReourceGroupNameApi + keyvaultName);\r\n \r\n }\r\n fetchMasterComponentList() {\r\n return this.http.get(this.apiUri + this.masterComponentUrl);\r\n }\r\n\r\n saveComponent(componentData: ComponentModel, displayMode: string) {\r\n if (displayMode == 'add') {\r\n return this.http.post(this.apiUri + this.componentUrl, componentData);\r\n } else {\r\n return this.http.put(this.apiUri + this.componentUrl, componentData);\r\n }\r\n }\r\n\r\n deleteComponent(id: number) {\r\n const params = new HttpParams().set('componentId', id.toString());\r\n return this.http.delete(this.apiUri + this.componentUrl, { params: params });\r\n }\r\n\r\n getResourceList() {\r\n return this.http.get(this.apiUri + this.resourceListApi);\r\n }\r\n\r\n createKeyvault(keyvaultName: string, arrObjectIds: string[]) {\r\n return this.http.post(this.apiUri + this.createKeyvaultApi + keyvaultName, arrObjectIds);\r\n }\r\n\r\n saveDatasource(datasourceModel: Datasource, displayMode: string) {\r\n if (displayMode == 'add') {\r\n return this.http.post(this.apiUri + this.dataSourceUrl, datasourceModel);\r\n } else {\r\n return this.http.put(this.apiUri + this.dataSourceUrl, datasourceModel);\r\n }\r\n }\r\n\r\n deleteDatasource(id: number) {\r\n const params = new HttpParams().set('datasourceId', id.toString());\r\n return this.http.delete(this.apiUri + this.dataSourceUrl, { params: params });\r\n }\r\n\r\n getDataSourceTypesList() {\r\n return this.http.get(this.apiUri + this.dataSourceTypesUrl);\r\n }\r\n\r\n redirectTo(url) {\r\n window.location.href = url;\r\n }\r\n\r\n getComponentSubscription(tenantId, masterComponentId) {\r\n return this.http.get(this.apiUri + this.componentConfigurationApi + tenantId + \"&masterComponentId=\" + masterComponentId);\r\n }\r\n\r\n getNotificationById(subscriptionId: any) {\r\n return this.http.get(this.apiUri + this.getNotificationDetailsById + subscriptionId);\r\n }\r\n\r\n getReportScheduler() {\r\n return this.http.get(this.apiUri + this.getReportSchedulerDetails);\r\n }\r\n\r\n getNotificationCategory() {\r\n return this.http.get(this.apiUri + this.getNotificationCategoryApi);\r\n }\r\n\r\n saveNotificationSubscription(notificationData: NotificationSubscription, displayMode: string) {\r\n if (displayMode == 'add') {\r\n return this.http.post(this.apiUri + this.addNotificationSubscription, notificationData);\r\n } else {\r\n return this.http.put(this.apiUri + this.updateNotificationSubscription, notificationData);\r\n }\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { Globals } from '../models/globals.model';\r\nimport { HttpService } from './http.service';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Refinery } from '../models/refinery.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class RefineryService {\r\n public refineryList$ = new Subject();\r\n public refinerySelected = new Subject();\r\n public currentRefinery: Refinery;\r\n apiUri: string;\r\n graphUri: string;\r\n constructor(private readonly http: HttpClient, private readonly httpService: HttpService, private readonly globals: Globals,\r\n ) {\r\n this.apiUri = this.globals.config.platformAdminApi_client_resourceUri;\r\n this.graphUri = this.globals.config.graphApi_client_resourceUri;\r\n }\r\n\r\n /**\r\n * calls api for getting list of tenants and exports data to other\r\n * components using subject \r\n */\r\n getRefineryListFromServer() {\r\n this.httpService.get(this.apiUri + 'api/Refinery', null).subscribe((data: Refinery[]) => {\r\n this.refineryList$.next(data);\r\n }, (err) => {\r\n console.log(err);\r\n });\r\n }\r\n GetToken() {\r\n return this.http.get(this.apiUri + 'api/Tenant/GetToken');\r\n }\r\n /**\r\n * @returns tenantlist as an observable\r\n */\r\n getRefineries() {\r\n return this.refineryList$.asObservable();\r\n }\r\n\r\n /**\r\n * sets current refinery\r\n * @param refinery current refinery to be set\r\n */\r\n setCurrentRefinery(refinery) {\r\n this.currentRefinery = refinery;\r\n }\r\n\r\n /**\r\n * @returns current refinery\r\n */\r\n getCurrentRefinery() {\r\n return this.currentRefinery;\r\n }\r\n}\r\n","
\r\n
\r\n \r\n
\r\n
\r\n Create Component\r\n View Component\r\n Edit Component\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n Component Target Configuration\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n","import { Inject, Component, OnInit} from '@angular/core';\r\nimport { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { ComponentModel, ComponentTargetConfigurations } from '../../models/component.model';\r\nimport { Tenant } from '../../models/tenant.model';\r\nimport { adminService } from '../../services/admin.service';\r\nimport { GlobalService } from '../../services/global.service';\r\nimport { RefineryService } from '../../services/refinery.service';\r\nimport * as moment from 'moment';\r\nimport { AlertComponent } from '../../common/alert/alert.component';\r\n\r\n@Component({\r\n selector: 'app-component-page',\r\n templateUrl: './component-page.component.html',\r\n styleUrls: ['./component-page.component.css']\r\n})\r\nexport class ComponentPageComponent implements OnInit {\r\n\r\n isLoading = false;\r\n masterComponentList;\r\n tenantList: Tenant[];\r\n hideCheckBox = false;\r\n isDbCreationAllowed = false;\r\n dataSourceTypesList;\r\n\r\n public componentDetailForm = new UntypedFormGroup({\r\n componentId: new UntypedFormControl(),\r\n masterComponentId: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n tenantId: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n componentDbConnStr: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n componentDbConnStrValue: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n componentDbOdbcConnStr: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n componentDbOdbcConnStrValue: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n componentTargetConfiguration: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n targetTypeId: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n targetTableName: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n targetDbConnStr: new UntypedFormControl({ value: '', disabled: false }),\r\n targetDbOdbcConnStr: new UntypedFormControl({ value: '', disabled: false }),\r\n targetDbConnStrValue: new UntypedFormControl({ value: '', disabled: false }),\r\n targetDbOdbcConnStrValue: new UntypedFormControl({ value: '', disabled: false }),\r\n cosmosDbKey: new UntypedFormControl({ value: '', disabled: false }),\r\n cosmosDbKeyValue: new UntypedFormControl({ value: '', disabled: false }),\r\n cosmosDbApiUrl: new UntypedFormControl({ value: '', disabled: false }),\r\n cosmosDbApiUrlValue: new UntypedFormControl({ value: '', disabled: false }),\r\n cosmosDbName: new UntypedFormControl({ value: '', disabled: false })\r\n });\r\n\r\n constructor(public dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any, public globalService: GlobalService,\r\n private readonly adminservice: adminService, private readonly refineryService: RefineryService) { }\r\n\r\n ngOnInit(): void {\r\n this.isLoading = true;\r\n this.loadMasterComponentData();\r\n this.loadComponentDataPage();\r\n this.getDataSourceTypes();\r\n }\r\n\r\n changeComponent(event) {\r\n let dbCreationAllowed = event.target.selectedOptions[0].text\r\n this.isLoading = true;\r\n const tenantId = this.componentDetailForm.controls['tenantId'].value;\r\n const masterComponentId = this.componentDetailForm.controls['masterComponentId'].value;\r\n\r\n this.adminservice.getComponentSubscription(tenantId, masterComponentId).subscribe((data: any) => {\r\n this.isLoading = false;\r\n if (data == null) {\r\n this.isDbCreationAllowed = event.target.value ? true : false;\r\n this.isDbCreationAllowed = dbCreationAllowed === 'platformhub' ? false : this.isDbCreationAllowed;\r\n const selectedComponentId = masterComponentId;\r\n const componentDbConnStrValue: string = this.masterComponentList.\r\n find(component => component.componentId === selectedComponentId).componentDbConnStr;\r\n const componentDbOdbcConnStrValue: string = this.masterComponentList.\r\n find(component => component.componentId === selectedComponentId).componentDbOdbcConnStr;\r\n const componentDbConnStrSecretName: string = this.masterComponentList.\r\n find(component => component.componentId === selectedComponentId).componentDbConnStrSecretName;\r\n const componentDbOdbcConnStrSecretName: string = this.masterComponentList.\r\n find(component => component.componentId === selectedComponentId).componentDbOdbcConnStrSecretName;\r\n this.componentDetailForm.controls['componentDbConnStrValue'].setValue(componentDbConnStrValue);\r\n this.componentDetailForm.controls['componentDbOdbcConnStrValue'].setValue(componentDbOdbcConnStrValue);\r\n this.componentDetailForm.controls['componentDbConnStr'].setValue(componentDbConnStrSecretName);\r\n this.componentDetailForm.controls['componentDbOdbcConnStr'].setValue(componentDbOdbcConnStrSecretName);\r\n document.addEventListener(\"DOMContentLoaded\", function (event) {\r\n (document.getElementById(\"createBtn\")).disabled = false;\r\n });\r\n }\r\n else {\r\n this.componentDetailForm.controls['componentDbConnStrValue'].setValue('');\r\n this.componentDetailForm.controls['componentDbOdbcConnStrValue'].setValue('');\r\n this.componentDetailForm.controls['componentDbConnStr'].setValue('');\r\n this.componentDetailForm.controls['componentDbOdbcConnStr'].setValue('');\r\n document.addEventListener(\"DOMContentLoaded\", function(event) {\r\n (document.getElementById(\"createBtn\")).disabled = true;\r\n });\r\n \r\n this.globalService.showAlert(AlertComponent, { success: false, message: \"This component is already subscribed.\" });\r\n }\r\n });\r\n\r\n }\r\n\r\n /**Get list of datasource types*/\r\n getDataSourceTypes() {\r\n this.adminservice.getDataSourceTypesList().subscribe((data: any): void => {\r\n this.dataSourceTypesList = data;\r\n this.isLoading = false;\r\n }, (error: Error) => {\r\n console.log('Error while fetching data source types list', error.message);\r\n });\r\n }\r\n\r\n loadComponentDataPage() {\r\n let componentTargetConfigurations = false;\r\n if (this.data.displayType !== 'add' && this.globalService.isNotNullObject(this.data.data)) {\r\n let disableMode = false;\r\n if (this.data.displayType === 'view') {\r\n disableMode = true;\r\n }\r\n if (this.data.displayType === 'edit') {\r\n this.isDbCreationAllowed = this.data.data.masterComponentId === 9 ? false : true;\r\n }\r\n if (this.globalService.isNotNullObject(this.data.data.componentTargetConfigurations)\r\n && this.data.data.componentTargetConfigurations.length !== 0) {\r\n componentTargetConfigurations = true;\r\n this.componentDetailForm = new UntypedFormGroup({\r\n componentId: new UntypedFormControl({ value: this.data.data.componentId, disabled: disableMode }, Validators.required),\r\n masterComponentId: new UntypedFormControl({ value: this.data.data.masterComponentId, disabled: disableMode }, Validators.required),\r\n tenantId: new UntypedFormControl({ value: this.data.data.tenantId, disabled: disableMode }, Validators.required),\r\n componentDbConnStr: new UntypedFormControl({ value: this.data.data.componentDbConnStr, disabled: disableMode }, Validators.required),\r\n componentDbConnStrValue: new UntypedFormControl({ value: this.data.data.componentDbConnStrValue, disabled: disableMode }, Validators.required),\r\n componentDbOdbcConnStr: new UntypedFormControl({ value: this.data.data.componentDbOdbcConnStr, disabled: disableMode }, Validators.required),\r\n cosmosDbKey: new UntypedFormControl({\r\n value: this.data.data.componentTargetConfigurations[0].cosmosDbKey, disabled: disableMode\r\n }),\r\n cosmosDbKeyValue: new UntypedFormControl({\r\n value: this.data.data.componentTargetConfigurations[0].cosmosDbKeyValue, disabled: disableMode\r\n }),\r\n cosmosDbApiUrl: new UntypedFormControl({\r\n value: this.data.data.componentTargetConfigurations[0].cosmosDbApiUrl, disabled: disableMode\r\n }),\r\n cosmosDbApiUrlValue: new UntypedFormControl({\r\n value: this.data.data.componentTargetConfigurations[0].cosmosDbApiUrlValue, disabled: disableMode\r\n }),\r\n cosmosDbName: new UntypedFormControl({\r\n value: this.data.data.componentTargetConfigurations[0].cosmosDbName, disabled: disableMode\r\n }),\r\n componentDbOdbcConnStrValue: new UntypedFormControl({ value: this.data.data.componentDbOdbcConnStrValue, disabled: disableMode }, Validators.required),\r\n componentTargetConfiguration: new UntypedFormControl({ value: componentTargetConfigurations, disabled: disableMode }, Validators.required),\r\n targetTypeId: new UntypedFormControl({\r\n value: this.data.data.componentTargetConfigurations[0].targetTypeId,\r\n disabled: disableMode\r\n }, Validators.required),\r\n targetTableName: new UntypedFormControl({\r\n value: this.data.data.componentTargetConfigurations[0].targetTableName,\r\n disabled: disableMode\r\n }, Validators.required),\r\n targetDbConnStr: new UntypedFormControl({\r\n value: this.data.data.componentTargetConfigurations[0].targetDbConnStr, disabled: disableMode\r\n }),\r\n targetDbOdbcConnStr: new UntypedFormControl({\r\n value: this.data.data.componentTargetConfigurations[0].targetDbOdbcConnStr, disabled: disableMode\r\n }),\r\n targetDbConnStrValue: new UntypedFormControl({\r\n value: this.data.data.componentTargetConfigurations[0].targetDbConnStrValue, disabled: disableMode\r\n }),\r\n targetDbOdbcConnStrValue: new UntypedFormControl({\r\n value: this.data.data.componentTargetConfigurations[0].targetDbOdbcConnStrValue, disabled: disableMode\r\n })\r\n });\r\n } else {\r\n this.componentDetailForm = new UntypedFormGroup({\r\n componentId: new UntypedFormControl({ value: this.data.data.componentId, disabled: disableMode }, Validators.required),\r\n masterComponentId: new UntypedFormControl({ value: this.data.data.masterComponentId, disabled: disableMode }, Validators.required),\r\n tenantId: new UntypedFormControl({ value: this.data.data.tenantId, disabled: disableMode }, Validators.required),\r\n componentDbConnStr: new UntypedFormControl({ value: this.data.data.componentDbConnStr, disabled: disableMode }, Validators.required),\r\n componentDbConnStrValue: new UntypedFormControl({ value: this.data.data.componentDbConnStrValue, disabled: disableMode }, Validators.required),\r\n componentDbOdbcConnStr: new UntypedFormControl({ value: this.data.data.componentDbOdbcConnStr, disabled: disableMode }, Validators.required),\r\n cosmosDbKey: new UntypedFormControl({ value: '', disabled: disableMode }),\r\n cosmosDbKeyValue: new UntypedFormControl({ value: '', disabled: disableMode }),\r\n cosmosDbApiUrl: new UntypedFormControl({ value: '', disabled: disableMode }),\r\n cosmosDbApiUrlValue: new UntypedFormControl({ value: '', disabled: disableMode }),\r\n cosmosDbName: new UntypedFormControl({ value: '', disabled: disableMode }),\r\n componentDbOdbcConnStrValue: new UntypedFormControl({\r\n value: this.data.data.componentDbOdbcConnStrValue,\r\n disabled: disableMode\r\n }, Validators.required),\r\n componentTargetConfiguration: new UntypedFormControl({ value: componentTargetConfigurations, disabled: disableMode }, Validators.required),\r\n targetTypeId: new UntypedFormControl({ value: '', disabled: disableMode }, Validators.required),\r\n targetTableName: new UntypedFormControl({ value: '', disabled: disableMode }, Validators.required),\r\n targetDbConnStr: new UntypedFormControl({ value: '', disabled: disableMode }),\r\n targetDbOdbcConnStr: new UntypedFormControl({ value: '', disabled: disableMode }),\r\n targetDbConnStrValue: new UntypedFormControl({ value: '', disabled: disableMode }),\r\n targetDbOdbcConnStrValue: new UntypedFormControl({ value: '', disabled: disableMode })\r\n });\r\n }\r\n this.isLoading = false;\r\n } else {\r\n this.isLoading = false;\r\n }\r\n }\r\n\r\n /**Load master component data*/\r\n loadMasterComponentData() {\r\n this.adminservice.fetchMasterComponentList().subscribe((data: any): void => {\r\n this.masterComponentList = data;\r\n this.loadTenantList();\r\n }, (error: Error) => {\r\n console.log('Error while fetching master component list', error.message);\r\n });\r\n }\r\n\r\n /**Load Tenant List data for selected refinery*/\r\n loadTenantList() {\r\n this.adminservice.getTenantList(this.refineryService.currentRefinery.refineryId).subscribe((data: any): void => {\r\n this.tenantList = data;\r\n this.isLoading = false;\r\n }, (error: Error) => {\r\n console.log('Error while fetching tenant list', error.message);\r\n });\r\n }\r\n\r\n /**Check if target data shouldbe displayed */\r\n displayTargetData() {\r\n let check = false;\r\n if (this.data.displayType === 'view' && this.data?.data.componentTargetConfigurations.length !== 0) {\r\n check = true;\r\n } else if (this.data.displayType === 'view' && this.data.data.componentTargetConfigurations.length <= 0) {\r\n check = this.componentDetailForm.get('componentTargetConfiguration').value;\r\n this.hideCheckBox = true;\r\n } else {\r\n check = this.componentDetailForm.get('componentTargetConfiguration').value;\r\n }\r\n return check;\r\n }\r\n\r\n saveComponent() { \r\n console.log(this.componentDetailForm);\r\n const componentData: ComponentModel = this.componentDetailForm.value;\r\n if (this.globalService.isNotNullObject(componentData.masterComponentId)) {\r\n componentData.componentName = this.masterComponentList.find((item: any) =>\r\n item.componentId === componentData.masterComponentId).componentName;\r\n componentData.tenantName = this.tenantList.find((item: any) => item.tenantId === componentData.tenantId).tenantName;\r\n }\r\n if (this.data.displayType === 'add') {\r\n componentData.componentId = 0;\r\n componentData.createdBy = this.globalService.loggedInUser;\r\n componentData.createdTime = moment.utc(new Date()).local().format('YYYY-MM-DDTHH:mm:ss');\r\n }\r\n componentData.lastModifiedBy = this.globalService.loggedInUser;\r\n componentData.lastModifiedTime = moment.utc(new Date()).local().format('YYYY-MM-DDTHH:mm:ss');\r\n if (this.componentDetailForm.get('componentTargetConfiguration').value) {\r\n const componentTargetConfigurationsData = new ComponentTargetConfigurations();\r\n componentTargetConfigurationsData.id = 0;\r\n componentTargetConfigurationsData.targetTypeId = this.componentDetailForm.get('targetTypeId').value;\r\n componentTargetConfigurationsData.tenantId = this.componentDetailForm.get('tenantId').value;\r\n componentTargetConfigurationsData.componentId = componentData.componentId;\r\n componentTargetConfigurationsData.targetTableName = this.componentDetailForm.get('targetTableName').value;\r\n componentTargetConfigurationsData.targetDbConnStr = this.componentDetailForm.get('targetDbConnStr').value;\r\n componentTargetConfigurationsData.targetDbConnStrValue = this.componentDetailForm.get('targetDbConnStrValue').value;\r\n componentTargetConfigurationsData.targetDbOdbcConnStr = this.componentDetailForm.get('targetDbOdbcConnStr').value;\r\n componentTargetConfigurationsData.targetDbOdbcConnStrValue = this.componentDetailForm.get('targetDbOdbcConnStrValue').value;\r\n componentTargetConfigurationsData.cosmosDbKey = this.componentDetailForm.get('cosmosDbKey').value;\r\n componentTargetConfigurationsData.cosmosDbApiUrl = this.componentDetailForm.get('cosmosDbApiUrl').value;\r\n componentTargetConfigurationsData.cosmosDbApiUrlValue = this.componentDetailForm.get('cosmosDbApiUrlValue').value;\r\n componentTargetConfigurationsData.cosmosDbKeyValue = this.componentDetailForm.get('cosmosDbKeyValue').value;\r\n componentTargetConfigurationsData.cosmosDbName = this.componentDetailForm.get('cosmosDbName').value;\r\n componentData.componentTargetConfigurations = [componentTargetConfigurationsData];\r\n }\r\n this.adminservice.saveComponent(componentData, this.data.displayType).subscribe((data: any): void => {\r\n this.globalService.showAlert(AlertComponent, { success: true, message: 'Component ' + componentData.componentName + ' saved successfully.' });\r\n this.onCancelClick(true);\r\n }, (error: Error) => {\r\n this.isLoading = false;\r\n this.globalService.showAlert(AlertComponent, { success: false, message: 'Component ' + componentData.componentName + ' could not be saved.' });\r\n });\r\n }\r\n\r\n\r\n /**\r\n * sets connection strings of created azure sql db to appropriate fields\r\n * @param thisref context reference\r\n * @param result result of creation\r\n */\r\n setConnStrings(thisref, result) {\r\n const selectedComponentId = thisref.componentDetailForm.controls['masterComponentId'].value;\r\n let componentDbConnStrValue: string = thisref.masterComponentList.\r\n find(component => component.componentId === selectedComponentId).componentDbConnStr;\r\n let componentDbOdbcConnStrValue: string = thisref.masterComponentList.\r\n find(component => component.componentId === selectedComponentId).componentDbOdbcConnStr;\r\n componentDbConnStrValue = componentDbConnStrValue.replace(/{{([^{}]+)}}/g, result);\r\n componentDbOdbcConnStrValue = componentDbOdbcConnStrValue.replace(/{{([^{}]+)}}/g, result);\r\n thisref.componentDetailForm.controls['componentDbConnStrValue'].setValue(componentDbConnStrValue);\r\n thisref.componentDetailForm.controls['componentDbOdbcConnStrValue'].setValue(componentDbOdbcConnStrValue);\r\n }\r\n\r\n disableSave() {\r\n\r\n const datasourceTypeName = this.componentDetailForm.get('targetTypeId').value;\r\n\r\n if (datasourceTypeName == '1') {\r\n\r\n this.componentDetailForm.get('cosmosDbKey').clearValidators();\r\n this.componentDetailForm.get('cosmosDbKeyValue').clearValidators();\r\n this.componentDetailForm.get('cosmosDbApiUrl').clearValidators();\r\n this.componentDetailForm.get('cosmosDbApiUrlValue').clearValidators();\r\n this.componentDetailForm.get('cosmosDbName').clearValidators();\r\n this.componentDetailForm.get('targetDbConnStr').setValidators([Validators.required]);\r\n this.componentDetailForm.get('targetDbConnStrValue').setValidators([Validators.required]);\r\n this.componentDetailForm.get('targetDbOdbcConnStr').setValidators([Validators.required]);\r\n this.componentDetailForm.get('targetDbOdbcConnStrValue').setValidators([Validators.required]);\r\n }\r\n else if (datasourceTypeName == '2') {\r\n this.componentDetailForm.get('targetDbConnStr').clearValidators();\r\n this.componentDetailForm.get('targetDbConnStrValue').clearValidators();\r\n this.componentDetailForm.get('targetDbOdbcConnStr').clearValidators();\r\n this.componentDetailForm.get('targetDbOdbcConnStrValue').clearValidators();\r\n this.componentDetailForm.get('cosmosDbKey').setValidators([Validators.required]);\r\n this.componentDetailForm.get('cosmosDbKeyValue').setValidators([Validators.required]);\r\n this.componentDetailForm.get('cosmosDbApiUrl').setValidators([Validators.required]);\r\n this.componentDetailForm.get('cosmosDbApiUrlValue').setValidators([Validators.required]);\r\n this.componentDetailForm.get('cosmosDbName').setValidators([Validators.required]);\r\n }\r\n let check: boolean;\r\n if (this.componentDetailForm.get('componentTargetConfiguration').value) {\r\n check = !this.componentDetailForm.valid;\r\n } else {\r\n check = false;\r\n }\r\n return check;\r\n }\r\n\r\n /**Cancels the pop-up */\r\n onCancelClick(value: boolean): void {\r\n this.dialogRef.close(value);\r\n }\r\n\r\n}\r\n","
\r\n
\r\n \r\n
\r\n
\r\n {{data.title}}?\r\n \r\n
\r\n
\r\n
\r\n
\"Delete\"
\r\n
\r\n
\r\n
Caution: This process cannot be undone.\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\"Confirm\"
\r\n
\r\n {{data.message}}\r\n
Click \"OK\" to continue.\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n","import { Component, Inject, NgModule } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { FormsModule } from '@angular/forms';\r\n@Component({\r\n selector: 'app-confirm-model',\r\n templateUrl: './confirm-model.component.html',\r\n styleUrls: ['./confirm-model.component.css']\r\n})\r\nexport class ConfirmModelComponent {\r\n chkDelKv: any;\r\n isChecked: any;\r\n constructor(public dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any) {\r\n this.chkDelKv = localStorage.getItem(\"delKV\");\r\n if (this.chkDelKv == \"true\") {\r\n this.isChecked = true;\r\n }\r\n else {\r\n this.isChecked = false;\r\n\r\n }\r\n }\r\n\r\n KvSelection(value): void {\r\n if (value == true) {\r\n localStorage.setItem(\"delKV\", \"false\");\r\n }\r\n else {\r\n localStorage.setItem(\"delKV\", \"true\");\r\n }\r\n \r\n }\r\n\r\n onCancelClick(): void {\r\n this.dialogRef.close(false);\r\n }\r\n\r\n intendedAction() {\r\n this.dialogRef.close(true);\r\n }\r\n\r\n}\r\n","export class FilterModel {\r\n fieldName: string;\r\n fieldType: string;\r\n values: string[];\r\n}\r\n","export class CommonConstants {\r\n\r\n public conditionTypeText: string[] = [\"==\"];\r\n public conditionTypeValues: string[] = [\"==\", \">=\", \"<=\"];\r\n\r\n}\r\n\r\nexport enum FilterFieldTypes {\r\n text = \"text\",\r\n values = \"values\"\r\n}\r\n","export class FilterResponseModel {\r\n selectedFieldName: string;\r\n selectedCondition: string;\r\n selectedValue: string[];\r\n}\r\n","
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\r\nimport { FilterModel } from '../../models/filter/filter-request.model';\r\nimport { FilterResponseModel } from '../../models/filter/filter-response.model';\r\nimport { GlobalService } from '../../services/global.service';\r\nimport { CommonConstants, FilterFieldTypes } from '../common-constants';\r\n\r\n@Component({\r\n selector: 'app-add-filter',\r\n templateUrl: './add-filter.component.html',\r\n styleUrls: ['./add-filter.component.css']\r\n})\r\nexport class AddFilterComponent implements OnInit {\r\n\r\n @Input() filterList: FilterModel[];\r\n @Input() selectedFilters: FilterResponseModel[];\r\n @Output() filterResponse = new EventEmitter();\r\n\r\n public conditionList: string[];\r\n public valuesList: string[];\r\n public constants: CommonConstants;\r\n\r\n public addFilterForm: UntypedFormGroup;\r\n /** control for the MatSelect filter keyword multi-selection */\r\n\r\n constructor(public fb: UntypedFormBuilder, private readonly globalService: GlobalService) { }\r\n\r\n ngOnInit(): void {\r\n this.constants = new CommonConstants();\r\n this.addFilterForm = this.fb.group({\r\n filterName: ['', Validators.required],\r\n condition: ['', Validators.required],\r\n value: ['', Validators.required]\r\n });\r\n }\r\n\r\n /** Triggered when field is selected*/\r\n onFieldSelected() {\r\n this.valuesList = [];\r\n let selectedField = this.addFilterForm.get('filterName').value;\r\n this.addFilterForm.reset();\r\n this.addFilterForm.get('filterName').setValue(selectedField);\r\n let tempType = this.filterList.find(o => o.fieldName === this.addFilterForm.get('filterName').value.fieldName);\r\n switch (tempType.fieldType) {\r\n case FilterFieldTypes.text:\r\n this.conditionList = this.constants.conditionTypeText;\r\n break;\r\n case FilterFieldTypes.values:\r\n this.conditionList = this.constants.conditionTypeValues;\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Receive user input and send to search method\r\n * @param value\r\n */\r\n\r\n /**When condition is selected */\r\n onConditionSelected() {\r\n let tempType = this.filterList.find(o => o.fieldName === this.addFilterForm.get('filterName').value.fieldName);\r\n if (tempType.fieldType == \"text\") {\r\n this.valuesList = [...tempType.values].sort(function (a, b) {\r\n return a.toLowerCase().localeCompare(b.toLowerCase());\r\n });\r\n } else if (tempType.fieldType == \"values\") {\r\n this.valuesList = [...tempType.values].sort((a, b) => parseInt(a, 10) - parseInt(b, 10));\r\n this.addFilterForm.get('value').setValue([this.valuesList[0]]);\r\n }\r\n }\r\n\r\n /**\r\n * Hides field name from dropdown\r\n * @param fieldName\r\n */\r\n hideFieldName(fieldName: string) {\r\n return (fieldName !== \"version\" && this.selectedFilters?.find(t => t.selectedFieldName == fieldName));\r\n }\r\n\r\n /**\r\n * Disables value\r\n * @param element\r\n */\r\n disableValues(element: string) {\r\n let check: boolean = (!this.addFilterForm.get('value').value?.includes(element) && this.addFilterForm.get('value').value?.length >= 5);\r\n return check;\r\n }\r\n\r\n /**Adding a new filter */\r\n submitFilter() {\r\n let response: FilterResponseModel = new FilterResponseModel();\r\n response.selectedFieldName = this.globalService.replaceFilterText(this.addFilterForm.get('filterName').value.fieldName);\r\n response.selectedCondition = this.addFilterForm.get('condition').value;\r\n response.selectedValue = this.addFilterForm.get('value').value;\r\n this.filterResponse.emit({ filterResponse: response });\r\n } \r\n}\r\n","
\r\n
\r\n
\r\n Component\r\n \r\n
\r\n
\r\n
\r\n \r\n search\r\n
\r\n
\r\n \r\n \r\n {{globalService.replaceDisplayText(element.selectedFieldName) + \" \" + element.selectedCondition + \" \" + element.selectedValue}}\r\n cancel \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n Component \r\n {{element.componentName}} \r\n \r\n \r\n Tenant \r\n {{element.tenantName}} \r\n \r\n \r\n Last Modified By \r\n {{element.lastModifiedBy}} \r\n \r\n \r\n Action\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n There are no records to display.\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { Router } from '@angular/router';\r\nimport { Subject } from 'rxjs';\r\nimport { Globals } from '../models/globals.model';\r\nimport { Refinery } from '../models/refinery.model';\r\nimport { adminService } from '../services/admin.service';\r\nimport { GlobalService } from '../services/global.service';\r\nimport { RefineryService } from '../services/refinery.service';\r\nimport { ComponentModel } from '../models/component.model';\r\nimport { ComponentPageComponent } from '../view-page/component-page/component-page.component';\r\nimport { ConfirmModelComponent } from '../common/confirm-model/confirm-model.component';\r\nimport { AlertComponent } from '../common/alert/alert.component';\r\nimport { FilterResponseModel } from '../models/filter/filter-response.model';\r\nimport { FilterModel } from '../models/filter/filter-request.model';\r\nimport { NgbPopover } from '@ng-bootstrap/ng-bootstrap';\r\nimport { FilterFieldTypes } from '../common/common-constants';\r\nimport { ActivatedRoute, Params } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-component',\r\n templateUrl: './component.component.html',\r\n styleUrls: ['./component.component.scss']\r\n})\r\nexport class ComponentComponent implements OnInit {\r\n isLoading = false;\r\n componentListDetails: any;\r\n refineryDetails: Refinery;\r\n selectedComponent: ComponentModel;\r\n @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n\r\n filterList: FilterModel[] = [];\r\n selectedFilters: FilterResponseModel[] = [];\r\n masterData: any;\r\n @ViewChild('popOver') public popover: NgbPopover;\r\n searchText = '';\r\n displayedColumns: string[] = ['componentName', 'tenantName', 'lastModifiedBy', 'action'];\r\n destroyed = new Subject();\r\n component: { refineryId: number; refineryName: string; refineryShortName: string; };\r\n\r\n constructor(\r\n public _router: Router,\r\n public globals: Globals,\r\n public globalService: GlobalService,\r\n public httpClientObj: HttpClient,\r\n private readonly adminService: adminService,\r\n private readonly refinaryService: RefineryService,\r\n public route: ActivatedRoute,\r\n public dialog: MatDialog) {\r\n const emptyList: any[] = [];\r\n this.componentListDetails = new MatTableDataSource(emptyList);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.isLoading = true;\r\n this.getComponentList(this);\r\n this.getSearchText();\r\n }\r\n\r\n getSearchText() {\r\n this.route.params.subscribe((params: Params) => {\r\n if (params.searchText !== undefined) {\r\n this.searchText = params.searchText;\r\n }\r\n });\r\n }\r\n\r\n setSearchText(filterValue: string) {\r\n filterValue = filterValue.trim().toLowerCase();\r\n this.searchText = filterValue;\r\n }\r\n\r\n getComponentList(thisRef: ComponentComponent) {\r\n thisRef.selectedFilters = [];\r\n thisRef.isLoading = true;\r\n thisRef.refineryDetails = thisRef.refinaryService.getCurrentRefinery();\r\n thisRef.adminService.getComponentList(thisRef.refineryDetails?.refineryId).subscribe((data: any): void => {\r\n if (data && data !== null && data != undefined && data.length > 0) {\r\n thisRef.componentListDetails = new MatTableDataSource(data);\r\n thisRef.componentListDetails.filterPredicate=(data,filter:string): boolean=>{\r\n return data.tenantName.toLowerCase().includes(filter)||data.componentName.toLowerCase().includes(filter)||data.lastModifiedBy.toLowerCase().includes(filter);\r\n }\r\n thisRef.masterData = [...data];\r\n if (thisRef.filterList.length === 0) {\r\n thisRef.createFilterList();\r\n }\r\n thisRef.componentListDetails.sort = thisRef.sort;\r\n thisRef.componentListDetails.paginator = thisRef.paginator;\r\n if (thisRef.globalService.isNotNull(thisRef.searchText)) {\r\n thisRef.globalService.applyFilter(thisRef.searchText, thisRef.componentListDetails);\r\n }\r\n thisRef.isLoading = false;\r\n }\r\n else {\r\n thisRef.isLoading = false;\r\n thisRef.componentListDetails.data = [];\r\n }\r\n }, (error: Error) => {\r\n console.log('Error while fetching component list', error.message);\r\n thisRef.isLoading = false;\r\n });\r\n }\r\n\r\n openDialog(mode, element) {\r\n const dataToPass = { displayType: mode, data: element };\r\n this.globalService.openModelWindow(this.getComponentList, this, ComponentPageComponent, '80%', 'custom-modalbox', dataToPass);\r\n return true;\r\n }\r\n\r\n deleteModel(element) {\r\n const dataToPass = {\r\n title: 'Delete',\r\n isDelete: true,\r\n message: 'Do you really want to delete the component ' + element.componentName + '?'\r\n };\r\n this.selectedComponent = element;\r\n this.globalService.openModelWindow(this.deleteModelAfterConfirmation, this, ConfirmModelComponent, '450px', 'confirm-modalbox', dataToPass);\r\n }\r\n\r\n /**\r\n * Displays confirmation after deletion\r\n * @param thisRef\r\n */\r\n deleteModelAfterConfirmation(thisRef: ComponentComponent) {\r\n thisRef.adminService.deleteComponent(thisRef.selectedComponent.componentId).subscribe(data => {\r\n if (data) {\r\n thisRef.globalService.showAlert(AlertComponent, { success: true, message: 'Component ' + thisRef.selectedComponent.componentName + ' deleted successfully!' });\r\n thisRef.getComponentList(thisRef);\r\n thisRef.isLoading = false;\r\n } else {\r\n thisRef.deleteFailed(thisRef);\r\n }\r\n }, error => {\r\n thisRef.deleteFailed(thisRef);\r\n });\r\n }\r\n\r\n deleteFailed(thisRef: ComponentComponent) {\r\n thisRef.globalService.showAlert(AlertComponent, { success: false, message: 'Component ' + thisRef.selectedComponent.componentName + ' could not be deleted!' });\r\n thisRef.getComponentList(thisRef);\r\n thisRef.isLoading = false;\r\n\r\n }\r\n\r\n createComponent() {\r\n const dataToPass = { displayType: 'add', data: {} };\r\n this.globalService.openModelWindow(this.getComponentList, this, ComponentPageComponent, '80%', 'custom-modalbox', dataToPass);\r\n return true;\r\n }\r\n\r\n // filter functionality code starts here\r\n\r\n /**\r\n * Returns data from child filter component\r\n * @param event\r\n */\r\n filterResponse(event) {\r\n const filterRes: FilterResponseModel = event.filterResponse;\r\n this.componentListDetails.data = this.globalService.conditionalDataFiltering(filterRes, this.componentListDetails.data);\r\n this.selectedFilters.push(filterRes);\r\n if (this.popover.isOpen()) {\r\n this.popover.close();\r\n }\r\n }\r\n\r\n /**Creates data for filter list */\r\n createFilterList() {\r\n for (let a = 0; a < this.displayedColumns.length - 1; a++) {\r\n const tempFilter: FilterModel = new FilterModel();\r\n let unique;\r\n tempFilter.fieldType = FilterFieldTypes.text;\r\n tempFilter.fieldName = this.globalService.replaceDisplayText(this.displayedColumns[a]);\r\n if (this.displayedColumns[a] === 'componentName') {\r\n unique = Array.from(new Set(this.componentListDetails.data.map(component => component.componentName)));\r\n } else if (this.displayedColumns[a] === 'tenantName') {\r\n unique = Array.from(new Set(this.componentListDetails.data.map(component => component.tenantName)));\r\n } else if (this.displayedColumns[a] === 'lastModifiedBy') {\r\n unique = Array.from(new Set(this.componentListDetails.data.map(component => component.lastModifiedBy)));\r\n }\r\n tempFilter.values = unique;\r\n this.filterList.push(tempFilter);\r\n }\r\n }\r\n\r\n /**\r\n * Removes that filter\r\n * @param selectedFilter\r\n */\r\n remove(selectedFilter: FilterResponseModel): void {\r\n const i = this.selectedFilters.indexOf(selectedFilter);\r\n if (i >= 0) {\r\n this.selectedFilters.splice(i, 1);\r\n this.componentListDetails.data = this.masterData.slice(0);\r\n if (this.selectedFilters.length > 0) {\r\n for (const ele of this.selectedFilters) {\r\n this.componentListDetails.data = this.globalService.conditionalDataFiltering(ele, this.componentListDetails.data);\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n // filter functionality code ends here\r\n\r\n ngOnDestroy(): void {\r\n this.destroyed.next();\r\n this.destroyed.complete();\r\n }\r\n\r\n}\r\n","
\r\n
\r\n \r\n
\r\n
\r\n Create Datasource\r\n View Datasource\r\n Edit Datasource\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { GlobalService } from '../../services/global.service';\r\nimport { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\r\nimport { RefineryService } from '../../services/refinery.service';\r\nimport { adminService } from '../../services/admin.service';\r\nimport { Tenant } from '../../models/tenant.model';\r\nimport { Datasource } from '../../models/datasource.model';\r\nimport * as moment from 'moment';\r\nimport { AlertComponent } from '../../common/alert/alert.component';\r\nimport { switchMap } from 'rxjs/operators';\r\nimport { of } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'app-datasource-page',\r\n templateUrl: './datasource-page.component.html',\r\n styleUrls: ['./datasource-page.component.css']\r\n})\r\nexport class DatasourcePageComponent implements OnInit {\r\n\r\n isLoading = false;\r\n loadPage2 = false;\r\n tenantList: Tenant[];\r\n dataSourceTypesList;\r\n\r\n public datasourceDetailForm = new UntypedFormGroup({\r\n datasourceId: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n datasourceName: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n datasourceTableName: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n tenantName: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n datasourceTypeName: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n tenantId: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n datasourceConnStr: new UntypedFormControl({ value: '', disabled: false }),\r\n datasourceConnStrValue: new UntypedFormControl({ value: '', disabled: false }),\r\n datasourceOdbcConnStr: new UntypedFormControl({ value: '', disabled: false }),\r\n datasourceOdbcConnStrValue: new UntypedFormControl({ value: '', disabled: false }),\r\n cosmosDbKey: new UntypedFormControl({ value: '', disabled: false }),\r\n cosmosDbKeyValue: new UntypedFormControl({ value: '', disabled: false }),\r\n cosmosDbApiUrl: new UntypedFormControl({ value: '', disabled: false }),\r\n cosmosDbApiUrlValue: new UntypedFormControl({ value: '', disabled: false }),\r\n cosmosDbName: new UntypedFormControl({ value: '', disabled: false })\r\n });\r\n\r\n constructor(public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: any, public globalService: GlobalService,\r\n private readonly adminService: adminService, private readonly refineryService: RefineryService) { }\r\n\r\n ngOnInit(): void {\r\n this.loadTenantList();\r\n this.loadDatasourcePage();\r\n }\r\n\r\n loadDatasourcePage() {\r\n this.isLoading = true;\r\n if (this.data.displayType === 'view' && this.globalService.isNotNullObject(this.data.data)) {\r\n this.datasourceDetailForm = new UntypedFormGroup({\r\n datasourceName: new UntypedFormControl({ value: this.data.data.datasourceName, disabled: true }, Validators.required),\r\n datasourceTableName: new UntypedFormControl({ value: this.data.data.datasourceTableName, disabled: true }, Validators.required),\r\n datasourceTypeName: new UntypedFormControl({ value: this.data.data.datasourceTypeName, disabled: true }, Validators.required),\r\n tenantId: new UntypedFormControl({ value: this.data.data.tenantId, disabled: true }, Validators.required),\r\n datasourceConnStr: new UntypedFormControl({ value: this.data.data.datasourceConnStr, disabled: true }),\r\n datasourceConnStrValue: new UntypedFormControl({ value: this.data.data.datasourceConnStrValue, disabled: true }),\r\n datasourceOdbcConnStr: new UntypedFormControl({ value: this.data.data.datasourceOdbcConnStr, disabled: true }),\r\n datasourceOdbcConnStrValue: new UntypedFormControl({ value: this.data.data.datasourceOdbcConnStrValue, disabled: true }),\r\n masterDataTable: new UntypedFormControl({ value: this.data.data.masterDataTable, disabled: true }, Validators.required),\r\n representation: new UntypedFormControl({ value: this.data.data.representation, disabled: true }, Validators.required),\r\n dataCharacteristic: new UntypedFormControl({ value: this.data.data.dataCharacteristic, disabled: true }, Validators.required),\r\n idCol: new UntypedFormControl({ value: this.data.data.idCol, disabled: true }, Validators.required),\r\n timeCol: new UntypedFormControl({ value: this.data.data.timeCol, disabled: true }, Validators.required),\r\n valueCol: new UntypedFormControl({ value: this.data.data.valueCol, disabled: true }, Validators.required),\r\n eventProcessedTimeCol: new UntypedFormControl({ value: this.data.data.eventProcessedTimeCol, disabled: true }, Validators.required),\r\n masterDataConnStr: new UntypedFormControl({ value: this.data.data.masterDataConnStr, disabled: true }, Validators.required),\r\n masterDataConnStrValue: new UntypedFormControl({ value: this.data.data.masterDataConnStrValue, disabled: true }, Validators.required),\r\n masterDataOdbcConnStr: new UntypedFormControl({ value: this.data.data.masterDataOdbcConnStr, disabled: true }, Validators.required),\r\n masterDataOdbcConnStrValue: new UntypedFormControl({ value: this.data.data.masterDataOdbcConnStrValue, disabled: true }, Validators.required),\r\n cosmosDbKey: new UntypedFormControl({ value: this.data.data.cosmosDbKey, disabled: true }),\r\n cosmosDbKeyValue: new UntypedFormControl({ value: this.data.data.cosmosDbKeyValue, disabled: true }),\r\n cosmosDbApiUrl: new UntypedFormControl({ value: this.data.data.cosmosDbApiUrl, disabled: true }),\r\n cosmosDbApiUrlValue: new UntypedFormControl({ value: this.data.data.cosmosDbApiUrlValue, disabled: true }),\r\n cosmosDbName: new UntypedFormControl({ value: this.data.data.cosmosDbName, disabled: true })\r\n });\r\n } else if (this.data.displayType === 'edit' && this.globalService.isNotNullObject(this.data.data)) {\r\n this.datasourceDetailForm = new UntypedFormGroup({\r\n datasourceName: new UntypedFormControl({ value: this.data.data.datasourceName, disabled: true }, Validators.required),\r\n datasourceTableName: new UntypedFormControl({ value: this.data.data.datasourceTableName, disabled: false }, Validators.required),\r\n datasourceTypeName: new UntypedFormControl({ value: this.data.data.datasourceTypeName, disabled: false }, Validators.required),\r\n tenantId: new UntypedFormControl({ value: this.data.data.tenantId, disabled: false }, Validators.required),\r\n datasourceConnStr: new UntypedFormControl({ value: this.data.data.datasourceConnStr, disabled: false }),\r\n datasourceConnStrValue: new UntypedFormControl({ value: this.data.data.datasourceConnStrValue, disabled: false }),\r\n datasourceOdbcConnStr: new UntypedFormControl({ value: this.data.data.datasourceOdbcConnStr, disabled: false }),\r\n datasourceOdbcConnStrValue: new UntypedFormControl({ value: this.data.data.datasourceOdbcConnStrValue, disabled: false }),\r\n masterDataTable: new UntypedFormControl({ value: this.data.data.masterDataTable, disabled: false }, Validators.required),\r\n representation: new UntypedFormControl({ value: this.data.data.representation, disabled: false }, Validators.required),\r\n dataCharacteristic: new UntypedFormControl({ value: this.data.data.dataCharacteristic, disabled: false }, Validators.required),\r\n idCol: new UntypedFormControl({ value: this.data.data.idCol, disabled: false }, Validators.required),\r\n timeCol: new UntypedFormControl({ value: this.data.data.timeCol, disabled: false }, Validators.required),\r\n valueCol: new UntypedFormControl({ value: this.data.data.valueCol, disabled: false }, Validators.required),\r\n eventProcessedTimeCol: new UntypedFormControl({ value: this.data.data.eventProcessedTimeCol, disabled: false }, Validators.required),\r\n masterDataConnStr: new UntypedFormControl({ value: this.data.data.masterDataConnStr, disabled: false }, Validators.required),\r\n masterDataConnStrValue: new UntypedFormControl({ value: this.data.data.masterDataConnStrValue, disabled: false }, Validators.required),\r\n masterDataOdbcConnStr: new UntypedFormControl({ value: this.data.data.masterDataOdbcConnStr, disabled: false }, Validators.required),\r\n masterDataOdbcConnStrValue: new UntypedFormControl({ value: this.data.data.masterDataOdbcConnStrValue, disabled: false },\r\n Validators.required),\r\n cosmosDbKey: new UntypedFormControl({ value: this.data.data.cosmosDbKey, disabled: false }),\r\n cosmosDbKeyValue: new UntypedFormControl({ value: this.data.data.cosmosDbKeyValue, disabled: false }),\r\n cosmosDbApiUrl: new UntypedFormControl({ value: this.data.data.cosmosDbApiUrl, disabled: false }),\r\n cosmosDbApiUrlValue: new UntypedFormControl({ value: this.data.data.cosmosDbApiUrlValue, disabled: false }),\r\n cosmosDbName: new UntypedFormControl({ value: this.data.data.cosmosDbName, disabled: false })\r\n });\r\n } else {\r\n this.datasourceDetailForm = new UntypedFormGroup({\r\n datasourceName: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n datasourceTableName: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n datasourceTypeName: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n tenantId: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n datasourceConnStr: new UntypedFormControl({ value: '', disabled: false }),\r\n datasourceConnStrValue: new UntypedFormControl({ value: '', disabled: false }),\r\n datasourceOdbcConnStr: new UntypedFormControl({ value: '', disabled: false }),\r\n datasourceOdbcConnStrValue: new UntypedFormControl({ value: '', disabled: false }),\r\n masterDataTable: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n representation: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n dataCharacteristic: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n idCol: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n timeCol: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n valueCol: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n eventProcessedTimeCol: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n masterDataConnStr: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n masterDataConnStrValue: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n masterDataOdbcConnStr: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n masterDataOdbcConnStrValue: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n cosmosDbKey: new UntypedFormControl({ value: this.data.data.cosmosDbKey, disabled: false }),\r\n cosmosDbKeyValue: new UntypedFormControl({ value: this.data.data.cosmosDbKeyValue, disabled: false }),\r\n cosmosDbApiUrl: new UntypedFormControl({ value: this.data.data.cosmosDbApiUrl, disabled: false }),\r\n cosmosDbApiUrlValue: new UntypedFormControl({ value: this.data.data.cosmosDbApiUrlValue, disabled: false }),\r\n cosmosDbName: new UntypedFormControl({ value: this.data.data.cosmosDbName, disabled: false })\r\n });\r\n }\r\n this.isLoading = false;\r\n }\r\n\r\n /**Load Tenant List data for selected refinery*/\r\n loadTenantList() {\r\n this.adminService.getTenantList(this.refineryService.currentRefinery.refineryId).pipe(\r\n switchMap((data: any) => {\r\n this.tenantList = data;\r\n this.isLoading = false;\r\n return of(data);\r\n }),\r\n switchMap((data) => { return of(this.getDataSourceTypes()) }),\r\n ).subscribe();\r\n }\r\n\r\n /**Get list of datasource types*/\r\n getDataSourceTypes() {\r\n this.adminService.getDataSourceTypesList().subscribe((data: any): void => {\r\n this.dataSourceTypesList = data;\r\n this.isLoading = false;\r\n }, (error: Error) => {\r\n console.log('Error while fetching data source types list', error.message);\r\n });\r\n }\r\n\r\n /**Cancels the pop-up */\r\n onCancelClick(value: boolean): void {\r\n this.dialogRef.close(value);\r\n }\r\n\r\n changePage(pageStatus: boolean) {\r\n this.loadPage2 = pageStatus;\r\n }\r\n\r\n disableSave() {\r\n const datasourceTypeName = this.datasourceDetailForm.get('datasourceTypeName').value;\r\n\r\n if (datasourceTypeName == 'SQL Server') {\r\n\r\n this.datasourceDetailForm.get('cosmosDbKey').clearValidators();\r\n this.datasourceDetailForm.get('cosmosDbKeyValue').clearValidators();\r\n this.datasourceDetailForm.get('cosmosDbApiUrl').clearValidators();\r\n this.datasourceDetailForm.get('cosmosDbApiUrlValue').clearValidators();\r\n this.datasourceDetailForm.get('cosmosDbName').clearValidators();\r\n this.datasourceDetailForm.get('datasourceConnStr').setValidators([Validators.required]);\r\n this.datasourceDetailForm.get('datasourceConnStrValue').setValidators([Validators.required]);\r\n this.datasourceDetailForm.get('datasourceOdbcConnStr').setValidators([Validators.required]);\r\n this.datasourceDetailForm.get('datasourceOdbcConnStrValue').setValidators([Validators.required]);\r\n }\r\n else if (datasourceTypeName == 'Cosmos DB') {\r\n this.datasourceDetailForm.get('datasourceConnStr').clearValidators();\r\n this.datasourceDetailForm.get('datasourceConnStrValue').clearValidators();\r\n this.datasourceDetailForm.get('datasourceOdbcConnStr').clearValidators();\r\n this.datasourceDetailForm.get('datasourceOdbcConnStrValue').clearValidators();\r\n this.datasourceDetailForm.get('cosmosDbKey').setValidators([Validators.required]);\r\n this.datasourceDetailForm.get('cosmosDbKeyValue').setValidators([Validators.required]);\r\n this.datasourceDetailForm.get('cosmosDbApiUrl').setValidators([Validators.required]);\r\n this.datasourceDetailForm.get('cosmosDbApiUrlValue').setValidators([Validators.required]);\r\n this.datasourceDetailForm.get('cosmosDbName').setValidators([Validators.required]);\r\n }\r\n\r\n const check: boolean = !this.datasourceDetailForm.valid;\r\n return check;\r\n }\r\n\r\n saveDatasource() {\r\n const datasourceModel: Datasource = this.datasourceDetailForm.value;\r\n datasourceModel.datasourceName = this.datasourceDetailForm.controls.datasourceName.value;\r\n if (datasourceModel.datasourceName.includes(\"_\")) {\r\n this.isLoading = false;\r\n this.globalService.showAlert(AlertComponent, { success: false, message: \"Datasource Name cannot contain underscore ('_') in it.\" });\r\n } else {\r\n datasourceModel.datasourceTypeId = this.dataSourceTypesList.find((item: any) =>\r\n item.datasourceTypeName === datasourceModel.datasourceTypeName).datasourceTypeId;\r\n datasourceModel.datasourceId = this.data.data.datasourceId ? this.data.data.datasourceId : 0;\r\n if (this.data.displayType === 'add') {\r\n datasourceModel.datasourceId = 0;\r\n datasourceModel.createdBy = this.globalService.loggedInUser;\r\n datasourceModel.createdTime = moment.utc(new Date()).local().format('YYYY-MM-DDTHH:mm:ss');\r\n }\r\n datasourceModel.lastModifiedBy = this.globalService.loggedInUser;\r\n datasourceModel.lastModifiedTime = moment.utc(new Date()).local().format('YYYY-MM-DDTHH:mm:ss');\r\n this.adminService.saveDatasource(datasourceModel, this.data.displayType).subscribe((data: any): void => {\r\n this.globalService.showAlert(AlertComponent, { success: true, message: 'Datasource ' + datasourceModel.datasourceName + ' saved successfully.' });\r\n this.onCancelClick(true);\r\n }, (error: Error) => {\r\n this.isLoading = false;\r\n this.globalService.showAlert(AlertComponent, { success: false, message: 'Datasource ' + datasourceModel.datasourceName + ' could not be saved.' });\r\n });\r\n }\r\n }\r\n\r\n}\r\n","
\r\n
\r\n
\r\n Datasource\r\n \r\n
\r\n
\r\n
\r\n \r\n search\r\n
\r\n
\r\n \r\n \r\n {{globalService.replaceDisplayText(element.selectedFieldName) + \" \" + element.selectedCondition + \" \" + element.selectedValue}}\r\n cancel \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n Datasource \r\n {{element.datasourceName}} \r\n \r\n \r\n Tenant \r\n {{element.tenantName}} \r\n \r\n \r\n Type \r\n {{element.datasourceTypeName}} \r\n \r\n \r\n Datasource Table\r\n {{element.datasourceTableName}} \r\n \r\n \r\n Master Data Table\r\n {{element.masterDataTable}} \r\n \r\n \r\n Last Modified By\r\n {{element.lastModifiedBy}} \r\n \r\n \r\n Action\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n There are no records to display.\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { Router } from '@angular/router';\r\nimport { NgbPopover } from '@ng-bootstrap/ng-bootstrap';\r\nimport { Subject } from 'rxjs';\r\nimport { AlertComponent } from '../common/alert/alert.component';\r\nimport { FilterFieldTypes } from '../common/common-constants';\r\nimport { ConfirmModelComponent } from '../common/confirm-model/confirm-model.component';\r\nimport { FilterModel } from '../models/filter/filter-request.model';\r\nimport { FilterResponseModel } from '../models/filter/filter-response.model';\r\nimport { Globals } from '../models/globals.model';\r\nimport { Refinery } from '../models/refinery.model';\r\nimport { adminService } from '../services/admin.service';\r\nimport { GlobalService } from '../services/global.service';\r\nimport { RefineryService } from '../services/refinery.service';\r\nimport { DatasourcePageComponent } from '../view-page/datasource-page/datasource-page.component';\r\nimport { ActivatedRoute, Params } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-datasource',\r\n templateUrl: './datasource.component.html',\r\n styleUrls: ['./datasource.component.scss']\r\n})\r\nexport class DatasourceComponent implements OnInit {\r\n\r\n isLoading = false;\r\n datasourceListDetails: any;\r\n refineryDetails: Refinery;\r\n selectedDatasource;\r\n @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n\r\n filterList: FilterModel[] = [];\r\n selectedFilters: FilterResponseModel[] = [];\r\n masterData: any;\r\n @ViewChild('popOver') public popover: NgbPopover;\r\n searchText = '';\r\n displayedColumns: string[] = ['datasourceName', 'tenantName', 'datasourceTypeName', 'datasourceTableName', 'masterDataTable', 'lastModifiedBy', 'action'];\r\n destroyed = new Subject();\r\n\r\n constructor(\r\n public _router: Router,\r\n public globals: Globals,\r\n public globalService: GlobalService,\r\n public httpClientObj: HttpClient,\r\n private readonly adminService: adminService,\r\n private readonly refinaryService: RefineryService,\r\n public route: ActivatedRoute,\r\n public dialog: MatDialog) {\r\n const emptyList: any[] = [];\r\n this.datasourceListDetails = new MatTableDataSource(emptyList);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.isLoading = true;\r\n this.getDatasourceList(this);\r\n this.getSearchText();\r\n }\r\n\r\n getSearchText() {\r\n this.route.params.subscribe((params: Params) => {\r\n if (params.searchText !== undefined) {\r\n this.searchText = params.searchText;\r\n }\r\n });\r\n }\r\n\r\n setSearchText(filterValue: string) {\r\n filterValue = filterValue.trim().toLowerCase();\r\n this.searchText = filterValue;\r\n }\r\n\r\n getDatasourceList(thisRef: DatasourceComponent) {\r\n thisRef.selectedFilters = [];\r\n thisRef.isLoading = true;\r\n thisRef.refineryDetails = thisRef.refinaryService.getCurrentRefinery();\r\n thisRef.adminService.getDatasourceList(thisRef.refineryDetails?.refineryId).subscribe((data: any): void => {\r\n if (data && data !== null && data != undefined && data.length > 0) {\r\n thisRef.datasourceListDetails = new MatTableDataSource(data);\r\n thisRef.datasourceListDetails.filterPredicate=(data,filter:string): boolean=>{\r\n return data.datasourceName.toLowerCase().includes(filter)||data.tenantName.toLowerCase().includes(filter)||data.datasourceTypeName.toLowerCase().includes(filter)||data.datasourceTableName.toLowerCase().includes(filter)||data.masterDataTable.toLowerCase().includes(filter)||data.lastModifiedBy.toLowerCase().includes(filter);\r\n }\r\n thisRef.masterData = [...data];\r\n if (thisRef.filterList.length === 0) {\r\n thisRef.createFilterList();\r\n }\r\n thisRef.datasourceListDetails.sort = thisRef.sort;\r\n thisRef.datasourceListDetails.paginator = thisRef.paginator;\r\n if (thisRef.globalService.isNotNull(thisRef.searchText)) {\r\n thisRef.globalService.applyFilter(thisRef.searchText, thisRef.datasourceListDetails);\r\n }\r\n thisRef.isLoading = false;\r\n }\r\n else {\r\n thisRef.isLoading = false;\r\n thisRef.datasourceListDetails.data = [];\r\n }\r\n }, (error: Error) => {\r\n console.log('Error while fetching datasource list', error.message);\r\n thisRef.isLoading = false;\r\n });\r\n }\r\n\r\n openDialog(mode, element) {\r\n let dataToPass = { displayType: mode, data: element };\r\n this.globalService.openModelWindow(this.getDatasourceList, this, DatasourcePageComponent, '80%', 'custom-modalbox', dataToPass);\r\n return true;\r\n }\r\n\r\n createDatasource() {\r\n let dataToPass = { displayType: \"add\", data: {} };\r\n this.globalService.openModelWindow(this.getDatasourceList, this, DatasourcePageComponent, '80%', 'custom-modalbox', dataToPass);\r\n return true;\r\n }\r\n\r\n deleteModel(element) {\r\n let dataToPass = {\r\n title: 'Delete',\r\n isDelete: true,\r\n message: 'Do you really want to delete the datasource ' + element.datasourceName + '?'\r\n };\r\n this.selectedDatasource = element;\r\n this.globalService.openModelWindow(this.deleteModelAfterConfirmation, this, ConfirmModelComponent, '450px', 'confirm-modalbox', dataToPass);\r\n }\r\n\r\n /**\r\n * Displays confirmation after deletion\r\n * @param thisRef\r\n */\r\n deleteModelAfterConfirmation(thisRef: DatasourceComponent) {\r\n thisRef.adminService.deleteDatasource(thisRef.selectedDatasource.datasourceId).subscribe(data => {\r\n if (data) {\r\n thisRef.globalService.showAlert(AlertComponent, { success: true, message: \"Datasource \" + thisRef.selectedDatasource.datasourceName + \" deleted successfully!\" });\r\n thisRef.getDatasourceList(thisRef);\r\n thisRef.isLoading = false;\r\n } else {\r\n thisRef.deleteFailed(thisRef);\r\n }\r\n }, error => {\r\n thisRef.deleteFailed(thisRef);\r\n });\r\n }\r\n\r\n deleteFailed(thisRef: DatasourceComponent) {\r\n thisRef.globalService.showAlert(AlertComponent, { success: false, message: \"Datasource \" + thisRef.selectedDatasource.datasourceName + \" could not be deleted!\" });\r\n thisRef.getDatasourceList(thisRef);\r\n thisRef.isLoading = false;\r\n\r\n }\r\n\r\n // filter functionality code starts here\r\n\r\n /**\r\n * Returns data from child filter component\r\n * @param event\r\n */\r\n filterResponse(event) {\r\n const filterRes: FilterResponseModel = event.filterResponse;\r\n this.datasourceListDetails.data = this.globalService.conditionalDataFiltering(filterRes, this.datasourceListDetails.data);\r\n this.selectedFilters.push(filterRes);\r\n if (this.popover.isOpen()) {\r\n this.popover.close();\r\n }\r\n }\r\n\r\n\r\n /**Creates data for filter list */\r\n createFilterList() {\r\n for (let a = 0; a < this.displayedColumns.length - 1; a++) {\r\n const tempFilter: FilterModel = new FilterModel();\r\n let unique;\r\n tempFilter.fieldType = FilterFieldTypes.text;\r\n tempFilter.fieldName = this.globalService.replaceDisplayText(this.displayedColumns[a]);\r\n if (this.displayedColumns[a] === 'datasourceName') {\r\n unique = Array.from(new Set(this.datasourceListDetails.data.map(ds => ds.datasourceName)));\r\n } else if (this.displayedColumns[a] === 'tenantName') {\r\n unique = Array.from(new Set(this.datasourceListDetails.data.map(ds => ds.tenantName)));\r\n } else if (this.displayedColumns[a] === 'datasourceTypeName') {\r\n unique = Array.from(new Set(this.datasourceListDetails.data.map(ds => ds.datasourceTypeName)));\r\n } else if (this.displayedColumns[a] === 'datasourceTableName') {\r\n unique = Array.from(new Set(this.datasourceListDetails.data.map(ds => ds.datasourceTableName)));\r\n } else if (this.displayedColumns[a] === 'masterDataTable') {\r\n unique = Array.from(new Set(this.datasourceListDetails.data.map(ds => ds.masterDataTable)));\r\n } else if (this.displayedColumns[a] === 'lastModifiedBy') {\r\n unique = Array.from(new Set(this.datasourceListDetails.data.map(ds => ds.lastModifiedBy)));\r\n }\r\n tempFilter.values = unique;\r\n this.filterList.push(tempFilter);\r\n }\r\n }\r\n\r\n /**\r\n * Removes that filter\r\n * @param selectedFilter\r\n */\r\n remove(selectedFilter: FilterResponseModel): void {\r\n const i = this.selectedFilters.indexOf(selectedFilter);\r\n if (i >= 0) {\r\n this.selectedFilters.splice(i, 1);\r\n this.datasourceListDetails.data = this.masterData.slice(0);\r\n if (this.selectedFilters.length > 0) {\r\n for (const ele of this.selectedFilters) {\r\n this.datasourceListDetails.data = this.globalService.conditionalDataFiltering(ele, this.datasourceListDetails.data);\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n // filter functionality code ends here\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { User } from '../models/interfaces/user';\r\nimport { Globals } from '../models/globals.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class GraphService {\r\n\r\n user: User = {\r\n displayName: \"\",\r\n groupIDs: [],\r\n };\r\n graphUri: string;\r\n\r\n constructor(private readonly http: HttpClient, private readonly globals: Globals) {\r\n this.graphUri = this.globals.config.graphApi_client_resourceUri;\r\n }\r\n\r\n getGroups() {\r\n return this.http.get(this.graphUri);\r\n }\r\n\r\n getNextPage(nextPage) {\r\n return this.http.get(nextPage);\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { GraphService } from 'src/app/services/graph.service';\r\nimport { Router, ActivatedRoute, ActivatedRouteSnapshot, Params } from '@angular/router';\r\nimport { Globals } from '../models/globals.model';\r\nimport { MsalService }from '@azure/msal-angular';\r\nimport { AuthError, InteractionRequiredAuthError } from '@azure/msal-browser';\r\n\r\n@Component({\r\n selector: 'app-overage',\r\n templateUrl: './overage.component.html',\r\n styleUrls: ['./overage.component.css']\r\n})\r\nexport class OverageComponent implements OnInit {\r\n\r\n groups: string[] = [];\r\n\r\n constructor(private readonly authService: MsalService, private readonly service: GraphService, private readonly http: HttpClient\r\n , private readonly router: Router\r\n , public route: ActivatedRoute\r\n , public globals: Globals) { }\r\n\r\n ngOnInit(): void {\r\n this.handleResponse();\r\n }\r\n\r\n handleResponse(): void {\r\n this.service.getGroups().subscribe({\r\n next: (response: any) => {\r\n this.handleGroupResponse(response);\r\n },\r\n error: (err: AuthError) => {\r\n console.log(err)\r\n // If there is an interaction required error,\r\n // call one of the interactive methods and then make the request again.\r\n if (InteractionRequiredAuthError.isInteractionRequiredError(err.errorCode, err.errorMessage)) {\r\n this.authService.acquireTokenPopup({\r\n scopes: [this.globals.config.graphApi_client_resourceUri]\r\n })\r\n .subscribe(() => {\r\n this.service.getGroups()\r\n .toPromise()\r\n .then((response: any) => {\r\n this.handleGroupResponse(response);\r\n });\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n private handleGroupResponse(response:any) {\r\n response.value.map(v => this.groups.push(v.id));\r\n /**\r\n * Some queries against Microsoft Graph return multiple pages of data either due to server-side paging \r\n * or due to the use of the $top query parameter to specifically limit the page size in a request. \r\n * When a result set spans multiple pages, Microsoft Graph returns an @odata.nextLink property in \r\n * the response that contains a URL to the next page of results.\r\n * learn more at https://docs.microsoft.com/graph/paging\r\n */\r\n if (response['@odata.nextLink']) {\r\n this.handleNextPage(response['@odata.nextLink'])\r\n } else {\r\n this.syncGroups();\r\n }\r\n }\r\n\r\n private syncGroups() {\r\n this.service.user.groupIDs = this.groups;\r\n this.route.params.subscribe(\r\n (params: Params) => {\r\n this.router.navigate(['/' + params.redirectPath]);\r\n });\r\n }\r\n\r\n handleNextPage(nextPage): void {\r\n this.service.getNextPage(nextPage)\r\n .subscribe((response: any) => {\r\n\r\n response.value.map(v => {\r\n if (!this.groups.includes(v.id)) {\r\n this.groups.push(v.id);\r\n }\r\n });\r\n\r\n if (response['@odata.nextLink']) {\r\n this.handleNextPage(response['@odata.nextLink'])\r\n } else {\r\n this.syncGroups();\r\n }\r\n })\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { GraphService } from './graph.service';\r\nimport { Globals } from '../models/globals.model';\r\nimport { MsalService }from '@azure/msal-angular';\r\nimport { InteractionRequiredAuthError, AuthError } from '@azure/msal-browser';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class OverageService {\r\n\r\n groups: string[] = [];\r\n\r\n constructor(private readonly http: HttpClient, private readonly globals: Globals) {\r\n }\r\n\r\n readGraphGroups(authService: MsalService, service: GraphService, methodRef: (objRef: any) => void, objRef): void {\r\n service.getGroups().subscribe({\r\n next: (response: any) => { \r\n this.handleGroupResponse(service, response, methodRef, objRef)\r\n },\r\n error: (err: AuthError) => {\r\n // If there is an interaction required error,\r\n // call one of the interactive methods and then make the request again.\r\n if (InteractionRequiredAuthError.isInteractionRequiredError(err.errorCode, err.errorMessage)) {\r\n authService.acquireTokenPopup({\r\n scopes: [this.globals.config.graphApi_client_resourceUri]\r\n })\r\n .subscribe(() => {\r\n service.getGroups()\r\n .toPromise()\r\n .then((response: any) => { \r\n this.handleGroupResponse(service, response, methodRef, objRef)\r\n });\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n handleGroupResponse(service: GraphService, response, methodRef: (objRef: any) => void, objRef) {\r\n response.value.map(v => this.groups.push(v.id)); \r\n if (response['@odata.nextLink']) {\r\n this.handleNextPageWithMethodRef(service, response['@odata.nextLink'], methodRef, objRef) \r\n } else {\r\n this.syncGroupswithRef(service, methodRef, objRef);\r\n }\r\n }\r\n\r\n syncGroupswithRef(service: GraphService, methodRef: (objRef: any) => void, objRef) {\r\n service.user.groupIDs = this.groups;\r\n methodRef(objRef);\r\n }\r\n\r\n handleNextPageWithMethodRef(service: GraphService, nextPage, methodRef: (objRef: any) => void, objRef): void {\r\n service.getNextPage(nextPage)\r\n .subscribe((response: any) => {\r\n response.value.map(v => {\r\n if (!this.groups.includes(v.id)) {\r\n this.groups.push(v.id);\r\n }\r\n });\r\n if (response['@odata.nextLink']) {\r\n this.handleNextPageWithMethodRef(service, response['@odata.nextLink'], methodRef, objRef)\r\n } else {\r\n this.syncGroupswithRef(service, methodRef, objRef);\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivate, Router } from '@angular/router';\r\nimport { AlertComponent } from '../common/alert/alert.component';\r\nimport { MsalService }from '@azure/msal-angular';\r\nimport { GlobalService } from './global.service';\r\nimport { GraphService } from './graph.service';\r\nimport { OverageService } from './overage.service';\r\nimport { Globals } from '../models/globals.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class GroupGuardService implements CanActivate {\r\n route: ActivatedRouteSnapshot;\r\n\r\n constructor(private readonly authService: MsalService, private readonly service: GraphService\r\n , private readonly router: Router, private readonly overage: OverageService\r\n , public globalServ: GlobalService\r\n , public globals: Globals) { }\r\n\r\n canActivate(route: ActivatedRouteSnapshot): boolean {\r\n this.route = route;\r\n\r\n if (this.service.user.groupIDs.length > 0) {\r\n return this.validateGroup();\r\n } else {\r\n this.router.navigate(['/overage', { redirectPath: route.routeConfig.path }]);\r\n }\r\n }\r\n\r\n validateGroup(): boolean {\r\n const expectedGroups = this.route.data.expectedGroups;\r\n const matchGroups = expectedGroups.filter(grp => this.service.user.groupIDs.includes(grp));\r\n if (expectedGroups.length > 0 && matchGroups.length === 0) {\r\n this.globalServ.showAlertWithCallBack(AlertComponent, { success: false, message: 'You do not have enough access. Redirecting to Home Page...' }\r\n , this.redirectOnUnAuthorizedAccess, this);\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n redirectOnUnAuthorizedAccess(thisRef: GroupGuardService) {\r\n window.location.href = thisRef.globals.config.platformHomeUrl;\r\n }\r\n}\r\n","
\r\n
\r\n \r\n
\r\n
\r\n Create Azure Keyvault\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n {{resource.resourceName}}\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { AlertComponent } from '../common/alert/alert.component';\r\nimport { adminService } from '../services/admin.service';\r\nimport { GlobalService } from '../services/global.service';\r\n\r\n@Component({\r\n selector: 'app-keyvault',\r\n templateUrl: './keyvault.component.html'\r\n})\r\nexport class KeyvaultComponent implements OnInit {\r\n\r\n isLoading = false;\r\n\r\n public keyvaultDetailsForm = new UntypedFormGroup({\r\n keyvaultName: new UntypedFormControl('Az-TenantName-DEVKV', Validators.required),\r\n accessRights: new UntypedFormControl('', Validators.required)\r\n });\r\n resourceList: any;\r\n constructor(public dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any, public globalService: GlobalService,\r\n public adminservice: adminService) { }\r\n\r\n ngOnInit(): void {\r\n let environment = (this.globalService.environment + 'KV').toUpperCase();\r\n let tenantName = '';\r\n if (typeof this.data === \"string\") {\r\n tenantName = this.data.replace(/_/g, \"-\");\r\n }\r\n tenantName = (tenantName.length >= 15) ? (tenantName).slice(0, 15) : tenantName;\r\n this.keyvaultDetailsForm.controls['keyvaultName'].setValue('Az-' + tenantName + '-' + environment);\r\n this.fetchResourceList();\r\n }\r\n\r\n /**\r\n * Fetches list of resources from api\r\n */\r\n fetchResourceList() {\r\n this.adminservice.getResourceList().subscribe(data => {\r\n this.resourceList = data;\r\n }, (error) => {\r\n console.log(error);\r\n });\r\n }\r\n\r\n /**\r\n * calls create keyvault api in backend and shows results/error\r\n */\r\n createKeyvault() {\r\n let tenantName = this.keyvaultDetailsForm.controls['keyvaultName'].value;\r\n this.isLoading = true;\r\n let keyVaultName = '';\r\n if (typeof tenantName === \"string\") {\r\n keyVaultName = tenantName.replace(/_/g, \"-\");\r\n }\r\n this.adminservice.createKeyvault(keyVaultName,\r\n this.keyvaultDetailsForm.controls['accessRights'].value).subscribe(data => {\r\n let kvUrl = 'https://' + keyVaultName + '.vault.azure.net';\r\n const alertData = {\r\n success: true,\r\n message: 'Key vault has been created successfully with url:' + kvUrl\r\n };\r\n this.globalService.showAlert(AlertComponent, alertData);\r\n this.isLoading = false;\r\n this.dialogRef.close(kvUrl);\r\n\r\n }, (error) => {\r\n console.log(error);\r\n const alertData = {\r\n success: false,\r\n message: \"A vault with the same name already exists in deleted state.\"\r\n };\r\n this.globalService.showAlert(AlertComponent, alertData);\r\n this.isLoading = false;\r\n });\r\n }\r\n\r\n /**Cancels the pop-up */\r\n onCancelClick(value: boolean): void {\r\n this.dialogRef.close(value);\r\n }\r\n}\r\n","
\r\n
\r\n \r\n
\r\n
\r\n Create Tenant\r\n View Tenant\r\n Edit Tenant\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { UntypedFormGroup, UntypedFormControl, Validators } from '@angular/forms';\r\nimport { AlertComponent } from '../../common/alert/alert.component';\r\nimport { Refinery } from '../../models/refinery.model';\r\nimport { Tenant } from '../../models/tenant.model';\r\nimport { adminService } from '../../services/admin.service';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { KeyvaultComponent } from 'src/app/keyvault/keyvault.component';\r\nimport { GlobalService } from '../../services/global.service';\r\nimport { RefineryService } from '../../services/refinery.service';\r\nimport * as moment from 'moment';\r\n\r\n@Component({\r\n selector: 'app-tenant-page',\r\n templateUrl: './tenant-page.component.html',\r\n styleUrls: ['./tenant-page.component.css']\r\n})\r\nexport class TenantPageComponent implements OnInit {\r\n\r\n isLoading = false;\r\n\r\n refineryMap: Refinery[];\r\n\r\n public tenantDetailForm = new UntypedFormGroup({\r\n tenantId: new UntypedFormControl(''),\r\n tenantName: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n tenantSecurityGrp: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n tenantEmailId: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n refineryId: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n tenantKeyvaultUrl: new UntypedFormControl({ value: '', disabled: false }, Validators.required)\r\n });\r\n constructor(public dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any, public globalService: GlobalService,\r\n public dialog: MatDialog, private readonly refineryService: RefineryService, private readonly adminservice: adminService) { }\r\n\r\n ngOnInit(): void {\r\n this.refineryService.getRefineryListFromServer();\r\n this.refineryService.getRefineries().subscribe((data: Refinery[]) => {\r\n this.refineryMap = data;\r\n });\r\n this.loadTenantPageData();\r\n }\r\n\r\n loadTenantPageData() {\r\n this.isLoading = true;\r\n if (this.globalService.isNotNullObject(this.data.data) && this.data.displayType !== 'add') {\r\n let disableMode = false;\r\n let isTenantDisabled = false;\r\n if (this.data.displayType === 'view') {\r\n disableMode = true;\r\n isTenantDisabled = true;\r\n }\r\n if (this.data.displayType === 'edit') {\r\n isTenantDisabled = true;\r\n }\r\n this.tenantDetailForm = new UntypedFormGroup({\r\n tenantId: new UntypedFormControl({ value: this.data.data.tenantId, disabled: isTenantDisabled }, Validators.required),\r\n tenantName: new UntypedFormControl({ value: this.data.data.tenantName, disabled: isTenantDisabled }, Validators.required),\r\n tenantSecurityGrp: new UntypedFormControl({ value: this.data.data.tenantSecurityGrp, disabled: disableMode }, Validators.required),\r\n tenantEmailId: new UntypedFormControl({ value: this.data.data.tenantEmailId, disabled: disableMode }, Validators.required),\r\n refineryId: new UntypedFormControl({ value: this.data.data.refineryId, disabled: isTenantDisabled }, Validators.required),\r\n tenantKeyvaultUrl: new UntypedFormControl({ value: this.data.data.tenantKeyvaultUrl, disabled: disableMode }, Validators.required)\r\n });\r\n this.isLoading = false;\r\n } else {\r\n this.isLoading = false;\r\n }\r\n }\r\n\r\n onRefineryChange() {\r\n\r\n }\r\n\r\n disableSave() {\r\n const check: boolean = !this.tenantDetailForm.valid;\r\n return check;\r\n }\r\n\r\n saveTenant() {\r\n const tenantData: Tenant = this.tenantDetailForm.value;\r\n tenantData.tenantId = this.tenantDetailForm.controls.tenantId.value;\r\n tenantData.tenantName = this.tenantDetailForm.controls.tenantName.value;\r\n tenantData.refineryId = this.tenantDetailForm.controls.refineryId.value;\r\n tenantData.tenantRefinery = this.refineryMap.find((item: Refinery) => item.refineryId === tenantData.refineryId).refineryShortName;\r\n if (this.data.displayType === 'add') {\r\n tenantData.tenantId = 0;\r\n tenantData.createdBy = this.globalService.loggedInUser;\r\n tenantData.createdTime = moment.utc(new Date()).local().format('YYYY-MM-DDTHH:mm:ss');\r\n }\r\n tenantData.lastModifiedBy = this.globalService.loggedInUser;\r\n tenantData.lastModifiedTime = moment.utc(new Date()).local().format('YYYY-MM-DDTHH:mm:ss');\r\n this.adminservice.saveTenant(tenantData, this.data.displayType).subscribe((data: any): void => {\r\n this.globalService.showAlert(AlertComponent, { success: true, message: 'Tenant ' + this.tenantDetailForm.get('tenantName').value + ' saved successfully.' });\r\n this.onCancelClick(true);\r\n }, (error: Error) => {\r\n this.isLoading = false;\r\n this.globalService.showAlert(AlertComponent, { success: false, message: 'Tenant ' + this.tenantDetailForm.get('tenantName').value + ' could not be saved.' });\r\n });\r\n }\r\n\r\n openKeyvaultPopup() {\r\n this.globalService.openModelWindow(this.setkeyVaultUrl, this, KeyvaultComponent, '40%', 'custom-modalbox',\r\n this.tenantDetailForm.controls['tenantName'].value);\r\n }\r\n\r\n /**\r\n * takes input from key vault popup\r\n * @param thisref\r\n * @param result\r\n */\r\n setkeyVaultUrl(thisref, result) {\r\n thisref.tenantDetailForm.controls['tenantKeyvaultUrl'].setValue(result + '/');\r\n }\r\n\r\n /**Cancels the pop-up */\r\n onCancelClick(value: boolean): void {\r\n this.dialogRef.close(value);\r\n }\r\n\r\n}\r\n","
\r\n
\r\n
\r\n Tenant\r\n \r\n
\r\n
\r\n
\r\n \r\n search\r\n
\r\n
\r\n \r\n \r\n {{globalService.replaceDisplayText(element.selectedFieldName) + \" \" + element.selectedCondition + \" \" + element.selectedValue}}\r\n cancel\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n Tenant \r\n {{element.tenantName}} \r\n \r\n \r\n Security Group \r\n {{element.tenantSecurityGrp}} \r\n \r\n \r\n Tenant Id\r\n {{element.tenantId}} \r\n \r\n \r\n Last Modified By \r\n {{element.lastModifiedBy}} \r\n \r\n \r\n Action\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n There are no records to display.\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { Router } from '@angular/router';\r\nimport { NgbPopover } from '@ng-bootstrap/ng-bootstrap';\r\nimport { Subject } from 'rxjs';\r\nimport { AlertComponent } from '../common/alert/alert.component';\r\nimport { FilterFieldTypes } from '../common/common-constants';\r\nimport { ConfirmModelComponent } from '../common/confirm-model/confirm-model.component';\r\nimport { FilterModel } from '../models/filter/filter-request.model';\r\nimport { FilterResponseModel } from '../models/filter/filter-response.model';\r\nimport { Globals } from '../models/globals.model';\r\nimport { Refinery } from '../models/refinery.model';\r\nimport { Tenant } from '../models/tenant.model';\r\nimport { adminService } from '../services/admin.service';\r\nimport { GlobalService } from '../services/global.service';\r\nimport { RefineryService } from '../services/refinery.service';\r\nimport { TenantPageComponent } from '../view-page/tenant-page/tenant-page.component';\r\n\r\n@Component({\r\n selector: 'app-tenant',\r\n templateUrl: './tenant.component.html',\r\n styleUrls: ['./tenant.component.scss']\r\n})\r\nexport class TenantComponent implements OnInit, OnDestroy {\r\n isLoading = false;\r\n tenantListDetails: any;\r\n selectedRefinery;\r\n selectedTenant: Tenant; \r\n tenantKeyvaultUrl: any;\r\n tenantName: any;\r\n keyVaultName: any;\r\n tenantId: any;\r\n resourceGroup: any;\r\n @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n\r\n filterList: FilterModel[] = [];\r\n selectedFilters: FilterResponseModel[] = [];\r\n masterData: any;\r\n @ViewChild('popOver') public popover: NgbPopover;\r\n searchText = '';\r\n\r\n displayedColumns: string[] = ['tenantName', 'tenantSecurityGrp','tenantId', 'lastModifiedBy', 'action'];\r\n destroyed = new Subject();\r\n\r\n constructor(\r\n public _router: Router,\r\n public globals: Globals,\r\n public globalService: GlobalService,\r\n public httpClientObj: HttpClient,\r\n private readonly adminService: adminService,\r\n private readonly refinaryService: RefineryService,\r\n public dialog: MatDialog) {\r\n const emptyList: any[] = [];\r\n this.tenantListDetails = new MatTableDataSource(emptyList);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.isLoading = true;\r\n this.fetchTenantData(this);\r\n }\r\n\r\n fetchTenantData(thisRef: TenantComponent) {\r\n if (thisRef.refinaryService.currentRefinery) {\r\n thisRef.selectedRefinery = thisRef.refinaryService.currentRefinery.refineryId;\r\n thisRef.getTenantList(thisRef, thisRef.selectedRefinery);\r\n }\r\n \r\n thisRef.refinaryService.refinerySelected.subscribe((data: Refinery) => {\r\n thisRef.selectedRefinery = data.refineryId;\r\n thisRef.getTenantList(thisRef, thisRef.selectedRefinery);\r\n });\r\n }\r\n\r\n getTenantList(thisRef: TenantComponent, id) {\r\n thisRef.isLoading = true;\r\n thisRef.selectedFilters = [];\r\n thisRef.filterList=[];\r\n thisRef.adminService.getTenantList(id).subscribe((data: any): void => {\r\n if(data && data.length > 0){\r\n thisRef.tenantListDetails = new MatTableDataSource(data);\r\n thisRef.tenantListDetails.filterPredicate=(data,filter:string): boolean=>{\r\n return data.tenantName.toLowerCase().includes(filter)||data.tenantSecurityGrp.toLowerCase().includes(filter)||data.tenantId.toString().includes(filter)||data.lastModifiedBy.toLowerCase().includes(filter);\r\n }\r\n thisRef.masterData = [...data];\r\n if (thisRef.filterList.length === 0) {\r\n thisRef.createFilterList();\r\n }\r\n thisRef.tenantListDetails.sort = thisRef.sort;\r\n thisRef.tenantListDetails.paginator = thisRef.paginator;\r\n if (thisRef.globalService.isNotNull(thisRef.searchText)) {\r\n thisRef.globalService.applyFilter(thisRef.searchText, thisRef.tenantListDetails);\r\n } \r\n thisRef.isLoading = false;\r\n }\r\n else{\r\n thisRef.tenantListDetails.data = [];\r\n thisRef.isLoading = false;\r\n }\r\n }, (error: Error) => {\r\n console.log('Error while fetching tenant list', error.message);\r\n thisRef.isLoading = false;\r\n });\r\n }\r\n\r\n openDialog(mode, element: Tenant) {\r\n const dataToPass = { displayType: mode, data: element };\r\n this.globalService.openModelWindow(this.fetchTenantData, this, TenantPageComponent, '40%', 'custom-modalbox', dataToPass);\r\n return true;\r\n }\r\n\r\n deleteModel(thisRef: any) {\r\n this.keyVaultName = thisRef.tenantKeyvaultUrl.split(\"https://\")[1].split(\".vault.azure.net\")[0];\r\n this.tenantId = thisRef.tenantId;\r\n let tenantname = thisRef.tenantName;\r\n this.adminService.GetResourceGroup(this.keyVaultName).subscribe((data: any): void => {\r\n this.resourceGroup = data.ResourceGroup;\r\n localStorage.setItem(\"delKV\", \"true\");\r\n const dataToPass = {\r\n title: 'Delete',\r\n isDelete: true,\r\n message: 'You are deleting the tenant [' + tenantname + ']
Delete its key vault [' + this.keyVaultName + '] as well from resource group [' + data.ResourceGroup + '] :'\r\n };\r\n this.selectedTenant = thisRef;\r\n this.globalService.openModelWindow(this.deleteModelAfterConfirmation, this, ConfirmModelComponent, '640px', 'confirm-modalbox', dataToPass);\r\n \r\n }, (error: Error) => {\r\n console.log('Error while fetching master component list', error.message);\r\n });\r\n\r\n\r\n }\r\n\r\n openComponent(element) {\r\n const queryParams = {\r\n searchText: element.tenantName\r\n };\r\n this._router.navigate(['/component', queryParams]);\r\n }\r\n\r\n openDataSource(element) {\r\n const queryParams = {\r\n searchText: element.tenantName\r\n };\r\n this._router.navigate(['/datasource', queryParams]);\r\n }\r\n\r\n setSearchText(filterValue: string) {\r\n filterValue = filterValue.trim().toLowerCase();\r\n this.searchText = filterValue;\r\n }\r\n\r\n /**\r\n * Displays confirmation after deletion\r\n * @param thisRef\r\n */\r\n deleteModelAfterConfirmation(thisRef: TenantComponent) {\r\n thisRef.adminService.deleteTenant(thisRef.tenantId, thisRef.keyVaultName, thisRef.resourceGroup, localStorage.getItem(\"delKV\")).subscribe(data => {\r\n if (data) {\r\n let message = 'Tenant [' + thisRef.selectedTenant.tenantName + '] deleted successfully!';\r\n if (localStorage.getItem(\"delKV\") == \"true\") {\r\n message = 'Tenant [' + thisRef.selectedTenant.tenantName + '] and key vault [' + thisRef.keyVaultName +'] deleted successfully!';\r\n }\r\n // Tenant < TenantName > and key vault < KeyVaultName > deleted successfully!\r\n thisRef.globalService.showAlert(AlertComponent, { success: true, message: message });\r\n thisRef.getTenantList(thisRef, thisRef.selectedRefinery);\r\n thisRef.isLoading = false;\r\n } else {\r\n thisRef.deleteFailed(thisRef);\r\n }\r\n }, error => {\r\n thisRef.deleteFailed(thisRef);\r\n });\r\n\r\n }\r\n\r\n deleteFailed(thisRef: TenantComponent) {\r\n thisRef.globalService.showAlert(AlertComponent, { success: false, message: 'Tenant ' + thisRef.selectedTenant.tenantName + ' could not be deleted!' });\r\n thisRef.getTenantList(thisRef, thisRef.selectedRefinery);\r\n thisRef.isLoading = false;\r\n\r\n }\r\n\r\n createTenant() {\r\n const dataToPass = { displayType: 'add', data: {} };\r\n this.globalService.openModelWindow(this.fetchTenantData, this, TenantPageComponent, '40%', 'custom-modalbox', dataToPass);\r\n return true;\r\n }\r\n\r\n /**\r\n * Returns data from child filter component\r\n * @param event\r\n */\r\n filterResponse(event) {\r\n const filterRes: FilterResponseModel = event.filterResponse;\r\n this.tenantListDetails.data = this.globalService.conditionalDataFiltering(filterRes, this.tenantListDetails.data);\r\n this.selectedFilters.push(filterRes);\r\n if (this.popover.isOpen()) {\r\n this.popover.close();\r\n }\r\n }\r\n\r\n /**Creates data for filter list */\r\n createFilterList() {\r\n for (let a = 0; a < this.displayedColumns.length - 1; a++) {\r\n const tempFilter: FilterModel = new FilterModel();\r\n let unique;\r\n tempFilter.fieldType = FilterFieldTypes.text;\r\n tempFilter.fieldName = this.globalService.replaceDisplayText(this.displayedColumns[a]);\r\n if (this.displayedColumns[a] === 'tenantName') {\r\n unique = Array.from(new Set(this.tenantListDetails.data.map(a => a.tenantName)));\r\n } else if (this.displayedColumns[a] === 'tenantSecurityGrp') {\r\n unique = Array.from(new Set(this.tenantListDetails.data.map(a => a.tenantSecurityGrp)));\r\n } else if (this.displayedColumns[a] === 'tenantId') {\r\n tempFilter.fieldType = FilterFieldTypes.values;\r\n unique = Array.from(new Set(this.tenantListDetails.data.map(a => a.tenantId)));\r\n } else if (this.displayedColumns[a] === 'lastModifiedBy') {\r\n unique = Array.from(new Set(this.tenantListDetails.data.map(a => a.lastModifiedBy)));\r\n }\r\n tempFilter.values = unique;\r\n this.filterList.push(tempFilter);\r\n }\r\n }\r\n\r\n /**\r\n * Removes that filter\r\n * @param selectedFilter\r\n */\r\n remove(selectedFilter: FilterResponseModel): void {\r\n const i = this.selectedFilters.indexOf(selectedFilter);\r\n if (i >= 0) {\r\n this.selectedFilters.splice(i, 1);\r\n this.tenantListDetails.data = this.masterData.slice(0);\r\n if (this.selectedFilters.length > 0) {\r\n for (const ele of this.selectedFilters) {\r\n this.tenantListDetails.data = this.globalService.conditionalDataFiltering(ele, this.tenantListDetails.data);\r\n }\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n localStorage.removeItem(\"delKV\");\r\n this.destroyed.next();\r\n this.destroyed.complete();\r\n }\r\n\r\n}\r\n","export const environment = {\r\n production: process.env[\"ISPRODUCTION\"],\r\n clientId: process.env[\"AUTH_CLIENT_CLIENTID\"],\r\n authority: \"https://login.microsoftonline.com/329e91b0-e21f-48fb-a071-456717ecc28e\",\r\n validateAuthority: true,\r\n redirectUri: process.env[\"AUTH_CLIENT_REDIRECTURI\"],\r\n postLogoutRedirectUri: process.env[\"AUTH_CLIENT_POSTLOGOUTREDIRECTURI\"],\r\n navigateToLoginRequestUrl: true,\r\n platformAdminApi_client_resourceUri: process.env[\"PLATFORMADMINAPI_CLIENT_RESOURCEURI\"],\r\n platformAdminApi_client_resourceScope: process.env[\"PLATFORMADMINAPI_CLIENT_RESOURCESCOPE\"],\r\n groups_client_TenantAdminGroupId: process.env[\"GROUPS_CLIENT_TENANTADMINGROUPID\"],\r\n graphApi_client_resourceUri: \"https://graph.microsoft.com/v1.0/me/memberOf\",\r\n graphApi_client_resourceScope: \"User.Read\",\r\n cache_client: {\r\n cacheLocation: \"localStorage\"\r\n },\r\n ReleaseDetails: {\r\n Version: \"1.0.0\",\r\n DateOfBuild: \"NA\",\r\n BuildNumber: \"NA\"\r\n },\r\n subscription: process.env[\"SUBSCRIPTION\"],\r\n environment: process.env[\"ENVIRONMENT\"],\r\n platformHomeUrl: process.env[\"PLATFORMHOMEURL\"],\r\n platformHubUrl: process.env[\"PLATFORMHUBURL\"],\r\n appInsightKey: process.env[\"APPINSIGHTKEY\"],\r\n platformDocumentation: process.env[\"PLATFORMDOCUMENTATION\"]\r\n};\r\n","
\r\n
\r\n \r\n
\r\n
\r\n Create Notification Subscription\r\n View Notification Subscription\r\n Edit Notification Subscription\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n It should be a https URL.\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n\t\t\t\t\t Success \r\n \r\n Failed\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n ","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { AlertComponent } from 'src/app/common/alert/alert.component';\r\nimport { NotificationSubscription } from '../../models/notification-subscription.model';\r\nimport { adminService } from 'src/app/services/admin.service';\r\nimport { GlobalService } from 'src/app/services/global.service';\r\nimport { RefineryService } from 'src/app/services/refinery.service';\r\nimport { Tenant } from 'src/app/models/tenant.model';\r\nimport { NotificationSubscriptionCategory } from 'src/app/models/interfaces/notificationSubscriptionCategory';\r\nimport { ReportScheduler } from 'src/app/models/interfaces/reportScheduler';\r\n\r\n@Component({\r\n selector: 'app-notification-page',\r\n templateUrl: './notification-page.component.html',\r\n styleUrls: ['./notification-page.component.css']\r\n})\r\nexport class NotificationPageComponent implements OnInit {\r\n isLoading = false;\r\n tenantList: Tenant[];\r\n categoryList: NotificationSubscriptionCategory[];\r\n schedulerList: ReportScheduler[];\r\n\r\n public notificationDetailForm = new UntypedFormGroup({ \r\n tenantId: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n notificationCategoryId: new UntypedFormControl({ value: '', disabled: false }, Validators.required),\r\n channelName: new UntypedFormControl({ value: '', disabled: false }),\r\n webHookUrl: new UntypedFormControl({ value: '', disabled: false }), \r\n successNotification: new UntypedFormControl({ value: false, disabled: false }),\r\n failureNotification: new UntypedFormControl({ value: false, disabled: false }),\r\n reportScheduleId: new UntypedFormControl({ value: '', disabled: false }) \r\n });\r\n constructor(public globalService: GlobalService, public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: any, private readonly adminService: adminService, private readonly refineryService: RefineryService) { }\r\n\r\n ngOnInit(): void {\r\n this.loadTenantList();\r\n this.loadNotificationCategoryList();\r\n this.loadReportScheduler();\r\n this.loadNotificationPageData();\r\n }\r\n\r\n loadNotificationPageData() {\r\n this.isLoading = true;\r\n if (this.globalService.isNotNullObject(this.data.data) && this.data.displayType !== 'add') {\r\n let disableMode = false;\r\n let isTenantDisabled = false;\r\n if (this.data.displayType === 'view') {\r\n disableMode = true; \r\n isTenantDisabled = true; \r\n }\r\n if (this.data.displayType === 'edit') {\r\n isTenantDisabled = true;\r\n } \r\n this.notificationDetailForm = new UntypedFormGroup({ \r\n tenantId: new UntypedFormControl({ value: this.data.data.tenantId, disabled: isTenantDisabled }, Validators.required),\r\n notificationCategoryId: new UntypedFormControl({ value: this.data.data.notificationCategoryId, disabled: isTenantDisabled }, Validators.required),\r\n channelName: new UntypedFormControl({ value: this.data.data.channelName, disabled: disableMode }),\r\n webHookUrl: new UntypedFormControl({ value: this.data.data.webhookUrl, disabled: disableMode }),\r\n successNotification: new UntypedFormControl({ value: this.data.data.successNotification, disabled: disableMode }),\r\n failureNotification: new UntypedFormControl({ value: this.data.data.failedNotification, disabled: disableMode }),\r\n reportScheduleId: new UntypedFormControl({ value: this.data.data.reportScheduleId, disabled: disableMode }) \r\n });\r\n this.isLoading = false;\r\n } else {\r\n this.isLoading = false;\r\n }\r\n }\r\n\r\n /**Load Tenant List data for selected refinery*/\r\n loadTenantList() {\r\n this.adminService.getTenantList(this.refineryService.currentRefinery.refineryId).subscribe((data: any): void => {\r\n this.tenantList = data;\r\n \r\n }, (error: Error) => {\r\n console.log('Error while fetching tenant list', error.message);\r\n });\r\n }\r\n\r\n loadReportScheduler() {\r\n this.adminService.getReportScheduler().subscribe((data: ReportScheduler[]): void => {\r\n this.schedulerList = data; \r\n }, (error: Error) => {\r\n console.log('Error while fetching report scheduler list', error.message);\r\n });\r\n }\r\n\r\n loadNotificationCategoryList() {\r\n this.adminService.getNotificationCategory().subscribe((data: NotificationSubscriptionCategory[]): void => {\r\n this.categoryList = data;\r\n \r\n }, (error: Error) => {\r\n console.log('Error while fetching notification category list', error.message);\r\n });\r\n }\r\n\r\n /**Cancels the pop-up */\r\n onCancelClick(value: boolean): void {\r\n this.dialogRef.close(value);\r\n }\r\n\r\n disableSave() {\r\n const notificationCategoryId = this.notificationDetailForm.get('notificationCategoryId').value;\r\n this.notificationDetailForm.get('channelName').setValidators([Validators.required]);\r\n this.notificationDetailForm.get('webHookUrl').setValidators([Validators.required, Validators.pattern('https://([da-z.-]+).([a-z.]{2,6})([/w .-]*)??([^#\\n\\r]*)#?([^#\\n\\r]*)/?')]); \r\n if (notificationCategoryId === 1) { \r\n this.notificationDetailForm.get('reportScheduleId').clearValidators(); \r\n this.notificationDetailForm.get('reportScheduleId').updateValueAndValidity();\r\n }\r\n else if (notificationCategoryId !== 1) { \r\n this.notificationDetailForm.get('reportScheduleId').setValidators([Validators.required]);\r\n }\r\n \r\n const check: boolean = !this.notificationDetailForm.valid;\r\n return check;\r\n } \r\n\r\n saveSubscription() {\r\n const notificationData: NotificationSubscription = this.notificationDetailForm.value;\r\n notificationData.tenantId = this.notificationDetailForm.controls.tenantId.value;\r\n notificationData.notificationCategoryId = this.notificationDetailForm.controls.notificationCategoryId.value;\r\n notificationData.notificationCategoryName = this.categoryList.find((item: NotificationSubscriptionCategory) => item.notificationCategoryId === notificationData.notificationCategoryId).categoryName;\r\n \r\n notificationData.notificationSubscriptionId = this.globalService.isNotNullObject(this.data.data) && this.data.displayType !== 'add' ? this.data.data.notificationSubscriptionId : 0;\r\n if(notificationData.notificationCategoryId === 1) {\r\n notificationData.reportScheduleId = 0;\r\n } \r\n notificationData.emailDLName = '';\r\n notificationData.subscribedBy = this.globalService.loggedInUser;\r\n \r\n this.adminService.saveNotificationSubscription(notificationData, this.data.displayType).subscribe((data: any): void => {\r\n this.globalService.showAlert(AlertComponent, { success: true, message: 'Notification subscription saved successfully.' });\r\n this.onCancelClick(true);\r\n }, (error: Error) => {\r\n this.isLoading = false;\r\n this.globalService.showAlert(AlertComponent, { success: false, message: 'Notification subscription could not be saved.' });\r\n });\r\n }\r\n\r\n}\r\n","
\r\n
\r\n
\r\n Notification Subscription\r\n \r\n
\r\n
\r\n
\r\n \r\n search\r\n
\r\n
\r\n \r\n \r\n {{globalService.replaceDisplayText(element.selectedFieldName) + \" \" + element.selectedCondition + \" \" + element.selectedValue}}\r\n cancel\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n Subscription Id \r\n {{element.subscriptionId}} \r\n \r\n \r\n Tenant \r\n {{element.tenantName}} \r\n \r\n \r\n Tenant Id\r\n {{element.tenantId}} \r\n \r\n \r\n Notification Category\r\n {{element.categoryName}} \r\n \r\n \r\n Subscribed By \r\n {{element.subscribedBy}} \r\n \r\n \r\n Subscribed Date and Time \r\n {{element.subscribedDateTime | date: 'yyyy-MM-dd T HH:mm:ss'}} \r\n \r\n \r\n Action\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n There are no records to display.\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n ","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { ComponentComponent } from './component/component.component';\r\nimport { DatasourceComponent } from './datasource/datasource.component';\r\nimport { MsalGuard }from '@azure/msal-angular';\r\nimport { OverageComponent } from './overage/overage.component';\r\nimport { GroupGuardService } from './services/group-guard.service';\r\nimport { TenantComponent } from './tenant/tenant.component';\r\nimport { environment } from 'src/environments/environment';\r\nimport { NotificationsComponent } from './notifications/notifications.component';\r\n\r\nlet enValue = environment;\r\n\r\nconst routes: Routes = [\r\n {\r\n path: 'overage',\r\n component: OverageComponent,\r\n canActivate: [\r\n MsalGuard,\r\n ]\r\n },\r\n {\r\n path: 'tenant',\r\n component: TenantComponent,\r\n canActivate: [\r\n MsalGuard,\r\n GroupGuardService\r\n ],\r\n data: {\r\n expectedGroups: [\r\n enValue.groups_client_TenantAdminGroupId\r\n ]\r\n }\r\n },\r\n {\r\n path: 'component',\r\n component: ComponentComponent,\r\n canActivate: [\r\n MsalGuard,\r\n GroupGuardService\r\n ],\r\n data: {\r\n expectedGroups: [\r\n enValue.groups_client_TenantAdminGroupId\r\n ]\r\n }\r\n },\r\n {\r\n path: 'component:searchText',\r\n component: ComponentComponent,\r\n canActivate: [\r\n MsalGuard,\r\n GroupGuardService\r\n ],\r\n data: {\r\n expectedGroups: [\r\n enValue.groups_client_TenantAdminGroupId\r\n ]\r\n }\r\n },\r\n {\r\n path: 'datasource',\r\n component: DatasourceComponent,\r\n canActivate: [\r\n MsalGuard,\r\n GroupGuardService\r\n ],\r\n data: {\r\n expectedGroups: [\r\n enValue.groups_client_TenantAdminGroupId\r\n ]\r\n }\r\n },\r\n {\r\n path: 'datasource:searchText',\r\n component: DatasourceComponent,\r\n canActivate: [\r\n MsalGuard,\r\n GroupGuardService\r\n ],\r\n data: {\r\n expectedGroups: [\r\n enValue.groups_client_TenantAdminGroupId\r\n ]\r\n }\r\n },\r\n {\r\n path: 'notifications',\r\n component: NotificationsComponent,\r\n canActivate: [\r\n MsalGuard,\r\n GroupGuardService\r\n ],\r\n data: {\r\n expectedGroups: [\r\n enValue.groups_client_TenantAdminGroupId\r\n ]\r\n }\r\n },\r\n {\r\n path: '**',\r\n redirectTo: 'tenant',\r\n pathMatch: 'full'\r\n }\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes), RouterModule.forRoot(routes, { useHash: false })],\r\n exports: [RouterModule]\r\n})\r\nexport class AppRoutingModule { }\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { Router } from '@angular/router';\r\nimport { NgbPopover } from '@ng-bootstrap/ng-bootstrap';\r\nimport { Subject } from 'rxjs';\r\nimport { FilterFieldTypes } from '../common/common-constants';\r\nimport { FilterModel } from '../models/filter/filter-request.model';\r\nimport { FilterResponseModel } from '../models/filter/filter-response.model';\r\nimport { Globals } from '../models/globals.model';\r\nimport { Refinery } from '../models/refinery.model';\r\nimport { Tenant } from '../models/tenant.model';\r\nimport { adminService } from '../services/admin.service';\r\nimport { GlobalService } from '../services/global.service';\r\nimport { RefineryService } from '../services/refinery.service';\r\nimport { AlertComponent } from '../common/alert/alert.component';\r\nimport { ConfirmModelComponent } from '../common/confirm-model/confirm-model.component';\r\nimport { NotificationPageComponent } from '../view-page/notification-page/notification-page.component';\r\nimport { DatePipe } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'app-notifications',\r\n templateUrl: './notifications.component.html',\r\n styleUrls: ['./notifications.component.scss']\r\n})\r\nexport class NotificationsComponent implements OnInit {\r\n isLoading = false;\r\n notificationListDetails: any;\r\n selectedRefinery; \r\n subscriptionId: any; \r\n @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n\r\n filterList: FilterModel[] = [];\r\n selectedFilters: FilterResponseModel[] = [];\r\n masterData: any;\r\n @ViewChild('popOver') public popover: NgbPopover;\r\n searchText = '';\r\n\r\n displayedColumns: string[] = ['subscriptionId', 'tenantName', 'tenantId', 'categoryName', 'subscribedBy', 'subscribedDateTime', 'action'];\r\n destroyed = new Subject();\r\n\r\n constructor(\r\n private readonly datePipe: DatePipe,\r\n public _router: Router,\r\n public globals: Globals,\r\n public globalService: GlobalService,\r\n public httpClientObj: HttpClient,\r\n private readonly adminService: adminService,\r\n private readonly refinaryService: RefineryService,\r\n public dialog: MatDialog) {\r\n const emptyList: any[] = [];\r\n this.notificationListDetails = new MatTableDataSource(emptyList);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.isLoading = true;\r\n this.fetchSubscriptionData(this);\r\n }\r\n\r\n fetchSubscriptionData(thisRef: NotificationsComponent) {\r\n if (thisRef.refinaryService.currentRefinery) { \r\n thisRef.selectedRefinery = thisRef.refinaryService.currentRefinery.refineryId;\r\n thisRef.getNotificationSubscriptionList(thisRef, thisRef.selectedRefinery);\r\n }\r\n \r\n thisRef.refinaryService.refinerySelected.subscribe((data: Refinery) => {\r\n thisRef.selectedRefinery = data.refineryId;\r\n thisRef.getNotificationSubscriptionList(thisRef, thisRef.selectedRefinery);\r\n });\r\n }\r\n\r\n getNotificationSubscriptionList(thisRef: NotificationsComponent, id) {\r\n thisRef.isLoading = true;\r\n thisRef.selectedFilters = [];\r\n thisRef.filterList=[];\r\n thisRef.adminService.getNotificationSubscriptionList(id).subscribe((data: any): void => {\r\n if(data && data.length > 0){\r\n thisRef.notificationListDetails = new MatTableDataSource(data);\r\n thisRef.notificationListDetails.filterPredicate=(data,filter:string): boolean=>{\r\n return data.subscriptionId.toString().includes(filter)||data.tenantName.toLowerCase().includes(filter)||data.tenantId.toString().includes(filter)||data.categoryName.toLowerCase().includes(filter)||data.subscribedBy.toLowerCase().includes(filter)||this.datePipe.transform(data.subscribedDateTime,'yyyy-MM-dd T HH:mm:ss').toLowerCase().includes(filter);\r\n }\r\n thisRef.masterData = [...data];\r\n if (thisRef.filterList.length === 0) {\r\n thisRef.createFilterList();\r\n }\r\n thisRef.notificationListDetails.sort = thisRef.sort;\r\n thisRef.notificationListDetails.paginator = thisRef.paginator;\r\n if (thisRef.globalService.isNotNull(thisRef.searchText)) {\r\n thisRef.globalService.applyFilter(thisRef.searchText, thisRef.notificationListDetails);\r\n } \r\n thisRef.isLoading = false;\r\n }\r\n else{\r\n thisRef.notificationListDetails.data = [];\r\n thisRef.isLoading = false;\r\n }\r\n }, (error: Error) => {\r\n console.log('Error while fetching notification subscription list', error.message);\r\n thisRef.isLoading = false;\r\n });\r\n }\r\n\r\n openDialog(mode, element: any) { \r\n this.adminService.getNotificationById(element.subscriptionId).subscribe((result: any) => { \r\n result.notificationSubscriptionId = element.subscriptionId;\r\n const dataToPass = { displayType: mode, data: result};\r\n this.globalService.openModelWindow(this.fetchSubscriptionData, this, NotificationPageComponent, '40%', 'custom-modalbox', dataToPass);\r\n return true;\r\n });\r\n } \r\n\r\n deleteNotification(element) {\r\n const dataToPass = {\r\n title: 'Delete',\r\n isDelete: true,\r\n message: 'Do you really want to delete the notification subscription ID ['+ element.subscriptionId +'] of tenant ['+ element.tenantName +']?'\r\n };\r\n this.subscriptionId = element.subscriptionId;\r\n this.globalService.openModelWindow(this.deleteNotificationAfterConfirmation, this, ConfirmModelComponent, '460px', 'confirm-modalbox', dataToPass);\r\n }\r\n\r\n /**\r\n * Displays confirmation after deletion\r\n * @param thisRef\r\n */\r\n deleteNotificationAfterConfirmation(thisRef: NotificationsComponent) {\r\n thisRef.adminService.deleteNotificationSubscription(thisRef.subscriptionId).subscribe(data => {\r\n if (data) {\r\n thisRef.globalService.showAlert(AlertComponent, { success: true, message: 'Notification subscription ID ['+ thisRef.subscriptionId +'] deleted successfully!' });\r\n thisRef.getNotificationSubscriptionList(thisRef, thisRef.selectedRefinery);\r\n thisRef.isLoading = false;\r\n } else {\r\n thisRef.deleteFailed(thisRef);\r\n }\r\n }, error => {\r\n thisRef.deleteFailed(thisRef);\r\n });\r\n }\r\n\r\n deleteFailed(thisRef: NotificationsComponent) {\r\n thisRef.globalService.showAlert(AlertComponent, { success: false, message: 'This notification subscription could not be deleted!' });\r\n thisRef.getNotificationSubscriptionList(thisRef, thisRef.selectedRefinery);\r\n thisRef.isLoading = false;\r\n\r\n }\r\n\r\n setSearchText(filterValue: string) {\r\n filterValue = filterValue.trim().toLowerCase();\r\n this.searchText = filterValue;\r\n } \r\n\r\n createNotification() { \r\n const dataToPass = { displayType: 'add', data: {} };\r\n this.globalService.openModelWindow(this.fetchSubscriptionData, this, NotificationPageComponent, '40%', 'custom-modalbox', dataToPass);\r\n return true;\r\n } \r\n\r\n /**Creates data for filter list */\r\n createFilterList() {\r\n for (let a = 0; a < this.displayedColumns.length - 1; a++) {\r\n const tempFilter: FilterModel = new FilterModel();\r\n let unique;\r\n tempFilter.fieldType = FilterFieldTypes.text;\r\n tempFilter.fieldName = this.globalService.replaceDisplayText(this.displayedColumns[a]);\r\n if (this.displayedColumns[a] === 'subscriptionId') {\r\n unique = Array.from(new Set(this.notificationListDetails.data.map(a => a.subscriptionId)));\r\n } else if (this.displayedColumns[a] === 'tenantName') {\r\n unique = Array.from(new Set(this.notificationListDetails.data.map(a => a.tenantName)));\r\n } else if (this.displayedColumns[a] === 'tenantId') {\r\n tempFilter.fieldType = FilterFieldTypes.values;\r\n unique = Array.from(new Set(this.notificationListDetails.data.map(a => a.tenantId)));\r\n } else if (this.displayedColumns[a] === 'categoryName') {\r\n unique = Array.from(new Set(this.notificationListDetails.data.map(a => a.categoryName)));\r\n } else if (this.displayedColumns[a] === 'subscribedBy') {\r\n unique = Array.from(new Set(this.notificationListDetails.data.map(a => a.subscribedBy)));\r\n } else if (this.displayedColumns[a] === 'subscribedDateTime') {\r\n unique = Array.from(new Set(this.notificationListDetails.data.map(a => a.subscribedDateTime)));\r\n }\r\n tempFilter.values = unique;\r\n this.filterList.push(tempFilter);\r\n }\r\n }\r\n\r\n /**\r\n * Removes that filter\r\n * @param selectedFilter\r\n */\r\n remove(selectedFilter: FilterResponseModel): void {\r\n const i = this.selectedFilters.indexOf(selectedFilter);\r\n if (i >= 0) {\r\n this.selectedFilters.splice(i, 1);\r\n this.notificationListDetails.data = this.masterData.slice(0);\r\n if (this.selectedFilters.length > 0) {\r\n for (const ele of this.selectedFilters) {\r\n this.notificationListDetails.data = this.globalService.conditionalDataFiltering(ele, this.notificationListDetails.data);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Returns data from child filter component\r\n * @param event\r\n */\r\n filterResponse(event) {\r\n const filterRes: FilterResponseModel = event.filterResponse;\r\n this.notificationListDetails.data = this.globalService.conditionalDataFiltering(filterRes, this.notificationListDetails.data);\r\n this.selectedFilters.push(filterRes);\r\n if (this.popover.isOpen()) {\r\n this.popover.close();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void { \r\n this.destroyed.next();\r\n this.destroyed.complete();\r\n }\r\n\r\n}\r\n","import { Component, Inject, Optional } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from \"@angular/material/dialog\";\r\n\r\nexport class DialogData {\r\n Version: string;\r\n BuildNumber: string;\r\n DateOfBuild: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-about',\r\n templateUrl: './about.component.html',\r\n styleUrls: ['./about.component.css']\r\n})\r\nexport class AboutComponent {\r\n\r\n constructor(\r\n @Optional() public dialogRef: MatDialogRef,\r\n @Optional() @Inject(MAT_DIALOG_DATA) public data: DialogData\r\n ) { }\r\n ngOnInit() {\r\n if (this.data == null) {\r\n this.data = new DialogData();\r\n }\r\n }\r\n // close the about dialog\r\n onNoClick(): void {\r\n this.dialogRef.close();\r\n }\r\n}\r\n","

About Release

\r\n
\r\n \r\n \r\n \r\n \r\n
Version{{data.Version}}
Build Number{{data.BuildNumber}}
Build Date{{data.DateOfBuild}}
\r\n
\r\n
\r\n
\r\n \r\n
\r\n","import { Injectable, NgZone } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { HttpService } from './../services/http.service';\r\nimport { Observable, of } from 'rxjs';\r\nimport { Globals } from '../models/globals.model';\r\nimport { SseService } from './sse-service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MLService {\r\n\r\n apiUri: string;\r\n graphUri: string;\r\n flowsheetUri: string;\r\n createMLWorkspace = 'AML/CreateAMLWorkspace';\r\n locationApi = 'Azure/GetAllRegions';\r\n saveModelMasterDataApi = 'api/SaveModelMasterData';\r\n getModelListApi = 'api/ListModel';\r\n getModelParametersApi = 'api/GetModelParameter';\r\n getConfigParameters = 'api/GetModelParameter';\r\n getDataSourcesApi = 'api/FlowsheetBuilder/GetDataSources';\r\n getDataSourceParametersApi = 'api/FlowsheetBuilder/GetDataSourceParameters';\r\n\r\n constructor(private readonly httpService: HttpService, private readonly globals: Globals, private readonly http: HttpClient,\r\n private readonly _zone: NgZone, private readonly _sseService: SseService) {\r\n this.apiUri = this.globals.config.platformAdminApi_client_resourceUri;\r\n this.graphUri = this.globals.config.graphApi_client_resourceUri;\r\n }\r\n\r\n getConfigParameter(name, version) {\r\n return this.http.get(this.apiUri + this.getConfigParameters + '/' + name + '/' + version);\r\n }\r\n \r\n getLocations() {\r\n return this.http.get(this.apiUri + this.locationApi);\r\n }\r\n\r\n CreateMLWorkspace(worksapceDetail) {\r\n return this.http.post(this.apiUri + this.createMLWorkspace, worksapceDetail);\r\n }\r\n\r\n saveModelMasterData(modelMasterData) {\r\n return this.http.post(this.apiUri + this.saveModelMasterDataApi, modelMasterData);\r\n }\r\n\r\n getModelList() {\r\n return this.http.get(this.apiUri + this.getModelListApi);\r\n }\r\n\r\n getModelParameters(modelId) {\r\n return this.http.get(this.apiUri + this.getModelParametersApi + '/' + modelId);\r\n }\r\n\r\n getDataSources() {\r\n return this.http.get(this.flowsheetUri + this.getDataSourcesApi);\r\n }\r\n\r\n getDataSourceParameters(dataSourceId) {\r\n const params = { dataSourceId: dataSourceId };\r\n return this.http.get(this.flowsheetUri + this.getDataSourceParametersApi, {\r\n params: params\r\n });\r\n }\r\n\r\n redirectTo(url) {\r\n window.location.href = url;\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule\r\n ]\r\n})\r\nexport class ThemeModule { }\r\nexport interface Theme {\r\n name: string;\r\n properties: any;\r\n}\r\n\r\nexport const light: Theme = {\r\n name: \"light\",\r\n properties: {\r\n \"--background-default\": \"#FFFFFF\",\r\n \"--background-item-box\": \"#FFFFFF\",\r\n \"--heading-item-box\": \"#000000\",\r\n \"--background-right-default\": \"#FFFFFF\",\r\n \"--background-chart-box\": \"#FFFFFF\",\r\n }\r\n};\r\n\r\nexport const dark: Theme = {\r\n name: \"dark\",\r\n properties: {\r\n \"--background-default\": \"#2C2C2C\",\r\n \"--background-item-box\": \"#576271\",\r\n \"--heading-item-box\": \"#FFFFFF\",\r\n \"--background-right-default\": \"#707070\",\r\n \"--background-chart-box\": \"#FFFFFF\",\r\n }\r\n};\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Theme, light, dark } from '../theme/theme.module';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ThemeService {\r\n private active: Theme = light;\r\n private readonly availableThemes: Theme[] = [light, dark];\r\n\r\n isDarkTheme(): boolean {\r\n return this.active.name === dark.name;\r\n }\r\n\r\n setDarkTheme(): void {\r\n this.setActiveTheme(dark);\r\n }\r\n\r\n setLightTheme(): void {\r\n this.setActiveTheme(light);\r\n }\r\n\r\n setActiveTheme(theme: Theme): void {\r\n this.active = theme;\r\n\r\n Object.keys(this.active.properties).forEach(property => {\r\n document.documentElement.style.setProperty(\r\n property,\r\n this.active.properties[property]\r\n );\r\n });\r\n }\r\n}\r\n","","import { Component, EventEmitter, OnInit, Output } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Router } from '@angular/router';\r\nimport * as $ from 'jquery';\r\nimport { MsalService }from '@azure/msal-angular';\r\nimport { AboutComponent } from '../about/about.component';\r\nimport { Globals } from '../models/globals.model';\r\nimport { GlobalService } from '../services/global.service';\r\nimport { MLService } from '../services/ml-service';\r\nimport { ThemeService } from '../services/theme.service';\r\nimport { RefineryService } from '../services/refinery.service';\r\nimport { Refinery } from '../models/refinery.model';\r\n\r\n@Component({\r\n selector: 'app-nav-bar',\r\n templateUrl: './nav-bar.component.html',\r\n styleUrls: ['./nav-bar.component.css']\r\n})\r\nexport class NavBarComponent implements OnInit {\r\n\r\n userName: string;\r\n userShortName: string;\r\n rbacName = '';\r\n countryCode: any;\r\n countryList: any;\r\n releaseDetails: any;\r\n\r\n unreadNotifications = 0;\r\n zeroNotification = false;\r\n errorNotification = false;\r\n hideNotificationNumber = false;\r\n dateString: string;\r\n notificationLimit = 10;\r\n refineryName: string;\r\n refinerytMap: Refinery[];\r\n\r\n constructor(private readonly authService: MsalService, public mlServie: MLService,\r\n public dialog: MatDialog, public globals: Globals, public globalService: GlobalService,\r\n private readonly refineryService: RefineryService,\r\n public themeService: ThemeService, public _router: Router) {\r\n this.countryList = [\r\n {\r\n 'Id': 1,\r\n 'Name': 'English',\r\n 'Code': 'EN',\r\n },\r\n ];\r\n }\r\n\r\n ngOnInit() {\r\n this.themeService.setDarkTheme();\r\n this.getReleaseDetails();\r\n this.countryCode = 'EN';\r\n $('#handberg').click(function () {\r\n $('.row-offcanvas').toggleClass('active');\r\n $('.collapse').toggleClass('in').toggleClass('hidden-xs').toggleClass('visible-xs');\r\n });\r\n\r\n $('#close-sidebar').click(function () {\r\n $('.page-wrapper').removeClass('toggled');\r\n });\r\n $('#show-sidebar').click(function () {\r\n $('.page-wrapper').addClass('toggled');\r\n }); \r\n this.getRefineriesList()\r\n }\r\n\r\ncallByRefineryNameNotMatch(){\r\n this.refinerytMap.forEach((u, index) => {\r\n if (this.refineryName === u.refineryName) {\r\n this.onRefineryChange(this.refinerytMap[index], false);\r\n }\r\n });\r\n}\r\n\r\ncallByRefineryName(){\r\n this.onRefineryChange(this.refinerytMap[0], false);\r\n this.refineryService.refinerySelected.next(this.refinerytMap[0]);\r\n}\r\n\r\n getRefineriesList() {\r\n if (!this.refinerytMap || this.refinerytMap == undefined || this.refinerytMap == null || this.refinerytMap.length == 0) {\r\n this.refineryService.getRefineries().subscribe((data: Refinery[]) => {\r\n this.refinerytMap = data;\r\n this.refinerytMap.sort((a: any, b: any) => (a.refineryName > b.refineryName ? 1 : -1));\r\n if (this.refineryName && this.refineryName !== this.refinerytMap[0].refineryName) {\r\n this.callByRefineryNameNotMatch();\r\n }\r\n else {\r\n this.callByRefineryName();\r\n }\r\n });\r\n } \r\n }\r\n\r\n logout() {\r\n this.authService.logout();\r\n }\r\n\r\n // show about dialog for version, build date and build number\r\n openAboutRelease(): void {\r\n this.dialog.open(AboutComponent, {\r\n data: this.releaseDetails,\r\n });\r\n \r\n }\r\n\r\n getReleaseDetails() {\r\n this.releaseDetails = this.globals.releaseDetails;\r\n }\r\n\r\n selectFlag(Code: any) {\r\n this.countryCode = Code;\r\n }\r\n\r\n toggleTheme() {\r\n if (this.themeService.isDarkTheme()) {\r\n this.themeService.setLightTheme();\r\n } else {\r\n this.themeService.setDarkTheme();\r\n }\r\n }\r\n\r\n /**\r\n * Used for switching tenants and redirection to particular page\r\n * @param tenant tenant to be updated\r\n */\r\n onRefineryChange(refinery: Refinery, isCallFromUI?: boolean) {\r\n this.refineryName = refinery.refineryName;\r\n this.refineryService.setCurrentRefinery(refinery);\r\n if(isCallFromUI){\r\n this.refineryService.refinerySelected.next(refinery);\r\n }\r\n this._router.navigate(['tenant']);\r\n }\r\n}\r\n\r\n","
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n 6)?'horizontalMenu':'verticalMenu'\" [disableClose]=\"true\" #sidenav mode=\"side\" class=\"example-sidenav\" [ngStyle]=\"{ 'width.em': sidenavWidth }\" opened=\"true\">\r\n \r\n \r\n
\r\n
Tenant
\r\n
\r\n
\r\n
Component
\r\n
\r\n
\r\n
Data Source
\r\n
\r\n
\r\n
Notifications
\r\n
\r\n
\r\n
\r\n
\r\n\r\n 6)?'collapsedMatSidenavContent':'non-collapsedMatSidenavContent'\">\r\n
\r\n \r\n
\r\n
\r\n\r\n\r\n
\r\n \r\n","import { Component, HostListener, Inject, Input, OnInit } from '@angular/core';\r\nimport { UntypedFormGroup } from '@angular/forms';\r\nimport { Router } from '@angular/router';\r\nimport { AuthenticationResult, EventMessage, EventType, InteractionType, PopupRequest } from '@azure/msal-browser';\r\nimport { Subject } from 'rxjs';\r\nimport { concatMap, filter, takeUntil } from 'rxjs/operators';\r\nimport { Globals } from './models/globals.model';\r\nimport { MsalBroadcastService, MsalService }from '@azure/msal-angular';\r\nimport { MSAL_GUARD_CONFIG }from '@azure/msal-angular';\r\nimport { MsalGuardConfiguration }from '@azure/msal-angular';\r\nimport { GlobalService } from './services/global.service';\r\nimport { GraphService } from './services/graph.service';\r\nimport { HttpService } from './services/http.service';\r\nimport { OverageService } from './services/overage.service';\r\nimport { ApplicationInsights } from '@microsoft/applicationinsights-web';\r\nimport { RefineryService } from './services/refinery.service';\r\n\r\n@Component({\r\n selector: 'app-root',\r\n templateUrl: './app.component.html',\r\n styleUrls: ['./app.component.css']\r\n})\r\n\r\nexport class AppComponent implements OnInit {\r\n\r\n isLoading: boolean;\r\n response: any;\r\n @Input('ngModel') model: any;\r\n disableTooltip = false;\r\n sidenavWidth = 3.5;\r\n showCross = false;\r\n isAuthorize = false;\r\n isActivate = true;\r\n appInsights: ApplicationInsights;\r\n appInsightKey: any;\r\n\r\n private readonly _destroying$ = new Subject();\r\n\r\n constructor(private readonly authService: MsalService,\r\n @Inject(MSAL_GUARD_CONFIG) private readonly msalGuardConfig: MsalGuardConfiguration,\r\n private readonly msalBroadcastService: MsalBroadcastService,\r\n private readonly grphService: GraphService,\r\n private readonly overageService: OverageService,\r\n public _router: Router, private readonly httpService: HttpService,\r\n private readonly refineryService: RefineryService,\r\n private readonly globals: Globals, private readonly globalService: GlobalService) {\r\n this.countryList = [\r\n {\r\n 'Id': 1,\r\n 'Name': 'Dutch',\r\n 'Code': 'NL',\r\n },\r\n {\r\n 'Id': 2,\r\n 'Name': 'English',\r\n 'Code': 'EN',\r\n },\r\n {\r\n 'Id': 3,\r\n 'Name': 'French',\r\n 'Code': 'FR',\r\n },\r\n {\r\n 'Id': 4,\r\n 'Name': 'German',\r\n 'Code': 'DE',\r\n },\r\n ];\r\n }\r\n\r\n\r\n title = 'Platform';\r\n countryList: any;\r\n data: any;\r\n countryCode: any;\r\n isMobileResolution: boolean;\r\n screenWidth: any;\r\n\r\n @HostListener('window:resize', ['$event'])\r\n getScreenSize() {\r\n this.screenWidth = window.innerWidth;\r\n if (this.screenWidth < 768) {\r\n this.isMobileResolution = true;\r\n } else {\r\n this.isMobileResolution = false;\r\n }\r\n }\r\n\r\n public ngOnInit() {\r\n this.isLoading = true;\r\n this.initialize();\r\n this.countryCode = 'EN';\r\n\r\n }\r\n\r\n initialize() {\r\n this.msalBroadcastService.msalSubject$\r\n .pipe(\r\n filter((msg: EventMessage) => msg.eventType === EventType.LOGIN_SUCCESS || msg.eventType === EventType.ACQUIRE_TOKEN_SUCCESS),\r\n takeUntil(this._destroying$),\r\n concatMap(async () => this.checkoutAccount())\r\n ).subscribe()\r\n }\r\n\r\n login() {\r\n if (this.msalGuardConfig.authRequest){\r\n this.authService.loginPopup({...this.msalGuardConfig.authRequest} as PopupRequest)\r\n .subscribe((response: AuthenticationResult) => {\r\n this.authService.instance.setActiveAccount(response.account);\r\n this.checkoutAccount();\r\n });\r\n } else {\r\n this.authService.loginPopup()\r\n .subscribe((response: AuthenticationResult) => {\r\n this.authService.instance.setActiveAccount(response.account);\r\n });\r\n }\r\n }\r\n\r\n checkoutAccount() {\r\n let activeAccount = this.authService.instance.getActiveAccount();\r\n\r\n if (!activeAccount && this.authService.instance.getAllAccounts().length > 0) {\r\n let accounts = this.authService.instance.getAllAccounts();\r\n this.authService.instance.setActiveAccount(accounts[0]);\r\n }\r\n \r\n let userAccount = this.authService.instance.getAllAccounts()[0];\r\n if (userAccount?.name && this.globals.userName == '') {\r\n this.globals.userName = userAccount.name;\r\n let idParts = userAccount.name.split(' ');\r\n if (idParts.length > 1 ) { \r\n this.globals.userShortName = idParts[0].charAt(0) + idParts[1].charAt(0);\r\n this.globalService.loggedInUser = idParts[0] + ' ' + idParts[1];\r\n }\r\n else{\r\n this.globals.userShortName = idParts[0].charAt(0);\r\n this.globalService.loggedInUser = idParts[0];\r\n }\r\n\r\n this.globals.userEmail = userAccount.username;\r\n\r\n // call appinsight\r\n this.initAppInsight(this);\r\n if (this.globals.groups.length === 0) {\r\n this.overageService.readGraphGroups(this.authService, this.grphService, this.assignRole, this);\r\n }\r\n }\r\n }\r\n\r\n initAppInsight(thisRef: AppComponent) {\r\n const appInsightKey = (thisRef.globals.config.appInsightKey) ? thisRef.globals.config.appInsightKey : 'test';\r\n this.appInsights = new ApplicationInsights({\r\n config: {\r\n instrumentationKey: appInsightKey,\r\n enableAutoRouteTracking: true\r\n }\r\n });\r\n this.appInsights.loadAppInsights();\r\n this.setUserId();\r\n this.logPageView();\r\n }\r\n\r\n logPageView(name?: string, url?: string, properties?: any, measurements?: any) {\r\n this.appInsights.trackPageView({\r\n name: name,\r\n uri: url,\r\n properties: properties,\r\n measurements: measurements\r\n });\r\n }\r\n setUserId() {\r\n this.appInsights.setAuthenticatedUserContext(this.globals.userEmail);\r\n this.appInsights.context.user.id = this.globals.userEmail;\r\n }\r\n\r\n assignRole(thisRef: AppComponent) {\r\n thisRef.globals.groups.push(thisRef.globals.config.groups_client_TenantAdminGroupId);\r\n if (thisRef.grphService.user.groupIDs.includes(thisRef.globals.config.groups_client_TenantAdminGroupId)) {\r\n thisRef.globals.rbacName = 'Tenant Admin';\r\n } else {\r\n thisRef.globals.rbacName = 'User';\r\n }\r\n \r\n thisRef.refineryService.GetToken().subscribe((data: any): void => {\r\n thisRef.refineryService.getRefineryListFromServer();\r\n }\r\n );\r\n thisRef.isLoading = false;\r\n }\r\n\r\n // toggle side navigation drawer\r\n toggleCollapse() {\r\n if (this.sidenavWidth === 3.5) {\r\n this.disableTooltip = true;\r\n this.showCross = true;\r\n this.sidenavWidth = 15.5;\r\n } else {\r\n this.disableTooltip = false;\r\n this.showCross = false;\r\n this.sidenavWidth = 3.5;\r\n }\r\n }\r\n\r\n isActive(label): boolean {\r\n if (this._router.url.includes(label)) {\r\n return this._router.url.includes(label);\r\n }\r\n }\r\n\r\n selectFlag(Code: any) {\r\n this.countryCode = Code;\r\n }\r\n\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { HttpInterceptor, HttpXsrfTokenExtractor } from \"@angular/common/http\";\r\nimport { HttpEvent, HttpHandler, HttpRequest } from \"@angular/common/http\";\r\nimport { Observable } from \"rxjs\";\r\n\r\n\r\n@Injectable()\r\nexport class XsrfInterceptor implements HttpInterceptor {\r\n constructor(private readonly xsrfTokenExtractor: HttpXsrfTokenExtractor) {\r\n }\r\n\r\n intercept(req: HttpRequest, next: HttpHandler): Observable> {\r\n // load token\r\n \r\n\r\n let xsrfToken = this.xsrfTokenExtractor.getToken();\r\n if (req.url.indexOf('/api') > -1) {\r\n if (xsrfToken != null) {\r\n // create a copy of the request and\r\n // append the XSRF token to the headers list\r\n const authorizedRequest = req.clone({\r\n withCredentials: false,\r\n headers: req.headers.set('X-XSRF-TOKEN', xsrfToken)\r\n });\r\n\r\n return next.handle(authorizedRequest);\r\n } else {\r\n return next.handle(req);\r\n }\r\n }\r\n else {\r\n return next.handle(req);\r\n }\r\n }\r\n}\r\n","import { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { APP_BASE_HREF } from '@angular/common';\r\nimport { HttpClient, HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { APP_INITIALIZER, CUSTOM_ELEMENTS_SCHEMA, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatNativeDateModule, MatRippleModule } from '@angular/material/core';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { BrowserCacheLocation, InteractionType, IPublicClientApplication, PublicClientApplication } from '@azure/msal-browser';\r\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { NgMultiSelectDropDownModule } from 'ng-multiselect-dropdown';\r\nimport { OwlDateTimeModule, OwlNativeDateTimeModule } from '@danielmoncada/angular-datetime-picker';\r\nimport { TypeaheadModule } from 'ngx-bootstrap/typeahead';\r\nimport { AboutComponent } from './about/about.component';\r\nimport { AppRoutingModule } from './app-routing.module';\r\nimport { MatTableExporterModule } from 'mat-table-exporter';\r\n\r\n/** Components*/\r\nimport { AppComponent } from './app.component';\r\nimport { AlertComponent } from './common/alert/alert.component';\r\nimport { ConfirmModelComponent } from './common/confirm-model/confirm-model.component';\r\nimport { Globals } from './models/globals.model';\r\nimport { MsalBroadcastService, MsalGuard, MsalInterceptor, MsalService, MSAL_INSTANCE }from '@azure/msal-angular';\r\nimport { MSAL_GUARD_CONFIG, MSAL_INTERCEPTOR_CONFIG }from '@azure/msal-angular';\r\nimport { MsalGuardConfiguration }from '@azure/msal-angular';\r\nimport { MsalInterceptorConfiguration }from '@azure/msal-angular';\r\nimport { NavBarComponent } from './nav-bar/nav-bar.component';\r\nimport { OverageComponent } from './overage/overage.component';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\n\r\n/** Services */\r\nimport { GlobalService } from './services/global.service';\r\nimport { HttpService } from './services/http.service';\r\nimport { AddFilterComponent } from './common/add-filter/add-filter.component';\r\nimport { TenantComponent } from './tenant/tenant.component';\r\nimport { ComponentComponent } from './component/component.component';\r\nimport { DatasourceComponent } from './datasource/datasource.component';\r\nimport { TenantPageComponent } from './view-page/tenant-page/tenant-page.component';\r\nimport { ComponentPageComponent } from './view-page/component-page/component-page.component';\r\nimport { DatasourcePageComponent } from './view-page/datasource-page/datasource-page.component';\r\nimport { KeyvaultComponent } from './keyvault/keyvault.component';\r\nimport { XsrfInterceptor } from './services/xsrf.interceptor';\r\nimport { environment } from 'src/environments/environment';\r\nimport { NotificationsComponent } from './notifications/notifications.component';\r\nimport { NotificationPageComponent } from './view-page/notification-page/notification-page.component';\r\n\r\nimport { DatePipe } from '@angular/common';\r\n\r\nlet enValue = environment;\r\n// checks if the app is running on IE\r\nexport const isIE = window.navigator.userAgent.indexOf('MSIE ') > -1 || window.navigator.userAgent.indexOf('Trident/') > -1;\r\n\r\nexport const protectedResourceMap: [string, string[]][] = [\r\n [enValue.platformAdminApi_client_resourceUri, [enValue.platformAdminApi_client_resourceScope]],\r\n [enValue.graphApi_client_resourceUri, [enValue.graphApi_client_resourceScope]]\r\n];\r\n\r\nfunction MSALInstanceFactory(): IPublicClientApplication {\r\n return new PublicClientApplication({\r\n auth: {\r\n clientId: enValue.clientId,\r\n redirectUri: enValue.redirectUri,\r\n authority: enValue.authority,\r\n postLogoutRedirectUri: enValue.postLogoutRedirectUri,\r\n },\r\n cache: {\r\n cacheLocation: enValue.cache_client.cacheLocation,\r\n storeAuthStateInCookie: isIE, // set to true for IE 11\r\n }\r\n });\r\n}\r\n\r\nfunction MSALInterceptorConfigFactory(): MsalInterceptorConfiguration {\r\n const protectedResourceMap = new Map>();\r\n protectedResourceMap.set(enValue.platformAdminApi_client_resourceUri, [enValue.platformAdminApi_client_resourceScope]);\r\n protectedResourceMap.set(enValue.graphApi_client_resourceUri, [enValue.graphApi_client_resourceScope]);\r\n\r\n return {\r\n interactionType: InteractionType.Popup,\r\n protectedResourceMap,\r\n };\r\n}\r\n\r\n@NgModule({\r\n declarations: [\r\n AppComponent,\r\n NavBarComponent,\r\n OverageComponent,\r\n AboutComponent,\r\n AlertComponent,\r\n ConfirmModelComponent,\r\n AddFilterComponent,\r\n TenantComponent,\r\n ComponentComponent,\r\n DatasourceComponent,\r\n TenantPageComponent,\r\n ComponentPageComponent,\r\n DatasourcePageComponent,\r\n KeyvaultComponent,\r\n NotificationsComponent,\r\n NotificationPageComponent, \r\n ],\r\n imports: [\r\n BrowserModule,\r\n HttpClientModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatStepperModule,\r\n MatToolbarModule,\r\n MatIconModule,\r\n MatTabsModule,\r\n MatSidenavModule,\r\n MatMenuModule,\r\n MatFormFieldModule,\r\n MatSelectModule,\r\n MatListModule,\r\n MatTooltipModule,\r\n MatTableModule,\r\n MatDialogModule,\r\n MatInputModule,\r\n MatSortModule,\r\n MatPaginatorModule,\r\n MatRadioModule,\r\n MatAutocompleteModule,\r\n MatChipsModule,\r\n BrowserAnimationsModule,\r\n NgbModule,\r\n NgMultiSelectDropDownModule.forRoot(),\r\n AppRoutingModule,\r\n TypeaheadModule.forRoot(),\r\n MatDatepickerModule,\r\n MatNativeDateModule,\r\n MatRippleModule,\r\n OwlDateTimeModule,\r\n OwlNativeDateTimeModule,\r\n MatCheckboxModule,\r\n DragDropModule,\r\n MatTableExporterModule,\r\n MatExpansionModule\r\n ],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],\r\n providers: [\r\n {\r\n provide: APP_INITIALIZER, \r\n useValue: () => new Promise(resolve =>\r\n setTimeout(resolve, 2000)\r\n ),\r\n multi: true\r\n },\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: XsrfInterceptor,\r\n multi: true\r\n },\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: MsalInterceptor,\r\n multi: true\r\n },\r\n {\r\n provide: MSAL_INSTANCE,\r\n useFactory: MSALInstanceFactory\r\n },\r\n {\r\n provide: MSAL_GUARD_CONFIG,\r\n useValue: {\r\n interactionType: InteractionType.Redirect\r\n } as MsalGuardConfiguration\r\n },\r\n {\r\n provide: MSAL_INTERCEPTOR_CONFIG,\r\n useFactory: MSALInterceptorConfigFactory\r\n },\r\n MsalService,\r\n MsalGuard,\r\n MsalBroadcastService,\r\n DatePipe,\r\n Globals,\r\n { provide: APP_BASE_HREF, useValue: '/' }, HttpService, GlobalService\r\n ],\r\n bootstrap: [AppComponent]\r\n})\r\nexport class AppModule {\r\n\r\n constructor(public globalService: GlobalService, public globals: Globals, public http: HttpClient) {\r\n\r\n // global config details\r\n this.globals.config = enValue;\r\n\r\n this.globals.releaseDetails = enValue.ReleaseDetails;\r\n\r\n // Check Subscription\r\n this.globals.subscription = enValue.subscription;\r\n this.globalService.environment = enValue.environment;\r\n\r\n // Check Tag Movement Environment\r\n //this.globalService.tagMovMsg = enValue.moveTagMasterMsg;\r\n }\r\n}\r\n","/***************************************************************************************************\r\n * Load `$localize` onto the global scope - used if i18n tags appear in Angular templates.\r\n */\r\nimport '@angular/localize/init';\r\nimport './polyfills.ts';\r\nimport { enableProdMode } from '@angular/core';\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\n\r\nimport { AppModule } from './app/app.module';\r\nimport { environment } from './environments/environment';\r\n\r\nexport function getBaseUrl() {\r\n return document.getElementsByTagName('base')[0].href;\r\n}\r\n\r\nconst providers = [\r\n { provide: 'BASE_URL', useFactory: getBaseUrl, deps: [] }\r\n];\r\n\r\nif (environment.production) {\r\n enableProdMode();\r\n}\r\n\r\nplatformBrowserDynamic(providers).bootstrapModule(AppModule)\r\n .catch(err => console.log(err));\r\n","var map = {\n\t\"./af\": 58685,\n\t\"./af.js\": 58685,\n\t\"./ar\": 254,\n\t\"./ar-dz\": 4312,\n\t\"./ar-dz.js\": 4312,\n\t\"./ar-kw\": 32614,\n\t\"./ar-kw.js\": 32614,\n\t\"./ar-ly\": 18630,\n\t\"./ar-ly.js\": 18630,\n\t\"./ar-ma\": 28674,\n\t\"./ar-ma.js\": 28674,\n\t\"./ar-ps\": 46235,\n\t\"./ar-ps.js\": 46235,\n\t\"./ar-sa\": 49032,\n\t\"./ar-sa.js\": 49032,\n\t\"./ar-tn\": 24730,\n\t\"./ar-tn.js\": 24730,\n\t\"./ar.js\": 254,\n\t\"./az\": 53052,\n\t\"./az.js\": 53052,\n\t\"./be\": 60150,\n\t\"./be.js\": 60150,\n\t\"./bg\": 63069,\n\t\"./bg.js\": 63069,\n\t\"./bm\": 13466,\n\t\"./bm.js\": 13466,\n\t\"./bn\": 18516,\n\t\"./bn-bd\": 90557,\n\t\"./bn-bd.js\": 90557,\n\t\"./bn.js\": 18516,\n\t\"./bo\": 26273,\n\t\"./bo.js\": 26273,\n\t\"./br\": 9588,\n\t\"./br.js\": 9588,\n\t\"./bs\": 19815,\n\t\"./bs.js\": 19815,\n\t\"./ca\": 83331,\n\t\"./ca.js\": 83331,\n\t\"./cs\": 21320,\n\t\"./cs.js\": 21320,\n\t\"./cv\": 72219,\n\t\"./cv.js\": 72219,\n\t\"./cy\": 68266,\n\t\"./cy.js\": 68266,\n\t\"./da\": 66427,\n\t\"./da.js\": 66427,\n\t\"./de\": 67435,\n\t\"./de-at\": 52871,\n\t\"./de-at.js\": 52871,\n\t\"./de-ch\": 12994,\n\t\"./de-ch.js\": 12994,\n\t\"./de.js\": 67435,\n\t\"./dv\": 82357,\n\t\"./dv.js\": 82357,\n\t\"./el\": 95649,\n\t\"./el.js\": 95649,\n\t\"./en-au\": 59961,\n\t\"./en-au.js\": 59961,\n\t\"./en-ca\": 19878,\n\t\"./en-ca.js\": 19878,\n\t\"./en-gb\": 3924,\n\t\"./en-gb.js\": 3924,\n\t\"./en-ie\": 70864,\n\t\"./en-ie.js\": 70864,\n\t\"./en-il\": 91579,\n\t\"./en-il.js\": 91579,\n\t\"./en-in\": 30940,\n\t\"./en-in.js\": 30940,\n\t\"./en-nz\": 16181,\n\t\"./en-nz.js\": 16181,\n\t\"./en-sg\": 44301,\n\t\"./en-sg.js\": 44301,\n\t\"./eo\": 85291,\n\t\"./eo.js\": 85291,\n\t\"./es\": 54529,\n\t\"./es-do\": 53764,\n\t\"./es-do.js\": 53764,\n\t\"./es-mx\": 12584,\n\t\"./es-mx.js\": 12584,\n\t\"./es-us\": 63425,\n\t\"./es-us.js\": 63425,\n\t\"./es.js\": 54529,\n\t\"./et\": 35203,\n\t\"./et.js\": 35203,\n\t\"./eu\": 70678,\n\t\"./eu.js\": 70678,\n\t\"./fa\": 83483,\n\t\"./fa.js\": 83483,\n\t\"./fi\": 96262,\n\t\"./fi.js\": 96262,\n\t\"./fil\": 52521,\n\t\"./fil.js\": 52521,\n\t\"./fo\": 34555,\n\t\"./fo.js\": 34555,\n\t\"./fr\": 63131,\n\t\"./fr-ca\": 88239,\n\t\"./fr-ca.js\": 88239,\n\t\"./fr-ch\": 21702,\n\t\"./fr-ch.js\": 21702,\n\t\"./fr.js\": 63131,\n\t\"./fy\": 267,\n\t\"./fy.js\": 267,\n\t\"./ga\": 23821,\n\t\"./ga.js\": 23821,\n\t\"./gd\": 71753,\n\t\"./gd.js\": 71753,\n\t\"./gl\": 4074,\n\t\"./gl.js\": 4074,\n\t\"./gom-deva\": 92762,\n\t\"./gom-deva.js\": 92762,\n\t\"./gom-latn\": 5969,\n\t\"./gom-latn.js\": 5969,\n\t\"./gu\": 82809,\n\t\"./gu.js\": 82809,\n\t\"./he\": 45402,\n\t\"./he.js\": 45402,\n\t\"./hi\": 315,\n\t\"./hi.js\": 315,\n\t\"./hr\": 10410,\n\t\"./hr.js\": 10410,\n\t\"./hu\": 38288,\n\t\"./hu.js\": 38288,\n\t\"./hy-am\": 67928,\n\t\"./hy-am.js\": 67928,\n\t\"./id\": 71334,\n\t\"./id.js\": 71334,\n\t\"./is\": 86959,\n\t\"./is.js\": 86959,\n\t\"./it\": 34864,\n\t\"./it-ch\": 51124,\n\t\"./it-ch.js\": 51124,\n\t\"./it.js\": 34864,\n\t\"./ja\": 36141,\n\t\"./ja.js\": 36141,\n\t\"./jv\": 29187,\n\t\"./jv.js\": 29187,\n\t\"./ka\": 42136,\n\t\"./ka.js\": 42136,\n\t\"./kk\": 94332,\n\t\"./kk.js\": 94332,\n\t\"./km\": 18607,\n\t\"./km.js\": 18607,\n\t\"./kn\": 84305,\n\t\"./kn.js\": 84305,\n\t\"./ko\": 70234,\n\t\"./ko.js\": 70234,\n\t\"./ku\": 16003,\n\t\"./ku-kmr\": 19619,\n\t\"./ku-kmr.js\": 19619,\n\t\"./ku.js\": 16003,\n\t\"./ky\": 75061,\n\t\"./ky.js\": 75061,\n\t\"./lb\": 32786,\n\t\"./lb.js\": 32786,\n\t\"./lo\": 66183,\n\t\"./lo.js\": 66183,\n\t\"./lt\": 50029,\n\t\"./lt.js\": 50029,\n\t\"./lv\": 24169,\n\t\"./lv.js\": 24169,\n\t\"./me\": 68577,\n\t\"./me.js\": 68577,\n\t\"./mi\": 68177,\n\t\"./mi.js\": 68177,\n\t\"./mk\": 50337,\n\t\"./mk.js\": 50337,\n\t\"./ml\": 65260,\n\t\"./ml.js\": 65260,\n\t\"./mn\": 52325,\n\t\"./mn.js\": 52325,\n\t\"./mr\": 14695,\n\t\"./mr.js\": 14695,\n\t\"./ms\": 75334,\n\t\"./ms-my\": 37151,\n\t\"./ms-my.js\": 37151,\n\t\"./ms.js\": 75334,\n\t\"./mt\": 63570,\n\t\"./mt.js\": 63570,\n\t\"./my\": 97963,\n\t\"./my.js\": 97963,\n\t\"./nb\": 88028,\n\t\"./nb.js\": 88028,\n\t\"./ne\": 86638,\n\t\"./ne.js\": 86638,\n\t\"./nl\": 50302,\n\t\"./nl-be\": 66782,\n\t\"./nl-be.js\": 66782,\n\t\"./nl.js\": 50302,\n\t\"./nn\": 33501,\n\t\"./nn.js\": 33501,\n\t\"./oc-lnc\": 50563,\n\t\"./oc-lnc.js\": 50563,\n\t\"./pa-in\": 50869,\n\t\"./pa-in.js\": 50869,\n\t\"./pl\": 65302,\n\t\"./pl.js\": 65302,\n\t\"./pt\": 49687,\n\t\"./pt-br\": 74884,\n\t\"./pt-br.js\": 74884,\n\t\"./pt.js\": 49687,\n\t\"./ro\": 79107,\n\t\"./ro.js\": 79107,\n\t\"./ru\": 33627,\n\t\"./ru.js\": 33627,\n\t\"./sd\": 30355,\n\t\"./sd.js\": 30355,\n\t\"./se\": 83427,\n\t\"./se.js\": 83427,\n\t\"./si\": 11848,\n\t\"./si.js\": 11848,\n\t\"./sk\": 54590,\n\t\"./sk.js\": 54590,\n\t\"./sl\": 20184,\n\t\"./sl.js\": 20184,\n\t\"./sq\": 56361,\n\t\"./sq.js\": 56361,\n\t\"./sr\": 78965,\n\t\"./sr-cyrl\": 81287,\n\t\"./sr-cyrl.js\": 81287,\n\t\"./sr.js\": 78965,\n\t\"./ss\": 25456,\n\t\"./ss.js\": 25456,\n\t\"./sv\": 70451,\n\t\"./sv.js\": 70451,\n\t\"./sw\": 77558,\n\t\"./sw.js\": 77558,\n\t\"./ta\": 51356,\n\t\"./ta.js\": 51356,\n\t\"./te\": 73693,\n\t\"./te.js\": 73693,\n\t\"./tet\": 21243,\n\t\"./tet.js\": 21243,\n\t\"./tg\": 42500,\n\t\"./tg.js\": 42500,\n\t\"./th\": 55768,\n\t\"./th.js\": 55768,\n\t\"./tk\": 77761,\n\t\"./tk.js\": 77761,\n\t\"./tl-ph\": 35780,\n\t\"./tl-ph.js\": 35780,\n\t\"./tlh\": 29590,\n\t\"./tlh.js\": 29590,\n\t\"./tr\": 33807,\n\t\"./tr.js\": 33807,\n\t\"./tzl\": 93857,\n\t\"./tzl.js\": 93857,\n\t\"./tzm\": 60654,\n\t\"./tzm-latn\": 8806,\n\t\"./tzm-latn.js\": 8806,\n\t\"./tzm.js\": 60654,\n\t\"./ug-cn\": 30845,\n\t\"./ug-cn.js\": 30845,\n\t\"./uk\": 19232,\n\t\"./uk.js\": 19232,\n\t\"./ur\": 47052,\n\t\"./ur.js\": 47052,\n\t\"./uz\": 77967,\n\t\"./uz-latn\": 32233,\n\t\"./uz-latn.js\": 32233,\n\t\"./uz.js\": 77967,\n\t\"./vi\": 98615,\n\t\"./vi.js\": 98615,\n\t\"./x-pseudo\": 12320,\n\t\"./x-pseudo.js\": 12320,\n\t\"./yo\": 31313,\n\t\"./yo.js\": 31313,\n\t\"./zh-cn\": 64490,\n\t\"./zh-cn.js\": 64490,\n\t\"./zh-hk\": 55910,\n\t\"./zh-hk.js\": 55910,\n\t\"./zh-mo\": 98262,\n\t\"./zh-mo.js\": 98262,\n\t\"./zh-tw\": 44223,\n\t\"./zh-tw.js\": 44223\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;"],"x_google_ignoreList":[52]}