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 $;
}
}