/* Copyright CloudLinux Zug GmbH 2010-2017 All Rights Reserved
*
* Licensed under CLOUD LINUX LICENSE AGREEMENT
* http://cloudlinux.com/docs/LICENSE.TXT
*/
import { Component, EventEmitter, Output, Input } from '@angular/core';
import { Column } from './column';
import { ColumnHeader } from './column_header';
import { Grid } from './grid';
import { AppState } from '../app.service';
import { Caption } from '../model/caption';
@Component({
selector: 'grid',
inputs: [
'rows: rows',
'grouped_header: grouped_header',
'context: context',
'rowsOnPage: rowsOnPage'
],
template: require('./../../templates/grouped_grid.html'),
styles: [
require('../../styles/grouped_grid.less')
],
})
export class GroupedGrid extends Grid {
@Output('action')
actionEmitter: EventEmitter<any> = new EventEmitter();
@Input() tools: boolean = false;
@Input() caption: Caption = null;
@Input() loadMoreCount: number | boolean;
@Input() loadedRowCount: number;
@Input() enableGroupOperation: boolean = false;
@Input() id: string;
@Input() highlightPhrase: string = '';
constructor(
public appState: AppState
) {
super(appState);
}
context: any;
_grouped_header: boolean;
get grouped_header(): boolean {
return this._grouped_header;
}
set grouped_header(value: boolean){
this._grouped_header = value;
this._headers = null;
}
subheaders: Array<ColumnHeader> = [];
_headers: Array<ColumnHeader> = null;
get headers(): Array<ColumnHeader>{
if (this._headers == null) {
let component = this;
this._headers = [];
let groups = {};
this.subheaders = [];
this.columns.forEach(function(column: Column){
let header = new ColumnHeader(column);
if (component.grouped_header) {
if (header.isGroup) {
let subheader = new ColumnHeader(column);
subheader.isGroup = false;
subheader.colSpan = 1;
subheader.rowSpan = 1;
subheader.descr = column.descr;
component.subheaders.push(subheader);
if (groups.hasOwnProperty(column.group)) {
if (!column.hidden) {
groups[column.group]++;
}
return;
} else {
groups[column.group] = 1;
}
}
} else {
header.rowSpan = 2;
header.colSpan = 1;
//header.descr = column.descr;
header.isGroup = false;
}
component._headers.push(header);
});
this._headers.forEach(function(header: ColumnHeader){
if (header.isGroup)
header.colSpan = groups[header.descr];
});
}
return this._headers;
}
private _columns: Column[];
get columns(): Column[] {
return this._columns;
}
set columns(val: Column[]) {
this._columns = val;
this._headers = null;
}
reset() {
this._headers = null;
}
actionClick(event, action, row) {
this.actionEmitter.emit({event, action, row});
}
}
|