redoc/lib/components/base.ts
2017-02-02 23:13:40 +02:00

85 lines
1.6 KiB
TypeScript

'use strict';
import { OnInit, OnDestroy } from '@angular/core';
import { SpecManager } from '../utils/spec-manager';
import { AppStateService } from '../services/app-state.service';
import { Subscription } from 'rxjs/Subscription';
export { SpecManager };
/**
* Generic Component
* @class
*/
export class BaseComponent implements OnInit, OnDestroy {
pointer: string;
componentSchema: any = null;
dereferencedCache = {};
constructor(public specMgr: SpecManager) {
}
/**
* onInit method is run by angular2 after all component inputs are resolved
*/
ngOnInit() {
this.preinit();
}
preinit() {
this.componentSchema = this.specMgr.byPointer(this.pointer || '');
this.init();
}
ngOnDestroy() {
this.destroy();
}
/**
* Used to initialize component
* @abstract
*/
init() {
// empty
}
/**
+ Used to destroy component
* @abstract
*/
destroy() {
// emtpy
}
}
export abstract class BaseSearchableComponent extends BaseComponent implements OnDestroy {
searchSubscription: Subscription;
constructor(public specMgr: SpecManager, public app: AppStateService) {
super(specMgr);
}
subscribeForSearch() {
this.searchSubscription = this.app.searchContainingPointers.subscribe(ptrs => {
for (let i = 0; i < ptrs.length; ++i) {
if (ptrs[i]) this.ensureSearchIsShown(ptrs[i]);
}
});
}
preinit() {
super.preinit();
this.subscribeForSearch();
}
ngOnDestroy() {
if (this.searchSubscription) {
this.searchSubscription.unsubscribe();
}
}
/**
+ Used to destroy component
* @abstract
*/
abstract ensureSearchIsShown(ptr: string);
}