ekangularbase
Version:
Authentication service for usermanagement(oidc client)
304 lines (238 loc) • 9.59 kB
text/typescript
import { Inject } from '@angular/core';
import { AuthService } from '../auth/auth.service';
import { HttpHeaders, HttpParams, HttpClient } from '@angular/common/http';
import * as signalR from '@aspnet/signalr';
import { Observable, BehaviorSubject } from 'rxjs';
import { Store, select, UPDATE } from '@ngrx/store';
// import { UPDATEE } from "./baseclass/UnifiedNotificationReducer";
// import { UnifiedNotificationObject } from "../interface/UnifiedNotificationObject";
import { UnifiedNotificationObjectClass } from './UnifiedNotification.service';
import { Http } from '@angular/http';
import { Headers} from '@angular/http';
import { RequestOptions } from '@angular/http';
import { ConnectionIndicationService } from '../auth/ConnectionIndication.service';
interface AppStateUnot {
unot: OcNotificationMod;
}
export class OcNotificationMod
{
statusName: string;
totalcount: number;
instance: OcNotificationFigure[];
}
export class OcNotificationFigure
{
statusName: string;
instanceCount: number;
}
export class OcBasedUnifiedNotificationService
{
connection: signalR.HubConnection;
public notificationModSub : BehaviorSubject<OcNotificationMod>;
totalcount: number;
totalcount$: Observable<number>;
notificationMod: OcNotificationMod;
statustypecount: number;
currentstatustypecount: number;
constructor( private authService: AuthService,
public http: HttpClient,
public httpg : Http,
public syncserviceUrl: string,
private store: Store<AppStateUnot>)
{
this.notificationModSub = new BehaviorSubject(<OcNotificationMod>{});
}
build()
{
// alert('sss');
this.connection = new signalR.HubConnectionBuilder()
.withUrl(this.syncserviceUrl + 'NotificationHub',
{ accessTokenFactory: () =>
this.authService.getAccessToken()
})
.build();
ConnectionIndicationService.ConnectionStatusChanged.subscribe(online =>
{
if (online)
{
this.start();
}else
{
this.stop();
}
});
this.connection.serverTimeoutInMilliseconds = 3600000;
return this.connection;
}
on()
{
this.connection.on('IOcStatusNotification', data => {
let status: string = data;
this.UpdateCount(status);
});
}
start()
{
// alert('sss3');
this.connection.start().then(() => {
console.log('OCStatus Notification connection started');
}).catch(err => {
// alert('Error while establishing connection');
});
}
off()
{
this.connection.off('IOcStatusNotification');
}
stop()
{
this.connection.stop().then(() => {
}).catch(function (err) {
// alert('Error while establishing connection');
});
}
public InitiateCount(statuslist: string[])
{
this.currentstatustypecount = 0;
this.statustypecount = statuslist.length;
this.totalcount = 0;
// alert(statuslist.length);
if (statuslist.length == 0) {
this.notificationMod = <OcNotificationMod>{};
this.notificationMod.totalcount = 0;
this.notificationModSub.next( this.notificationMod);
}
else {
for (let x in statuslist)
{
this.UpdateCount(statuslist[x]);
}
}
}
public UpdateCount(status: string)
{
this.StatusCount(status).subscribe(s =>
{
// alert(s.text());
var ss: number = JSON.parse(s.text());
if (this.notificationMod == null)
{
this.notificationMod = <OcNotificationMod>{};
}
if (this.notificationMod.instance != null)
{
}
else
{
this.notificationMod.instance = [];
}
var item = this.notificationMod.instance.find(x => x.statusName == status);
if (item == null)
{
var newitem: OcNotificationFigure = {instanceCount: ss, statusName: status};
this.totalcount += ss;
this.notificationMod.totalcount = this.totalcount;
this.notificationMod.instance.push(newitem);
}
else
{
var newitem: OcNotificationFigure = {instanceCount: ss, statusName: status};
this.notificationMod.instance.splice(this.notificationMod.instance.findIndex(s => s.statusName == status), 1);
this.notificationMod.instance.push(newitem);
var countnew: number = 0;
for (let x in this.notificationMod.instance)
{
countnew += this.notificationMod.instance[x].instanceCount;
}
this.totalcount = countnew;
this.notificationMod.totalcount = this.totalcount;
// unotres.instance.push(newitem);
}
this.currentstatustypecount += 1;
this.notificationMod.instance = this.notificationMod.instance.sort(
(n1, n2) =>
{return n2.instanceCount - n1.instanceCount ;
});
this.notificationMod.statusName = status;
this.notificationModSub.next( this.notificationMod);
// this.store.dispatch({ type: UPDATEE, value: unotres });
}
);
}
public StatusCount(status: string)
{
let header = new Headers({ 'Content-Type': 'application/json', 'Authorization': this.authService.getAuthorizationHeaderValue() });
header.append('OC', this.authService.getSelectedOc());
var optionss = new RequestOptions({ headers: header });
return this.httpg.get(this.syncserviceUrl + 'api/Notification/GetOcUnifiedNotificationCount?status=' + status,
optionss);
}
public GetNotificationList(status: string)
{
// console.log("456");
let header = new Headers({ 'Content-Type': 'application/json', 'Authorization': this.authService.getAuthorizationHeaderValue() });
header.append('OC', this.authService.getSelectedOc());
var optionss = new RequestOptions({ headers: header });
return this.httpg.get(this.syncserviceUrl + 'api/Notification/GetOcUnifiedNotificationObjects?status=' + status,
optionss);
}
public GetAllNotificationList() : Observable<UnifiedOcNotificationObjectClass[]>
{
var optionss = {
headers: new HttpHeaders({ 'Content-Type': 'application/json'
, 'Authorization': this.authService.getAuthorizationHeaderValue()
, 'OC': this.authService.getSelectedOc() }),
params: new HttpParams()
};
return this.http.get<UnifiedOcNotificationObjectClass[]>(this.syncserviceUrl
+ 'api/Notification/GetOcAllUnifiedNotificationList',
optionss);
}
public GetAllUnifiedNotificationList() : Observable<UnifiedOcNotificationObjectClass[]>
{
var optionss = {
headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Authorization': this.authService.getAuthorizationHeaderValue() }),
params: new HttpParams()
};
return this.http.get<UnifiedOcNotificationObjectClass[]>(this.syncserviceUrl + 'api/Notification/GetAllUnifiedNotificationList',
optionss);
}
public GetStatusList()
{
var optionss = {
headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Authorization': this.authService.getAuthorizationHeaderValue() }),
params: new HttpParams()
};
// alert('s');
return this.http.get<string[]>(this.syncserviceUrl + 'api/Notification/GetOcUnifiedNotificationStatus',
optionss);
}
public GetOcBasedUnifiedNotificationCountByModule(modulename: string): Observable<number>
{
var h = new HttpHeaders({ 'Content-Type': 'application/json'
, 'Authorization': this.authService.getAuthorizationHeaderValue()
});
var occodes = this.authService.getOcCodes();
for (let x in occodes)
{
// alert(occodes[x]);
h = h.append('OC', occodes[x] );
}
var optionss = {
headers: h,
params: new HttpParams()
};
// var optionss = {
// headers: new HttpHeaders({ 'Content-Type': 'application/json'
// ,'Authorization': this.authService.getAuthorizationHeaderValue()
// , 'OC': this.authService.getSelectedOc() }),
// params:new HttpParams()
// };
return this.http.get<any>(this.syncserviceUrl + 'api/Notification/GetOcUnifiedNotificationCountByModule?modulename=' + modulename,
optionss);
}
}
export class UnifiedOcNotificationObjectClass extends UnifiedNotificationObjectClass
{
oclist : string[]
}