Files
grafana/public/app/features/scopes/ScopesServiceBase.ts
Andrej Ocenas a6c16c52e6 Scopes: Refactor services and the api client (#102042)
* Externalize api and remove dependency cycles

* fix tests

* Update comment

* Split the state observable creation in ScopesService

* Make the feature flag guard more explicit

* Change reduce to map
2025-03-14 10:48:12 +01:00

26 lines
766 B
TypeScript

import { BehaviorSubject, Observable, pairwise, Subscription } from 'rxjs';
export abstract class ScopesServiceBase<T> {
private _state: BehaviorSubject<T>;
protected constructor(initialState: T) {
this._state = new BehaviorSubject<T>(Object.freeze(initialState));
}
public get state(): T {
return this._state.getValue();
}
public get stateObservable(): Observable<T> {
return this._state.asObservable();
}
public subscribeToState = (cb: (newState: T, prevState: T) => void): Subscription => {
return this._state.pipe(pairwise()).subscribe(([prevState, newState]) => cb(newState, prevState));
};
protected updateState = (newState: Partial<T>) => {
this._state.next(Object.freeze({ ...this.state, ...newState }));
};
}