UNPKG

@adaptabletools/adaptable

Version:

Powerful data-agnostic HTML5 AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements

110 lines (109 loc) 5.42 kB
import { ApiBase } from '../Implementation/ApiBase'; import ObjectFactory, { CreateEmptyFreeTextColumn } from '../../Utilities/ObjectFactory'; import { AdaptableNumberEditor } from '../../agGrid/editors/AdaptableNumberEditor'; import { AdaptableDateEditor } from '../../agGrid/editors/AdaptableDateEditor'; import ArrayExtensions from '../../Utilities/Extensions/ArrayExtensions'; import { FREE_TEXT_COLUMN_TYPE, } from '../../AdaptableState/Common/AdaptableColumn'; export class FreeTextColumnInternalApi extends ApiBase { /** * Checks if a User Edit was in a Free Text Column * @param cellDataChangedInfo change to check */ handleFreeTextColumnDataChange(cellDataChangedInfo) { let freeTextColumn = this.getFreeTextColumnApi() .getFreeTextColumns() .find((fc) => fc.ColumnId == cellDataChangedInfo.column.columnId); if (freeTextColumn) { let freeTextStoredValue = { PrimaryKey: cellDataChangedInfo.primaryKeyValue, FreeText: cellDataChangedInfo.newValue, }; this.getFreeTextColumnApi().setStoredValue(freeTextColumn.ColumnId, freeTextStoredValue); } } /** * Returns all the references in the AdaptableState of the given FreeTextColumn * @param freeTextColumn FreeTextColumn to be checked */ getFreeTextColumnModuleReferences(freeTextColumn) { const references = []; this.getAdaptableInternalApi() .getModules() .forEach((module) => { if (module .getModuleFreeTextColumnReferences() .some((moduleReference) => moduleReference.Uuid === freeTextColumn.Uuid)) { references.push(module.moduleInfo.FriendlyName); } }); return references; } getColDefsForFreeTextColumns() { const defaultSpecialColumnSettings = this.getGridApi().internalApi.deriveSpecialColumnSettingsFromAgGridDefaultColDef(); const defaultFreeTextColumnSettings = CreateEmptyFreeTextColumn(defaultSpecialColumnSettings).FreeTextColumnSettings; return this.getFreeTextColumnApi() .getFreeTextColumns() .map((freeTextColumn) => { const freeTextColumnSettings = { ...defaultFreeTextColumnSettings, ...freeTextColumn.FreeTextColumnSettings, }; const dataTypeEditor = freeTextColumnSettings.DataType === 'number' ? AdaptableNumberEditor : freeTextColumnSettings.DataType === 'date' ? AdaptableDateEditor : null; const columnTypes = [FREE_TEXT_COLUMN_TYPE]; if (ArrayExtensions.IsNotNullOrEmpty(freeTextColumn?.FreeTextColumnSettings?.ColumnTypes)) { columnTypes.push(...freeTextColumn.FreeTextColumnSettings.ColumnTypes); } const newColDef = { headerName: freeTextColumn.FriendlyName || freeTextColumn.ColumnId, colId: freeTextColumn.ColumnId, editable: true, hide: false, width: freeTextColumnSettings.Width, enableValue: freeTextColumnSettings.Aggregatable, filter: freeTextColumnSettings.Filterable, floatingFilter: freeTextColumnSettings.Filterable, resizable: freeTextColumnSettings.Resizable, enableRowGroup: freeTextColumnSettings.Groupable, sortable: freeTextColumnSettings.Sortable, enablePivot: freeTextColumnSettings.Pivotable, suppressHeaderMenuButton: freeTextColumnSettings.SuppressMenu, suppressMovable: freeTextColumnSettings.SuppressMovable, cellEditor: dataTypeEditor ?? (freeTextColumn.TextEditor && freeTextColumn.TextEditor == 'Large' ? 'agLargeTextCellEditor' : 'agTextCellEditor'), type: columnTypes, valueSetter: (params) => { return (params.data[freeTextColumn.ColumnId] = params.newValue); }, cellDataType: freeTextColumnSettings.DataType, valueGetter: (params) => this.getFreeTextColumnApi().getFreeTextColumnValueForRowNode(freeTextColumn, params.node), }; if (freeTextColumnSettings.HeaderToolTip) { newColDef.headerTooltip = freeTextColumnSettings.HeaderToolTip; } this.logInfo('Setting up FreeText Column: ' + freeTextColumn.ColumnId); return newColDef; }); } validateDeletedFreeTextColumn(freeTextColumn) { const freeTextColumnReferences = this.getFreeTextColumnModuleReferences(freeTextColumn); if (freeTextColumnReferences.length) { const alert = { alertType: 'generic', header: 'FreeTextColumn could not be deleted', message: `It is still referenced in the following modules: ${freeTextColumnReferences.join(', ')}`, alertDefinition: ObjectFactory.CreateInternalAlertDefinitionForMessages('Error'), }; this.getAlertApi().displayAdaptableAlertNotification(alert); return false; } else { return true; } } }