fix(angular): module exports

This commit is contained in:
Manu Mtz.-Almeida
2018-03-30 21:52:29 +02:00
parent b35f95a4d8
commit cece447092
40 changed files with 657 additions and 996 deletions

View File

@ -0,0 +1,10 @@
import { Directive, TemplateRef } from '@angular/core';
import { VirtualContext } from './virtual-utils';
/**
* @hidden
*/
@Directive({selector: '[virtualFooter]'})
export class VirtualFooter {
constructor(public templateRef: TemplateRef<VirtualContext>) {}
}

View File

@ -0,0 +1,10 @@
import { Directive, TemplateRef } from '@angular/core';
import { VirtualContext } from './virtual-utils';
/**
* @hidden
*/
@Directive({selector: '[virtualHeader]'})
export class VirtualHeader {
constructor(public templateRef: TemplateRef<VirtualContext>) {}
}

View File

@ -0,0 +1,10 @@
import { Directive, TemplateRef, ViewContainerRef } from '@angular/core';
import { VirtualContext } from './virtual-utils';
/**
* @hidden
*/
@Directive({selector: '[virtualItem]'})
export class VirtualItem {
constructor(public templateRef: TemplateRef<VirtualContext>, public viewContainer: ViewContainerRef) {}
}

View File

@ -0,0 +1,59 @@
import { ChangeDetectorRef, ContentChild, Directive, ElementRef, EmbeddedViewRef } from '@angular/core';
import { VirtualItem } from './virtual-item';
import { VirtualHeader } from './virtual-header';
import { VirtualFooter } from './virtual-footer';
import { VirtualContext } from './virtual-utils';
@Directive({
selector: 'ion-virtual-scroll'
})
export class VirtualScroll {
@ContentChild(VirtualItem) itmTmp: VirtualItem;
@ContentChild(VirtualHeader) hdrTmp: VirtualHeader;
@ContentChild(VirtualFooter) ftrTmp: VirtualFooter;
constructor(
private el: ElementRef,
public cd: ChangeDetectorRef,
) {
this.el.nativeElement.itemRender = this.itemRender.bind(this);
}
private itemRender(el: HTMLElement|null, cell: any, index?: number) {
if (!el) {
const node = this.itmTmp.viewContainer.createEmbeddedView(
this.getComponent(cell.type),
new VirtualContext(null, null, null),
index
);
el = getElement(node);
(el as any)['$ionView'] = node;
}
const node = (el as any)['$ionView'];
const ctx = node.context;
ctx.$implicit = cell.value;
ctx.index = cell.index;
node.detectChanges();
return el;
}
private getComponent(type: number) {
switch (type) {
case 0: return this.itmTmp.templateRef;
case 1: return this.hdrTmp.templateRef;
case 2: return this.ftrTmp.templateRef;
}
return null;
}
}
function getElement(view: EmbeddedViewRef<VirtualContext>): HTMLElement {
const rootNodes = view.rootNodes;
for (let i = 0; i < rootNodes.length; i++) {
if (rootNodes[i].nodeType === 1) {
return rootNodes[i];
}
}
return null;
}

View File

@ -0,0 +1,14 @@
export class VirtualContext {
constructor(public $implicit: any, public index: number, public count: number) { }
get first(): boolean { return this.index === 0; }
get last(): boolean { return this.index === this.count - 1; }
get even(): boolean { return this.index % 2 === 0; }
get odd(): boolean { return !this.even; }
}