-
Notifications
You must be signed in to change notification settings - Fork 156
/
Copy pathfreeze-row-model-generator.ts
44 lines (40 loc) · 1.83 KB
/
freeze-row-model-generator.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import { IModelGenerator, IGrid, NotifyArgs } from '../base/interface';
import { Column } from '../models/column';
import { Row } from '../models/row';
import { freezeTable } from '../base/enum';
import { RowModelGenerator } from '../services/row-model-generator';
import { splitFrozenRowObjectCells } from '../base/util';
/**
* FreezeRowModelGenerator is used to generate grid data rows with freeze row and column.
*
* @hidden
*/
export class FreezeRowModelGenerator implements IModelGenerator<Column> {
private rowModelGenerator: IModelGenerator<Column>;
private parent: IGrid;
constructor(parent: IGrid) {
this.parent = parent;
this.rowModelGenerator = new RowModelGenerator(this.parent);
}
public generateRows(data: Object, notifyArgs?: NotifyArgs, virtualRows?: Row<Column>[]): Row<Column>[] {
let tableName: freezeTable;
if (notifyArgs.renderFrozenRightContent || (notifyArgs.renderMovableContent && !this.parent.enableVirtualization)) {
tableName = 'frozen-right';
} else if (notifyArgs.renderMovableContent || notifyArgs.isFrozen) {
tableName = 'movable';
} else {
tableName = this.parent.getFrozenLeftCount() ? 'frozen-left' : 'frozen-right';
}
if (notifyArgs.requestType === 'virtualscroll' && notifyArgs.virtualInfo.sentinelInfo.axis === 'X') {
if (tableName !== 'movable') {
return null;
}
}
const row: Row<Column>[] = this.parent.enableVirtualization && !notifyArgs.isFrozenRowsRender ? virtualRows
: this.rowModelGenerator.generateRows(data, notifyArgs);
for (let i: number = 0, len: number = row.length; i < len; i++) {
row[i].cells = splitFrozenRowObjectCells(this.parent, row[i].cells, tableName);
}
return row;
}
}