1 import {Component, Input, OnInit, Host, TemplateRef} from '@angular/core';
2 import {GridColumn} from './grid';
3 import {GridComponent} from './grid.component';
6 selector: 'eg-grid-column',
7 template: '<ng-template></ng-template>'
10 export class GridColumnComponent implements OnInit {
12 // Note most input fields should match class fields for GridColumn
13 @Input() name: string;
14 @Input() path: string;
15 @Input() label: string;
16 @Input() flex: number;
17 // is this the index field?
18 @Input() index: boolean;
20 // Columns are assumed to be visible unless hidden=true.
21 @Input() hidden: boolean;
23 @Input() sortable: boolean;
24 @Input() datatype: string;
25 @Input() multiSortable: boolean;
27 // If true, boolean fields support 3 values: true, false, null (unset)
28 @Input() ternaryBool: boolean;
31 @Input() filterable: boolean;
33 // optional initial filter values
34 @Input() initialFilterOperator: string;
35 @Input() initialFilterValue: string;
37 // Display date and time when datatype = timestamp
38 @Input() datePlusTime: boolean;
40 // Display using a specific OU's timestamp when datatype = timestamp
41 @Input() timezoneContextOrg: number;
43 @Input() dateOnlyIntervalField: string;
45 // Used in conjunction with cellTemplate
46 @Input() cellContext: any;
47 @Input() cellTemplate: TemplateRef<any>;
49 @Input() disableTooltip: boolean;
50 @Input() asyncSupportsEmptyTermClick: boolean;
52 // Required columns are those that must be present in any auto-generated
53 // queries regardless of whether they are visible in the display.
54 @Input() required = false;
56 // IDL class of the object which contains this field.
57 @Input() idlClass: string;
59 // get a reference to our container grid.
60 constructor(@Host() private grid: GridComponent) {}
65 console.warn('GridColumnComponent needs an <eg-grid>');
69 const col = new GridColumn();
72 col.label = this.label;
74 col.required = this.required;
75 col.hidden = this.hidden === true;
76 col.asyncSupportsEmptyTermClick = this.asyncSupportsEmptyTermClick === true;
77 col.isIndex = this.index === true;
78 col.cellTemplate = this.cellTemplate;
79 col.cellContext = this.cellContext;
80 col.disableTooltip = this.disableTooltip;
81 col.isSortable = this.sortable;
82 col.isFilterable = this.filterable;
83 col.filterOperator = this.initialFilterOperator;
84 col.filterValue = this.initialFilterValue;
85 col.isMultiSortable = this.multiSortable;
86 col.datatype = this.datatype;
87 col.datePlusTime = this.datePlusTime;
88 col.ternaryBool = this.ternaryBool;
89 col.timezoneContextOrg = this.timezoneContextOrg;
90 col.dateOnlyIntervalField = this.dateOnlyIntervalField;
91 col.idlClass = this.idlClass;
92 col.dateOnlyIntervalField = this.dateOnlyIntervalField;
95 this.grid.context.columnSet.add(col);
97 if (this.cellTemplate &&
98 !this.grid.context.columnHasTextGenerator(col)) {
100 'No cellTextGenerator provided for "' + col.name + '"');