Commit 95ab7eb1 authored by avovchuk's avatar avovchuk

readme - docs

parent a8fd5fad
......@@ -124,4 +124,39 @@ app.component.ts
}
```
##Documentation
###DialogComponent
Super class of all modal components.
####Class Overview
```typescript
abstract class DialogComponent {
/**
* Constructor
* @param {DialogService} dialogService - instance of DialogService
*/
constructor(dialogService: DialogService)
/**
* Dialog result
* @type {any}
*/
protected result:any
/**
* Closes dialog
*/
public close:Function
}
```
###DialogService
Service to show dialogs
###Class Overview
```typescript
class DialogService {
public addDialog:(component:Type<DialogComponent>, data?:any, index?:number) => {}
}
```
......@@ -4,6 +4,7 @@ import {
} from "@angular/core";
import {DialogComponent} from "./dialog.component";
import {DialogWrapperComponent} from "./dialog-wrapper.component";
import {Observable} from "rxjs";
@Component({
selector: 'dialog-holder',
......@@ -11,15 +12,32 @@ import {DialogWrapperComponent} from "./dialog-wrapper.component";
})
export class DialogHolderComponent {
/**
* Target element to insert dialogs
* @type {ViewContainerRef}
*/
@ViewChild('element', {read: ViewContainerRef}) private element: ViewContainerRef;
dialogs: Array<any> = [];
/**
* Array of dialogs
* @type {Array<DialogComponent> }
*/
dialogs: Array<DialogComponent> = [];
constructor(private resolver: ComponentFactoryResolver) {
/**
* Constructor
* @param {ComponentFactoryResolver} resolver
*/
constructor(private resolver: ComponentFactoryResolver) {}
}
addDialog(component:Type<DialogComponent>, data?:any, index?:number) {
/**
* Adds dialog
* @param {Type<DialogComponent>} component
* @param {any?} data
* @param {number?}index
* @return {Observable<any>}
*/
addDialog(component:Type<DialogComponent>, data?:any, index?:number):Observable<any> {
let factory = this.resolver.resolveComponentFactory(DialogWrapperComponent);
let componentRef = this.element.createComponent(factory, index);
let dialogWrapper: DialogWrapperComponent = <DialogWrapperComponent> componentRef.instance;
......@@ -36,6 +54,10 @@ export class DialogHolderComponent {
return _component.fillData(data);
}
/**
* Removes dialog
* @param {DialogComponent} component
*/
removeDialog(component:DialogComponent) {
component.wrapper.hide();
setTimeout(()=>{
......
import {
Component, ViewContainerRef, ViewChild, ComponentFactoryResolver, ReflectiveInjector
Component, ViewContainerRef, ViewChild, ComponentFactoryResolver, ReflectiveInjector, Type
} from '@angular/core';
import {DialogComponent} from "./dialog.component";
......@@ -14,13 +14,37 @@ import {DialogComponent} from "./dialog.component";
`
})
export class DialogWrapperComponent {
/**
* Target element to insert dialog content component
* @type {ViewContainerRef}
*/
@ViewChild('element', {read: ViewContainerRef}) private element: ViewContainerRef;
/**
*
* @type {boolean}
*/
private shown:boolean = false;
/**
* Dialog content componet
* @type {DialogComponent}
*/
private content: DialogComponent;
/**
* Constructor
* @param {ComponentFactoryResolver} resolver
*/
constructor(private resolver: ComponentFactoryResolver) {}
addComponent(component) {
/**
* Adds content dialog component to wrapper
* @param {Type<DialogComponent>} component
* @return {DialogComponent}
*/
addComponent(component: Type<DialogComponent>) {
let factory = this.resolver.resolveComponentFactory(component);
let injector = ReflectiveInjector.fromResolvedProviders([], this.element.injector);
let componentRef = factory.create(injector);
......@@ -30,10 +54,17 @@ export class DialogWrapperComponent {
return this.content;
}
show() {
/**
* Shows dialog
*/
show():void {
this.shown = true;
}
hide() {
/**
* Hides dialog
*/
hide():void {
this.shown = false;
}
}
......
......@@ -8,17 +8,35 @@ import {DialogService} from "./dialog.service";
@Component({
selector: 'pagination'
})
export class DialogComponent implements OnDestroy {
export abstract class DialogComponent implements OnDestroy {
/**
* Observer to return result from dialog
*/
private observer: Observer<any>;
/**
* Dialog result
* @type {any}
*/
protected result: any;
/**
* Dialog wrapper (modal placeholder)
*/
wrapper: DialogWrapperComponent;
/**
* Constructor
* @param {DialogService} dialogService - instance of DialogService
*/
constructor(protected dialogService: DialogService) {}
fillData(data:any = {}) {
/**
*
* @param {any} data
* @return {Observable<any>}
*/
fillData(data:any = {}): Observable<any> {
let keys = Object.keys(data);
for(let i=0, length=keys.length; i<length; i++) {
let key = keys[i];
......@@ -32,10 +50,16 @@ export class DialogComponent implements OnDestroy {
});
}
close() {
/**
* Closes dialog
*/
close():void {
this.dialogService.removeDialog(this);
}
/**
* OnDestroy handler
*/
ngOnDestroy(): void {
this.observer.next(this.result);
}
......
......@@ -3,22 +3,49 @@ import {
} from "@angular/core";
import {DialogHolderComponent} from "./dialog-holder.component";
import {DialogComponent} from "./dialog.component";
import {Observable} from "rxjs";
@Injectable()
export class DialogService {
/**
* Placeholder of modal dialogs
* @type {DialogHolderComponent}
*/
private dialogHolderComponent : DialogHolderComponent;
/**
* @param {ComponentFactoryResolver} resolver
* @param {ApplicationRef} applicationRef
* @param {Injector} injector
*/
constructor(private resolver: ComponentFactoryResolver, private applicationRef: ApplicationRef, private injector: Injector) {
this.dialogHolderComponent = this.createDialogHolder();
}
addDialog(component:Type<DialogComponent>, data?:any, index?:number) {
/**
* Adds dialog to dialog holder
* @param {Type<DialogComponent>} component
* @param {any?} data
* @param {number?} index
* @return {Observable<any>}
*/
addDialog(component:Type<DialogComponent>, data?:any, index?:number): Observable<any> {
return this.dialogHolderComponent.addDialog(component, data, index);
}
removeDialog(component:DialogComponent) {
return this.dialogHolderComponent.removeDialog(component);
/**
* Hides and removes dialog from DOM
* @param {DialogComponent} component
*/
removeDialog(component:DialogComponent): void {
this.dialogHolderComponent.removeDialog(component);
}
/**
* Creates and add to DOM dialog holder component
* @return {DialogHolderComponent}
*/
private createDialogHolder(): DialogHolderComponent {
let componentFactory = this.resolver.resolveComponentFactory(DialogHolderComponent);
let componentRef = componentFactory.create(this.injector);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment