UNPKG

@adaptabletools/adaptable

Version:

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

191 lines (190 loc) 8.21 kB
import { ACCESS_LEVEL_HIDDEN } from '../../Utilities/Constants/GeneralConstants'; import { ColumnFilterModuleId, GridFilterModuleId, } from '../../Utilities/Constants/ModuleConstants'; import ArrayExtensions from '../../Utilities/Extensions/ArrayExtensions'; import { ApiBase } from '../Implementation/ApiBase'; import { areLayoutsEqual, isPivotLayout } from '../Implementation/LayoutHelpers'; import ObjectFactory from '../../Utilities/ObjectFactory'; import Helper from '../../Utilities/Helpers/Helper'; import AdaptableHelper from '../../Utilities/Helpers/AdaptableHelper'; export class LayoutInternalApi extends ApiBase { areLayoutsEqual(layout1, layout2) { return areLayoutsEqual(layout1, layout2); } getLayoutSupportedFeatures() { const layoutSupportedFeatures = { RowGroupedColumns: true, TableAggregationColumns: true, PivotAggregationColumns: true, PivotColumns: true, ColumnFilters: true, ColumnSorts: true, GridFilter: true, RowSummaries: true, }; if (this.getGridApi().isTreeDataGrid()) { layoutSupportedFeatures.PivotColumns = false; } if (this.getGridApi().getAgGridRowModelType() === 'viewport') { layoutSupportedFeatures.RowGroupedColumns = false; layoutSupportedFeatures.TableAggregationColumns = false; layoutSupportedFeatures.PivotAggregationColumns = false; layoutSupportedFeatures.PivotColumns = false; } if (!this.getFilterOptions().useAdaptableFiltering) { layoutSupportedFeatures.ColumnFilters = false; layoutSupportedFeatures.GridFilter = false; } if (this.getEntitlementApi().getEntitlementAccessLevelForModule(ColumnFilterModuleId) == ACCESS_LEVEL_HIDDEN) { layoutSupportedFeatures.GridFilter = false; } if (this.getEntitlementApi().getEntitlementAccessLevelForModule(GridFilterModuleId) == ACCESS_LEVEL_HIDDEN) { layoutSupportedFeatures.GridFilter = false; } if (this._adaptable?.getAgGridRowModelType?.() !== 'clientSide') { layoutSupportedFeatures.RowSummaries = false; } return layoutSupportedFeatures; } hasLayoutSpecificObjects() { const layoutTagOptions = this.getLayoutOptions().layoutTagOptions; if (!layoutTagOptions) { return false; } if (layoutTagOptions.autoCheckTagsForLayouts == true || typeof layoutTagOptions?.isObjectExtendedInLayout === 'function') { return true; } return false; } isObjectExtendedInLayout(object, module, layout) { if (!this.hasLayoutSpecificObjects()) { return true; } const layoutTagOptions = this.getLayoutOptions().layoutTagOptions; if (layoutTagOptions?.autoCheckTagsForLayouts == true) { const tags = 'ReportSchedule' in object && object.ReportSchedule ? object.ReportSchedule.Tags : object.Tags; return ArrayExtensions.IsNullOrEmpty(tags) ? true : tags?.includes(layout.Name); } const context = { adaptableObject: object, module, layout, ...this.getAdaptableInternalApi().buildBaseContext(), }; return layoutTagOptions?.isObjectExtendedInLayout(context); } showLayoutNonExtendedObjects() { return this.getAdaptableState().Internal.Layout.showLayoutNonExtendedObjects; } isLayoutGrouped(layout) { if (!layout) { layout = this.getLayoutApi().getCurrentLayout(); } return (layout?.RowGroupedColumns?.length || layout?.PivotGroupedColumns?.length) > 0; } setupRowSummaries() { if (!this._adaptable.agGridModulesAdapter.isAgGridModuleRegistered('PinnedRowModule')) { this.getAdaptableApi().consoleError('Layout Row Summaries require the AG Grid "PinnedRowModule". Please register this module.'); return; } const rowSummaries = this.getAdaptableState().Internal?.RowSummary?.rowSummaries ?? []; const { top, bottom } = rowSummaries.reduce((acc, summaryRow) => { const row = summaryRow.RowData; if (summaryRow.Position === 'Bottom' || !summaryRow.Position) { acc.bottom.push(row); } else { acc.top.push(row); } return acc; }, { top: [], bottom: [] }); const agGridAdapter = this.getAdaptableInternalApi().getAgGridAdapter(); agGridAdapter.setGridOption('pinnedTopRowData', top); agGridAdapter.setGridOption('pinnedBottomRowData', bottom); } refreshLayout() { this._adaptable.refreshLayout(); } getChangedColumnSorts(oldSorts, newSorts) { if (ArrayExtensions.IsNullOrEmpty(oldSorts) && ArrayExtensions.IsNullOrEmpty(newSorts)) { return []; } if (ArrayExtensions.IsNullOrEmpty(oldSorts)) { return newSorts.map((sort) => sort.ColumnId); } if (ArrayExtensions.IsNullOrEmpty(newSorts)) { return oldSorts.map((sort) => sort.ColumnId); } const changedColumnIds = []; const oldSortsMap = new Map(); oldSorts.forEach((sort) => { oldSortsMap.set(sort.ColumnId, sort.SortOrder); }); newSorts.forEach((newSort) => { const oldSortOrder = oldSortsMap.get(newSort.ColumnId); if (oldSortOrder === undefined || oldSortOrder !== newSort.SortOrder) { changedColumnIds.push(newSort.ColumnId); } oldSortsMap.delete(newSort.ColumnId); }); oldSortsMap.forEach((_, columnId) => { changedColumnIds.push(columnId); }); return changedColumnIds; } buildInitialLayout(providedLayout, type) { const layoutType = type || (isPivotLayout(providedLayout) ? 'pivot' : 'table'); const providedTableLayout = providedLayout; const providedPivotLayout = providedLayout; const initialEmptyLayout = layoutType === 'pivot' ? ObjectFactory.CreateEmptyPivotLayout({ ...providedPivotLayout }) : ObjectFactory.CreateEmptyTableLayout({ ...providedTableLayout }); const defaultLayoutProperties = this.getLayoutCreationDefaultProperties(layoutType); const initialLayout = { ...initialEmptyLayout, ...defaultLayoutProperties, }; return initialLayout; } getLayoutCreationDefaultProperties(layoutType) { const layoutCreationDefPropsOption = this.getLayoutOptions().layoutCreationDefaultProperties; if (typeof layoutCreationDefPropsOption === 'object') { const initialProps = layoutType === 'table' ? layoutCreationDefPropsOption.tableLayout : layoutCreationDefPropsOption.pivotLayout; return initialProps; } if (typeof layoutCreationDefPropsOption === 'function') { const context = { layoutType, ...this.getAdaptableInternalApi().buildBaseContext(), }; return layoutCreationDefPropsOption(context); } return {}; } cloneLayout(layoutToClone) { let clonedLayout = Helper.cloneObject(layoutToClone); let result = { ...this.buildInitialLayout(clonedLayout), }; result = AdaptableHelper.removeAdaptableObjectPrimitivesInlineDeep(result); delete result.Name; return result; } getCurrentLayout_perfOptimized() { const layoutState = this.getAdaptableState().Layout; const currentLayoutName = layoutState.CurrentLayout; if (!currentLayoutName) { return null; } return layoutState.Layouts.find((layout) => layout.Name === currentLayoutName); } getCurrentLayoutRowGroupDisplayType() { return this.getLayoutApi().getCurrentLayout()?.RowGroupDisplayType ?? 'single'; } }