--- /dev/null
+import {Component, Input, OnInit, Host, TemplateRef} from '@angular/core';
+import {EgGridColumn} from './grid-column';
+import {EgGridDataSource} from './grid-data-source';
+
+@Component({
+ selector: 'eg-grid-body',
+ templateUrl: 'grid-body.component.html'
+})
+
+export class EgGridBodyComponent implements OnInit {
+
+ @Input() dataSource: EgGridDataSource;
+ @Input() columns: EgGridColumn[];
+
+ ngOnInit() {
+ }
+}
+
--- /dev/null
+import {Component, Input, OnInit, Host, TemplateRef} from '@angular/core';
+import {EgGridComponent} from './grid.component';
+import {EgGridColumn} from './grid-column';
+
+@Component({
+ selector: 'eg-grid-column',
+ template: '<ng-template></ng-template>'
+})
+
+export class EgGridColumnComponent implements OnInit {
+
+ // Note most input fields should match class fields for EgGridColumn
+ @Input() name: string;
+ @Input() path: string;
+ @Input() label: string;
+ @Input() flex: number = 1;
+ @Input() visible: boolean = false;
+ @Input() cellTemplate: TemplateRef<any>;
+ @Input() grid: EgGridComponent;
+
+ ngOnInit() {
+
+ if (!this.grid) {
+ console.warn('EgGridColumnComponent needs a [grid]');
+ return;
+ }
+
+ let col = new EgGridColumn();
+ col.name = this.name;
+ col.path = this.path;
+ col.label = this.label;
+ col.flex = this.flex;
+ col.visible = this.visible;
+ col.cellTemplate = this.cellTemplate;
+ this.grid.columns.push(col);
+ }
+}
+
--- /dev/null
+import {TemplateRef} from '@angular/core';
+
+export class EgGridColumn {
+ name: string;
+ path: string;
+ label: string;
+ flex: number = 1;
+ visible: boolean = false;
+ cellTemplate: TemplateRef<any>;
+
+ displayValue(row: any): string {
+ // filters
+ // cell templates, etc.
+
+ if (row[this.name] === undefined || row[this.name] === null)
+ return '';
+
+ if (typeof row[this.name] == 'function')
+ return row[this.name]()+'';
+
+ return row[this.name]+'';
+ }
+
+}
--- /dev/null
+
+
+export class EgGridDataSource {
+ data: any[] = [];
+
+ // Do we know how many items we have in total?
+ indeterminate: boolean
+
+}
+
+
--- /dev/null
+
+<div class="eg-grid-row eg-grid-header-row">
+ <div *ngFor="let col of columns">{{col.label}}</div>
+</div>
+
--- /dev/null
+import {Component, Input, OnInit} from '@angular/core';
+import {EgGridColumn} from './grid-column';
+
+@Component({
+ selector: 'eg-grid-header',
+ templateUrl: './grid-header.component.html'
+})
+
+export class EgGridHeaderComponent implements OnInit {
+
+ @Input() columns: EgGridColumn[];
+
+ constructor() {}
+
+ ngOnInit() {
+ }
+}
+
--- /dev/null
+
+.eg-grid-row {
+ display: flex;
+}
+
+.eg-grid-header-row {
+}
+
+.eg-grid-header-cell {
+ font-weight: bold;
+}
+
+.eg-grid-cell {
+}
+
--- /dev/null
+
+<div class="eg-grid">
+ <!--
+ <eg-grid-toolbar [columns]="columns"></eg-grid-toolbar>
+ -->
+ <eg-grid-header [columns]="columns"></eg-grid-header>
+ <!--
+ <eg-grid-body [columns]="columns" [dataSource]="dataSource"></eg-grid-body>
+ -->
+</div>
+
--- /dev/null
+import {Component, Input, OnInit} from '@angular/core';
+import {EgGridDataSource} from './grid-data-source';
+import {EgGridColumn} from './grid-column';
+
+@Component({
+ selector: 'eg-grid',
+ templateUrl: './grid.component.html',
+ styleUrls: ['./grid.component.css']
+})
+
+export class EgGridComponent implements OnInit {
+
+ @Input() dataSource: EgGridDataSource;
+ columns: EgGridColumn[];
+
+ constructor() {
+ this.columns = [];
+ }
+
+ ngOnInit() {
+ }
+
+}
+
--- /dev/null
+import {NgModule} from '@angular/core';
+import {CommonModule} from '@angular/common';
+import {EgGridComponent} from './grid.component';
+import {EgGridColumnComponent} from './grid-column.component';
+import {EgGridHeaderComponent} from './grid-header.component';
+import {EgGridBodyComponent} from './grid-body.component';
+
+@NgModule({
+ declarations: [
+ // public + internal components
+ EgGridComponent,
+ EgGridColumnComponent,
+ EgGridHeaderComponent,
+ EgGridBodyComponent
+ ],
+ imports: [
+ CommonModule
+ ],
+ exports: [
+ // public components
+ EgGridComponent,
+ EgGridColumnComponent,
+ ],
+ providers: [
+ ]
+})
+
+export class EgGridModule {
+
+}
</div>
+<!-- grid stuff -->
+
+<eg-grid #testGrid [dataSource]="gridDataSource"></eg-grid>
+<eg-grid-column [grid]="testGrid" name="name" label="Name" i18n-label></eg-grid-column>
+
import {EgToastService} from '@eg/share/toast/toast.service';
import {EgStringService} from '@eg/share/string/string.service';
import {Observable} from 'rxjs/Rx';
+import {EgGridDataSource} from '@eg/share/grid/grid-data-source';
@Component({
templateUrl: 'sandbox.component.html'
//@ViewChild('helloStr') private helloStr: EgStringComponent;
+ gridDataSource: EgGridDataSource = new EgGridDataSource();
+
testStr: string;
@Input() set testString(str: string) {
) {}
ngOnInit() {
-
+
+ this.gridDataSource.data = [
+ {name: 'Jane'},
+ {name: 'Al'},
+ {name: 'The Tick'}
+ ];
}
showProgress() {
import {EgSandboxRoutingModule} from './routing.module';
import {EgSandboxComponent} from './sandbox.component';
import {FmRecordEditorComponent} from '@eg/share/fm-editor/fm-editor.component';
+import {EgGridModule} from '@eg/share/grid/grid.module';
@NgModule({
declarations: [
EgSandboxComponent,
- FmRecordEditorComponent // not globally available
+ FmRecordEditorComponent
],
imports: [
EgStaffCommonModule,
- EgSandboxRoutingModule
+ EgSandboxRoutingModule,
+ EgGridModule
],
providers: [
]