igniteui-angular-sovn
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
161 lines (131 loc) • 4.94 kB
text/typescript
import { Component, Input, HostBinding, HostListener, ChangeDetectionStrategy, ElementRef, TemplateRef } from '@angular/core';
import {
IgxSummaryOperand,
IgxSummaryResult
} from './grid-summary';
import { GridColumnDataType } from '../../data-operations/data-util';
import { formatCurrency, formatDate, formatNumber, formatPercent, getLocaleCurrencyCode, getLocaleCurrencySymbol, NgIf, NgTemplateOutlet, NgFor } from '@angular/common';
import { ISelectionNode } from '../common/types';
import { ColumnType } from '../common/grid.interface';
export class IgxSummaryCellComponent {
public summaryResults: IgxSummaryResult[];
public column: ColumnType;
public firstCellIndentation = 0;
public hasSummary = false;
public density;
public summaryFormatter: (summaryResult: IgxSummaryResult, summaryOperand: IgxSummaryOperand) => any;
public summaryTemplate: TemplateRef<any>;
/** @hidden */
public active: boolean;
public rowIndex: number;
constructor(private element: ElementRef) {
}
public get visibleColumnIndex(): number {
return this.column.visibleIndex;
}
public get attrCellID() {
return `${this.grid.id}_${this.rowIndex}_${this.visibleColumnIndex}`;
}
public activate() {
const currNode = this.grid.navigation.activeNode;
if (currNode && this.rowIndex === currNode.row && this.visibleColumnIndex === currNode.column) {
return;
}
this.grid.navigation.setActiveNode({ row: this.rowIndex, column: this.visibleColumnIndex }, 'summaryCell');
this.grid.cdr.detectChanges();
}
protected get selectionNode(): ISelectionNode {
return {
row: this.rowIndex,
column: this.column.columnLayoutChild ? this.column.parent.visibleIndex : this.visibleColumnIndex,
isSummaryRow: true
};
}
public get width() {
return this.column.getCellWidth();
}
public get nativeElement(): any {
return this.element.nativeElement;
}
public get columnDatatype(): GridColumnDataType {
return this.column.dataType;
}
public get itemHeight() {
return this.column.grid.defaultSummaryHeight;
}
/**
* @hidden
*/
public get grid() {
return (this.column.grid as any);
}
/**
* @hidden @internal
*/
public get currencyCode(): string {
return this.column.pipeArgs.currencyCode ?
this.column.pipeArgs.currencyCode : getLocaleCurrencyCode(this.grid.locale);
}
/**
* @hidden @internal
*/
public get currencySymbol(): string {
return this.column.pipeArgs.display ?
this.column.pipeArgs.display : getLocaleCurrencySymbol(this.grid.locale);
}
public translateSummary(summary: IgxSummaryResult): string {
return this.grid.resourceStrings[`igx_grid_summary_${summary.key}`] || summary.label;
}
/**
* @hidden @internal
*/
public formatSummaryResult(summary: IgxSummaryResult): string {
if (summary.summaryResult === undefined || summary.summaryResult === null || summary.summaryResult === '') {
return '';
}
if (this.summaryFormatter) {
return this.summaryFormatter(summary, this.column.summaries);
}
const args = this.column.pipeArgs;
const locale = this.grid.locale;
if (summary.key === 'count') {
return formatNumber(summary.summaryResult, locale)
}
if (summary.defaultFormatting) {
switch (this.column.dataType) {
case GridColumnDataType.Number:
return formatNumber(summary.summaryResult, locale, args.digitsInfo);
case GridColumnDataType.Date:
case GridColumnDataType.DateTime:
case GridColumnDataType.Time:
return formatDate(summary.summaryResult, args.format, locale, args.timezone);
case GridColumnDataType.Currency:
return formatCurrency(summary.summaryResult, locale, this.currencySymbol, this.currencyCode, args.digitsInfo);
case GridColumnDataType.Percent:
return formatPercent(summary.summaryResult, locale, args.digitsInfo);
}
}
return summary.summaryResult;
}
}