UNPKG

@itexpert-dev/base-universal-table

Version:

base universal table for build tables

63 lines (55 loc) 2.57 kB
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}