UNPKG

@adaptabletools/adaptable

Version:

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

177 lines (176 loc) 9.28 kB
import { AdaptableModuleBase } from './AdaptableModuleBase'; import * as ModuleConstants from '../Utilities/Constants/ModuleConstants'; import * as LayoutRedux from '../Redux/ActionsReducers/LayoutRedux'; import * as InternalRedux from '../Redux/ActionsReducers/InternalRedux'; import { FilterStatusBarSubPanelPopover } from '../View/Filter/FilterStatusBarSubPanelPopover'; import { getFilterPreview } from './Utilities/Layout/getLayoutFilterViewItems'; export class ColumnFilterModule extends AdaptableModuleBase { constructor(api) { super(ModuleConstants.ColumnFilterModuleId, ModuleConstants.ColumnFilterFriendlyName, 'filter', 'FilterPopup', 'Advanced filtering capability allows users to see precisely the data they want', api); } setModuleEntitlement() { if (!this.api.optionsApi.getFilterOptions().useAdaptableFiltering) { this.AccessLevel = 'Hidden'; } else { this.AccessLevel = this.api.entitlementApi.getEntitlementAccessLevelForModule(this.moduleInfo.ModuleName); } } getModuleAdaptableObjects() { return this.api.filterApi.columnFilterApi.getColumnFilters(); } getExplicitlyReferencedColumnIds(columnFilter) { return [columnFilter.ColumnId]; } hasNamedQueryReferences() { return false; } onAdaptableReady() { if (this.api.optionsApi.getFilterOptions().columnFilterOptions.showQuickFilter == false) { this.api.filterApi.columnFilterApi.hideQuickFilterBar(); } else { this.api.filterApi.columnFilterApi.showQuickFilterBar(); } const columnFilters = this.api.filterApi.columnFilterApi.getColumnFilters(); columnFilters.forEach((cf) => { if (!this.api.columnApi.isColumnInGrid(cf.ColumnId)) { this.api.logError('Column Filter contains missing column: ' + cf.ColumnId); } }); } createColumnMenuItems(column) { let columnFilterMenuItems = []; if (column && column.filterable && this.api.optionsApi.getFilterOptions().useAdaptableFiltering) { if (this.api.gridApi.isQuickFilterAvailable()) { const isFilterVisible = this.api.filterApi.columnFilterApi.isQuickFilterVisible(); if (this.isModuleEditable() && this.api.optionsApi.getFilterOptions().useAdaptableFiltering) { columnFilterMenuItems.push(this.createMenuItemReduxAction(isFilterVisible ? 'column-filter-bar-hide' : 'column-filter-bar-show', isFilterVisible ? 'Hide Filter Bar' : 'Show Filter Bar', isFilterVisible ? 'filter-off' : 'filter', isFilterVisible ? InternalRedux.QuickFilterBarHide() : InternalRedux.QuickFilterBarShow())); } } const existingColumnFilter = this.api.filterApi.columnFilterApi.getColumnFilterForColumn(column.columnId); if (existingColumnFilter) { columnFilterMenuItems.push(this.createMenuItemReduxAction('column-filter-clear', 'Clear Filter', 'close', LayoutRedux.LayoutColumnFilterClear(existingColumnFilter.ColumnId))); columnFilterMenuItems.push(this.createMenuItemReduxAction(existingColumnFilter.IsSuspended ? 'column-filter-unsuspend' : 'column-filter-suspend', existingColumnFilter.IsSuspended ? 'Unsuspend Filter' : 'Suspend Filter', existingColumnFilter.IsSuspended ? 'resume' : 'pause', existingColumnFilter.IsSuspended ? LayoutRedux.LayoutColumnFilterUnSuspend(existingColumnFilter) : LayoutRedux.LayoutColumnFilterSuspend(existingColumnFilter))); } return columnFilterMenuItems; } } createContextMenuItems(menuContext) { if (!menuContext.isRowGroupColumn && this.isModuleAvailable()) { if (menuContext.adaptableColumn && menuContext.adaptableColumn.filterable && menuContext.isSingleSelectedColumn && menuContext.gridCell != null && this.api.optionsApi.getFilterOptions().useAdaptableFiltering) { const existingColumnFilter = this.api.filterApi.columnFilterApi.getColumnFilterForColumn(menuContext.adaptableColumn.columnId); if (!existingColumnFilter) { if (!menuContext.isRowGroupColumn && !menuContext.isGroupedNode) { let isMultiple = menuContext.selectedCellInfo.gridCells.length > 1; let clickFunction = isMultiple ? () => { this.api.filterApi.columnFilterApi.internalApi.createValuesColumnFilterForCells(menuContext.selectedCellInfo.gridCells); } : () => { this.api.filterApi.columnFilterApi.internalApi.createEqualityColumnFilterForCell(menuContext.selectedCellInfo.gridCells[0]); }; return [ this.createMenuItemClickFunction('column-filter-on-cell-value', isMultiple ? 'Filter on Cell Values' : 'Filter on Cell Value', this.moduleInfo.Glyph, clickFunction), ]; } } else { return [ this.createMenuItemReduxAction('column-filter-clear', 'Clear Filter', 'close', LayoutRedux.LayoutColumnFilterClear(existingColumnFilter.ColumnId)), this.createMenuItemClickFunction(existingColumnFilter.IsSuspended ? 'column-filter-unsuspend' : 'column-filter-suspend', existingColumnFilter.IsSuspended ? 'Unsuspend Filter' : 'Suspend Filter', existingColumnFilter.IsSuspended ? 'resume' : 'pause', existingColumnFilter.IsSuspended ? () => { this.api.filterApi.columnFilterApi.unSuspendColumnFilter(existingColumnFilter); } : () => { this.api.filterApi.columnFilterApi.suspendColumnFilter(existingColumnFilter); }), ]; } } } } getTeamSharingAction() { return { ModuleEntities: this.api.filterApi.columnFilterApi.getColumnFilters(), AddAction: LayoutRedux.LayoutColumnFilterAdd, EditAction: LayoutRedux.LayoutColumnFilterEdit, //TODO need to change this to ColumnFilterSet }; } toViewCompact(filter) { return { item: { values: [this.api.filterApi.columnFilterApi.columnFilterToString(filter)], }, abObject: filter, }; } toView(filter) { return { items: [ { name: 'Column', values: [this.api.columnApi.getFriendlyNameForColumnId(filter.ColumnId)], }, { name: 'Filter', values: [getFilterPreview(filter, this.api)], }, ], abObject: filter, }; } toViewAll() { return this.getModuleAdaptableObjects().map((filter) => this.toView(filter)); } getViewProperties() { const api = this.api; return { getSuspendAction: (columnFilter) => LayoutRedux.LayoutColumnFilterSuspend(columnFilter), getUnSuspendAction: (columnFilter) => LayoutRedux.LayoutColumnFilterUnSuspend(columnFilter), getCompactSuspendAction: (columnFilter) => LayoutRedux.LayoutColumnFilterSuspend(columnFilter), getCompactUnSuspendAction: (columnFilter) => LayoutRedux.LayoutColumnFilterUnSuspend(columnFilter), getSuspendAllAction: () => LayoutRedux.LayoutColumnFilterSuspendAll(), getUnSuspendAllAction: () => LayoutRedux.LayoutColumnFilterUnSuspendAll(), getDeleteAction: (columnFilter) => LayoutRedux.LayoutColumnFilterClear(columnFilter.ColumnId), getCompactDeleteAction: (columnFilter) => LayoutRedux.LayoutColumnFilterClear(columnFilter.ColumnId), getDeleteAllAction: LayoutRedux.LayoutColumnFilterClearAll, emptyView: ` There are no Column Filters applied. \n Create Column Filters by using the Filter Components or by editing a Layout. `, getStatusBarPanelProps() { let text; const filters = api.filterApi.columnFilterApi.getColumnFilters(); if (filters.length === 0) { text = '0 Filters'; } else if (filters.length === 1) { text = '1 Filter'; } else { text = filters.length + ' Filters'; } const popover = filters.length ? FilterStatusBarSubPanelPopover : null; return { content: text, popover, popoverMinWidth: 320, }; }, }; } }