@itexpert-dev/base-universal-table
Version:
base universal table for build tables
63 lines (55 loc) • 2.57 kB
text/typescript
import {ComponentFactoryResolver, ViewContainerRef, Injector, ReflectiveInjector} from "@angular/core";
import {isNull} from "@itexpert-dev/tiny-helpers";
import {BaseUniversalTableDirective} from "../common/baseUniversalTableDirective";
import {UniversalTableCtrl} from "../../services/universalTable/universalTableCtrl";
import {AngularInputValidator} from "../common/angularInputValidator";
import {BaseUniversalTableCellComponent} from "../../baseComponents/universalTableDataCell/BaseUniversalTableDataCellComponent";
import {baseUniversalTableCellDirectiveConfig} from "./baseUniversalTableCellDirectiveConfig.const";
import {IUniversalTableCellPosition} from "../../../contracts/IUniversalTableCellPosition";
abstract class BaseUniversalTableCellDirective extends BaseUniversalTableDirective{
abstract rowIndex: number;
abstract cellIndex: number;
abstract cellData: any;
protected componentResolver: ComponentFactoryResolver;
protected viewContainer: ViewContainerRef;
constructor(
tableCtrl: UniversalTableCtrl,
componentResolver: ComponentFactoryResolver,
viewContainer: ViewContainerRef,
protected injector: Injector
){
super(
componentResolver,
viewContainer,
tableCtrl
);
}
ngOnInit(){
let validateResult = AngularInputValidator.checkRequireAttributes({
requireAttributes: ['rowIndex', 'cellIndex', 'cellData'],
directiveContext: this,
rightExample: `${baseUniversalTableCellDirectiveConfig.selector}(("[rowIndex]"="rowIndex", "[cellIndex]"="cellIndex", "[cellData]"="cellData")`
});
if(!isNull(validateResult)){
throw validateResult
}
let originCell = this.cellData;
let cellType = originCell.type;
let cellComponent = this.resolveCellByType(cellType);
let cellPosition: IUniversalTableCellPosition = {
cellData: this.cellData,
cellIndex: this.cellIndex,
rowIndex: this.rowIndex
};
let injector = ReflectiveInjector.resolveAndCreate(
[{
provide: IUniversalTableCellPosition,
useValue: cellPosition
}],
this.injector
);
let cell = this.viewContainer.createComponent(cellComponent, 0, injector);
originCell.instance = <BaseUniversalTableCellComponent>cell.instance;
}
}
export {BaseUniversalTableCellDirective}