OpenSlides/client/src/app/openslides.component.ts

64 lines
2.0 KiB
TypeScript
Raw Normal View History

import { Injector } from '@angular/core';
import { Observable, of } from 'rxjs';
2018-08-22 16:03:49 +02:00
import { DataStoreService } from './core/services/data-store.service';
2018-08-24 10:46:48 +02:00
import { CacheService } from './core/services/cache.service';
/**
* injects the {@link DataStoreService} to all its children and provides a generic function to catch errors
* should be abstract and a mere parent to all {@link DataStoreService} accessors
*/
export abstract class OpenSlidesComponent {
/**
* The dataStore Service
*/
2018-08-24 10:46:48 +02:00
private static _DS: DataStoreService;
public static injector: Injector;
/**
* Empty constructor
*
* Static injection of {@link DataStoreService} in all child instances of OpenSlidesComponent
* Throws a warning even tho it is the new syntax. Ignored for now.
*/
2018-08-29 13:21:25 +02:00
public constructor() {}
/**
* getter to access the {@link DataStoreService}
* @example this.DS.get(User)
* @return access to dataStoreService
*/
2018-08-29 13:21:25 +02:00
public get DS(): DataStoreService {
if (!OpenSlidesComponent.injector) {
throw new Error('OpenSlides is not bootstrapping right. This component should have the Injector.');
}
2018-08-24 10:46:48 +02:00
if (OpenSlidesComponent._DS == null) {
const injector = Injector.create({
providers: [
2018-08-24 10:46:48 +02:00
{
provide: DataStoreService,
useClass: DataStoreService,
deps: [CacheService]
}
],
parent: OpenSlidesComponent.injector
});
2018-08-24 10:46:48 +02:00
OpenSlidesComponent._DS = injector.get(DataStoreService);
}
2018-08-24 10:46:48 +02:00
return OpenSlidesComponent._DS;
}
/**
* Generic error handling for everything that makes HTTP Calls
* TODO: could have more features
* @return an observable error
*/
2018-08-29 13:21:25 +02:00
public handleError<T>() {
return (error: any): Observable<T> => {
console.error(error);
return of(error);
};
}
}