ngrx-model
Version:
Model classes for integrating ngrx store with a REST API
36 lines (27 loc) • 981 B
text/typescript
import { Observable, BehaviorSubject, Subscription } from 'rxjs';
import { HttpUtility } from '../http/http.service';
import { RequestService } from '../request/request.service';
import { INextHandler, IErrorHandler, ICompletionHandler } from './modelTypes';
export interface IBaseModelConfig<T> {
url: string;
transform?: any;
}
export class BaseModel<T> {
protected dataStream$: BehaviorSubject<T>;
url: string;
requestService: RequestService;
constructor(config: IBaseModelConfig<T>, requestService: RequestService) {
this.url = config.url;
this.requestService = requestService;
}
subscribe(onNext?: INextHandler<T>, onError?: IErrorHandler, onCompletion?: ICompletionHandler): Subscription {
if (!this.dataStream$) {
this.init();
}
return this.dataStream$.subscribe(onNext, onError, onCompletion);
}
init(): void {
this.dataStream$ = new BehaviorSubject<T>(null);
// make a request then push to stream
}
}