ag-grid-enterprise
Version:
ag-Grid Enterprise Features
181 lines (164 loc) • 8.36 kB
text/typescript
import {ColumnController, MenuItemDef, Autowired, Utils, Bean, GridOptionsWrapper, GridApi, Column, _} from 'ag-grid-community';
import {ClipboardService} from "../clipboardService";
import {AggFuncService} from "../aggregation/aggFuncService";
export class MenuItemMapper {
private gridOptionsWrapper: GridOptionsWrapper;
private columnController: ColumnController;
private gridApi: GridApi;
private clipboardService: ClipboardService;
private aggFuncService: AggFuncService;
public mapWithStockItems(originalList: (MenuItemDef|string)[], column: Column): (MenuItemDef|string)[] {
if (!originalList) { return []; }
let resultList: (MenuItemDef|string)[] = [];
originalList.forEach( menuItemOrString => {
let result: MenuItemDef|string;
if (typeof menuItemOrString === 'string') {
result = this.getStockMenuItem(<string>menuItemOrString, column);
} else {
result = menuItemOrString;
}
if ((<any>result).subMenu) {
let resultDef = <MenuItemDef> result;
resultDef.subMenu = this.mapWithStockItems(resultDef.subMenu, column);
}
resultList.push(result);
});
return resultList;
}
private getStockMenuItem(key: string, column: Column): MenuItemDef|string {
let localeTextFunc = this.gridOptionsWrapper.getLocaleTextFunc();
switch (key) {
case 'pinSubMenu': return {
name: localeTextFunc('pinColumn', 'Pin Column'),
icon: Utils.createIconNoSpan('menuPin', this.gridOptionsWrapper, null),
subMenu: ['pinLeft','pinRight','clearPinned']
};
case 'pinLeft': return {
name: localeTextFunc('pinLeft', 'Pin Left'),
action: ()=> this.columnController.setColumnPinned(column, Column.PINNED_LEFT, "contextMenu"),
checked: column.isPinnedLeft()
};
case 'pinRight': return {
name: localeTextFunc('pinRight', 'Pin Right'),
action: ()=> this.columnController.setColumnPinned(column, Column.PINNED_RIGHT, "contextMenu"),
checked: column.isPinnedRight()
};
case 'clearPinned': return {
name: localeTextFunc('noPin', 'No Pin'),
action: ()=> this.columnController.setColumnPinned(column, null, "contextMenu"),
checked: !column.isPinned()
};
case 'valueAggSubMenu': return {
name: localeTextFunc('valueAggregation', 'Value Aggregation'),
icon: Utils.createIconNoSpan('menuValue', this.gridOptionsWrapper, null),
subMenu: this.createAggregationSubMenu(column)
};
case 'autoSizeThis': return {
name: localeTextFunc('autosizeThiscolumn', 'Autosize This Column'),
action: ()=> this.columnController.autoSizeColumn(column, "contextMenu")
};
case 'autoSizeAll': return {
name: localeTextFunc('autosizeAllColumns', 'Autosize All Columns'),
action: ()=> this.columnController.autoSizeAllColumns("contextMenu")
};
case 'rowGroup': return {
name: localeTextFunc('groupBy', 'Group by') + ' ' + _.escape(this.columnController.getDisplayNameForColumn(column, 'header')),
action: ()=> this.columnController.addRowGroupColumn(column, "contextMenu"),
icon: Utils.createIconNoSpan('menuAddRowGroup', this.gridOptionsWrapper, null)
};
case 'rowUnGroup': return {
name: localeTextFunc('ungroupBy', 'Un-Group by') + ' ' + _.escape(this.columnController.getDisplayNameForColumn(column, 'header')),
action: ()=> this.columnController.removeRowGroupColumn(column, "contextMenu"),
icon: Utils.createIconNoSpan('menuRemoveRowGroup', this.gridOptionsWrapper, null)
};
case 'resetColumns': return {
name: localeTextFunc('resetColumns', 'Reset Columns'),
action: ()=> this.columnController.resetColumnState("contextMenu")
};
case 'expandAll': return {
name: localeTextFunc('expandAll', 'Expand All'),
action: ()=> this.gridApi.expandAll()
};
case 'contractAll': return {
name: localeTextFunc('collapseAll', 'Collapse All'),
action: ()=> this.gridApi.collapseAll()
};
case 'copy': return {
name: localeTextFunc('copy','Copy'),
shortcut: localeTextFunc('ctrlC','Ctrl+C'),
icon: Utils.createIconNoSpan('clipboardCopy', this.gridOptionsWrapper, null),
action: ()=> this.clipboardService.copyToClipboard(false)
};
case 'copyWithHeaders': return {
name: localeTextFunc('copyWithHeaders','Copy with Headers'),
// shortcut: localeTextFunc('ctrlC','Ctrl+C'),
icon: Utils.createIconNoSpan('clipboardCopy', this.gridOptionsWrapper, null),
action: ()=> this.clipboardService.copyToClipboard(true)
};
case 'paste': return {
name: localeTextFunc('paste','Paste'),
shortcut: localeTextFunc('ctrlV','Ctrl+V'),
disabled: true,
icon: Utils.createIconNoSpan('clipboardPaste', this.gridOptionsWrapper, null),
action: ()=> this.clipboardService.pasteFromClipboard()
};
case 'export':
let exportSubMenuItems:string[] = [];
if (!this.gridOptionsWrapper.isSuppressCsvExport()) {
exportSubMenuItems.push('csvExport');
}
if (!this.gridOptionsWrapper.isSuppressExcelExport()) {
exportSubMenuItems.push('excelExport');
exportSubMenuItems.push('excelXMLExport');
}
return {
name: localeTextFunc('export', 'Export'),
subMenu: exportSubMenuItems
};
case 'csvExport': return {
name: localeTextFunc('csvExport', 'CSV Export'),
action: ()=> this.gridApi.exportDataAsCsv({})
};
case 'excelExport': return {
name: localeTextFunc('excelExport', 'Excel Export (.xlsx)'),
action: ()=> this.gridApi.exportDataAsExcel({
exportMode: 'xlsx'
})
};
case 'excelXMLExport': return {
name: localeTextFunc('excelXMLExport', 'Excel Export (.xml)'),
action: ()=> this.gridApi.exportDataAsExcel({
exportMode: 'xml'
})
};
case 'separator': return 'separator';
default:
console.warn(`ag-Grid: unknown menu item type ${key}`);
return null;
}
}
private createAggregationSubMenu(column: Column): MenuItemDef[] {
let localeTextFunc = this.gridOptionsWrapper.getLocaleTextFunc();
let columnIsAlreadyAggValue = column.isValueActive();
let funcNames = this.aggFuncService.getFuncNames(column);
let columnToUse: Column;
if (column.isPrimary()) {
columnToUse = column;
} else {
columnToUse = column.getColDef().pivotValueColumn;
}
let result: MenuItemDef[] = [];
funcNames.forEach( (funcName)=> {
result.push({
name: localeTextFunc(funcName, funcName),
action: ()=> {
this.columnController.setColumnAggFunc(columnToUse, funcName, "contextMenu");
this.columnController.addValueColumn(columnToUse, "contextMenu");
},
checked: columnIsAlreadyAggValue && columnToUse.getAggFunc() === funcName
});
});
return result;
}
}