ag-grid-enterprise
Version:
ag-Grid Enterprise Features
128 lines (108 loc) • 4.57 kB
text/typescript
import {
Utils,
Autowired,
ColumnController,
EventService,
Context,
LoggerFactory,
DragAndDropService,
GridOptionsWrapper,
PostConstruct,
Events,
Column,
Bean,
ColumnPivotChangeRequestEvent,
ColumnApi,
GridApi
} from "ag-grid-community/main";
import {BaseDropZonePanel} from "../dropZone/baseDropZonePanel";
export class PivotDropZonePanel extends BaseDropZonePanel {
private columnController: ColumnController;
private eventService: EventService;
private gridOptionsWrapper: GridOptionsWrapper;
private context: Context;
private loggerFactory: LoggerFactory;
private dragAndDropService: DragAndDropService;
private columnApi: ColumnApi;
private gridApi: GridApi;
constructor(horizontal: boolean) {
super(horizontal, false, 'pivot');
}
private passBeansUp(): void {
super.setBeans({
gridOptionsWrapper: this.gridOptionsWrapper,
eventService: this.eventService,
context: this.context,
loggerFactory: this.loggerFactory,
dragAndDropService: this.dragAndDropService
});
let localeTextFunc = this.gridOptionsWrapper.getLocaleTextFunc();
let emptyMessage = localeTextFunc('pivotColumnsEmptyMessage', 'Drag here to set column labels');
let title = localeTextFunc('pivots', 'Column Labels');
super.init({
dragAndDropIcon: DragAndDropService.ICON_GROUP,
icon: Utils.createIconNoSpan('pivotPanel', this.gridOptionsWrapper, null),
emptyMessage: emptyMessage,
title: title
});
this.addDestroyableEventListener(this.eventService, Events.EVENT_COLUMN_EVERYTHING_CHANGED, this.refresh.bind(this));
this.addDestroyableEventListener(this.eventService, Events.EVENT_COLUMN_PIVOT_CHANGED, this.refresh.bind(this));
this.addDestroyableEventListener(this.eventService, Events.EVENT_COLUMN_PIVOT_MODE_CHANGED, this.checkVisibility.bind(this));
this.refresh();
}
private refresh(): void {
this.checkVisibility();
this.refreshGui();
}
private checkVisibility(): void {
let pivotMode = this.columnController.isPivotMode();
if (this.isHorizontal()) {
// what we do for horizontal (ie the pivot panel at the top) depends
// on the user property as well as pivotMode.
switch (this.gridOptionsWrapper.getPivotPanelShow()) {
case 'always':
this.setVisible(pivotMode);
break;
case 'onlyWhenPivoting':
let pivotActive = this.columnController.isPivotActive();
this.setVisible(pivotMode && pivotActive);
break;
default:
// never show it
this.setVisible(false);
break;
}
} else {
// in toolPanel, the pivot panel is always shown when pivot mode is on
this.setVisible(pivotMode);
}
}
protected isColumnDroppable(column: Column): boolean {
if (this.gridOptionsWrapper.isFunctionsReadOnly()) { return false; }
// we never allow grouping of secondary columns
if (!column.isPrimary()) { return false; }
let allowPivot = column.isAllowPivot();
let columnNotAlreadyPivoted = !column.isPivotActive();
return allowPivot && columnNotAlreadyPivoted;
}
protected updateColumns(columns: Column[]): void {
if (this.gridOptionsWrapper.isFunctionsPassive()) {
let event: ColumnPivotChangeRequestEvent = {
type: Events.EVENT_COLUMN_PIVOT_CHANGE_REQUEST,
columns: columns,
api: this.gridApi,
columnApi: this.columnApi
};
this.eventService.dispatchEvent(event);
} else {
this.columnController.setPivotColumns(columns, "toolPanelUi");
}
}
protected getIconName(): string {
return this.isPotentialDndColumns() ? DragAndDropService.ICON_PIVOT : DragAndDropService.ICON_NOT_ALLOWED;
}
protected getExistingColumns(): Column[] {
return this.columnController.getPivotColumns();
}
}