57 lines
1.6 KiB
TypeScript
57 lines
1.6 KiB
TypeScript
import { inject, Injectable } from '@angular/core';
|
|
import { Policy } from '../models/policy';
|
|
import { Observable, of, map } from 'rxjs';
|
|
import { HermesClientService } from '../../hermes-client.service';
|
|
import EventService from './EventService';
|
|
|
|
@Injectable({
|
|
providedIn: 'root'
|
|
})
|
|
export default class PolicyService {
|
|
private readonly client = inject(HermesClientService);
|
|
private readonly events = inject(EventService);
|
|
private data: Policy[] = []
|
|
private loaded = false;
|
|
create$: Observable<any> | undefined;
|
|
update$: Observable<any> | undefined;
|
|
delete$: Observable<any> | undefined;
|
|
|
|
constructor() {
|
|
this.create$ = this.client.filterByRequestType('create_policy');
|
|
this.update$ = this.client.filterByRequestType('update_policy');
|
|
this.delete$ = this.client.filterByRequestType('delete_policy');
|
|
|
|
this.create$?.subscribe(d => this.data.push(d.data));
|
|
this.update$?.subscribe(d => {
|
|
const policy = this.data.find(p => p.id == d.data.id);
|
|
if (policy) {
|
|
policy.group_id = d.data.group_id;
|
|
policy.path = d.data.path;
|
|
policy.span = d.data.span;
|
|
policy.usage = d.data.usage;
|
|
}
|
|
});
|
|
this.delete$?.subscribe(d => this.data = this.data.filter(r => r.id != d.request.data.id));
|
|
|
|
this.events.listen('tts_logoff', () => {
|
|
this.data = [];
|
|
this.loaded = false;
|
|
});
|
|
}
|
|
|
|
|
|
fetch() {
|
|
if (this.loaded) {
|
|
return of(this.data);
|
|
}
|
|
|
|
const $ = this.client.first(d => d.d.request.type == 'get_policies')!.pipe(map(d => d.d.data));
|
|
$.subscribe(d => {
|
|
this.data = d;
|
|
this.loaded = true;
|
|
});
|
|
this.client.fetchPolicies();
|
|
return $;
|
|
}
|
|
}
|