UNPKG

ag-grid-enterprise

Version:

Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue

1,005 lines (961 loc) 4.21 MB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define([], factory); else if(typeof exports === 'object') exports["agGrid"] = factory(); else root["agGrid"] = factory(); })(self, function() { return /******/ (function() { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ 5372: /***/ (function(__unused_webpack_module, exports) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.advancedFilterCSS = void 0; exports.advancedFilterCSS = `.ag-advanced-filter-header{align-items:center;background-color:var(--ag-header-background-color);border-bottom:var(--ag-header-row-border);display:flex;padding-left:var(--ag-cell-horizontal-padding);padding-right:var(--ag-cell-horizontal-padding);position:relative}.ag-advanced-filter{align-items:center;display:flex;width:100%}.ag-advanced-filter-apply-button,.ag-advanced-filter-builder-button{line-height:normal;white-space:nowrap}:where(.ag-ltr) .ag-advanced-filter-apply-button,:where(.ag-ltr) .ag-advanced-filter-builder-button{margin-left:calc(var(--ag-spacing)*2)}:where(.ag-rtl) .ag-advanced-filter-apply-button,:where(.ag-rtl) .ag-advanced-filter-builder-button{margin-right:calc(var(--ag-spacing)*2)}.ag-advanced-filter-builder-button{align-items:center;background-color:unset;border:0;display:flex;font-size:var(--ag-font-size);font-weight:600;padding:var(--ag-spacing);&:where(:not(:disabled)){cursor:pointer;&:hover{background-color:var(--ag-row-hover-color)}}}:where(.ag-ltr) .ag-advanced-filter-builder-button-label{margin-left:var(--ag-spacing)}:where(.ag-rtl) .ag-advanced-filter-builder-button-label{margin-right:var(--ag-spacing)}.ag-advanced-filter-builder{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.ag-advanced-filter-builder-list{flex:1;overflow:auto}.ag-advanced-filter-builder-button-panel{border-top:var(--ag-advanced-filter-builder-button-bar-border);display:flex;justify-content:flex-end;padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding)}:where(.ag-ltr) .ag-advanced-filter-builder-apply-button,:where(.ag-ltr) .ag-advanced-filter-builder-cancel-button{margin-left:calc(var(--ag-spacing)*2)}:where(.ag-rtl) .ag-advanced-filter-builder-apply-button,:where(.ag-rtl) .ag-advanced-filter-builder-cancel-button{margin-right:calc(var(--ag-spacing)*2)}.ag-advanced-filter-builder-item-wrapper{align-items:center;display:flex;flex:1 1 auto;justify-content:space-between;overflow:hidden}:where(.ag-ltr) .ag-advanced-filter-builder-item-wrapper{padding-left:calc(var(--ag-icon-size)/2);padding-right:var(--ag-icon-size)}:where(.ag-rtl) .ag-advanced-filter-builder-item-wrapper{padding-left:var(--ag-icon-size);padding-right:calc(var(--ag-icon-size)/2)}:where(.ag-virtual-list-viewport .ag-advanced-filter-builder-item-wrapper) .ag-tab-guard{position:absolute}.ag-advanced-filter-builder-item-tree-lines>*{width:var(--ag-advanced-filter-builder-indent-size)}.ag-advanced-filter-builder-item-tree-line-root{width:var(--ag-icon-size);&:before{height:50%;top:50%}}.ag-advanced-filter-builder-item-tree-line-horizontal,.ag-advanced-filter-builder-item-tree-line-vertical,.ag-advanced-filter-builder-item-tree-line-vertical-bottom,.ag-advanced-filter-builder-item-tree-line-vertical-top{align-items:center;display:flex;height:100%;position:relative;&:after,&:before{content:"";height:100%;position:absolute}}.ag-advanced-filter-builder-item-tree-line-horizontal:after{border-bottom:1px solid var(--ag-border-color);height:50%;top:0;width:calc(var(--ag-advanced-filter-builder-indent-size) - var(--ag-icon-size))}:where(.ag-ltr) .ag-advanced-filter-builder-item-tree-line-horizontal:after{left:calc(var(--ag-icon-size)/2)}:where(.ag-rtl) .ag-advanced-filter-builder-item-tree-line-horizontal:after{right:calc(var(--ag-icon-size)/2)}.ag-advanced-filter-builder-item-tree-line-vertical:before{top:0;width:calc(var(--ag-advanced-filter-builder-indent-size) - var(--ag-icon-size)/2)}:where(.ag-ltr) .ag-advanced-filter-builder-item-tree-line-vertical:before{border-left:1px solid var(--ag-border-color);left:calc(var(--ag-icon-size)/2)}:where(.ag-rtl) .ag-advanced-filter-builder-item-tree-line-vertical:before{border-right:1px solid var(--ag-border-color);right:calc(var(--ag-icon-size)/2)}.ag-advanced-filter-builder-item-tree-line-vertical-top:before{height:50%;top:0;width:calc(var(--ag-advanced-filter-builder-indent-size) - var(--ag-icon-size)/2)}:where(.ag-ltr) .ag-advanced-filter-builder-item-tree-line-vertical-top:before{border-left:1px solid var(--ag-border-color);left:calc(var(--ag-icon-size)/2)}:where(.ag-rtl) .ag-advanced-filter-builder-item-tree-line-vertical-top:before{border-right:1px solid var(--ag-border-color);right:calc(var(--ag-icon-size)/2)}.ag-advanced-filter-builder-item-tree-line-vertical-bottom:before{height:calc(50% - var(--ag-icon-size)*1.5/2);top:calc(50% + var(--ag-icon-size)*1.5/2);width:calc(var(--ag-icon-size)/2)}:where(.ag-ltr) .ag-advanced-filter-builder-item-tree-line-vertical-bottom:before{border-left:1px solid var(--ag-border-color);left:calc(var(--ag-icon-size)/2)}:where(.ag-rtl) .ag-advanced-filter-builder-item-tree-line-vertical-bottom:before{border-right:1px solid var(--ag-border-color);right:calc(var(--ag-icon-size)/2)}.ag-advanced-filter-builder-item-condition{padding-bottom:var(--ag-spacing);padding-top:var(--ag-spacing)}.ag-advanced-filter-builder-item,.ag-advanced-filter-builder-item-buttons,.ag-advanced-filter-builder-item-condition,.ag-advanced-filter-builder-item-tree-lines,.ag-advanced-filter-builder-pill,.ag-advanced-filter-builder-pill-wrapper{align-items:center;display:flex;height:100%}.ag-advanced-filter-builder-pill-wrapper{margin:0 var(--ag-spacing)}.ag-advanced-filter-builder-pill{border-radius:var(--ag-border-radius);min-height:calc(100% - var(--ag-spacing)*3);min-width:calc(var(--ag-spacing)*2);padding:var(--ag-spacing) calc(var(--ag-spacing)*2);position:relative}:where(.ag-advanced-filter-builder-pill){.ag-advanced-filter-builder-value-number{font-family:monospace;font-weight:700}.ag-advanced-filter-builder-value-empty{color:var(--ag-subtle-text-color)}}:where(.ag-ltr) :where(.ag-advanced-filter-builder-pill){.ag-picker-field-display{margin-right:var(--ag-spacing)}}:where(.ag-rtl) :where(.ag-advanced-filter-builder-pill){.ag-picker-field-display{margin-left:var(--ag-spacing)}}.ag-advanced-filter-builder-pill-display{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ag-advanced-filter-builder-join-pill{background-color:var(--ag-advanced-filter-builder-join-pill-color);cursor:pointer}.ag-advanced-filter-builder-column-pill{background-color:var(--ag-advanced-filter-builder-column-pill-color);cursor:pointer}.ag-advanced-filter-builder-option-pill{background-color:var(--ag-advanced-filter-builder-option-pill-color);cursor:pointer}.ag-advanced-filter-builder-value-pill{background-color:var(--ag-advanced-filter-builder-value-pill-color);cursor:text;max-width:140px;:where(.ag-advanced-filter-builder-pill-display){display:block}}.ag-advanced-filter-builder-item-buttons>*{margin:0 calc(var(--ag-spacing)*.5)}.ag-advanced-filter-builder-item-button{color:var(--ag-subtle-text-color);cursor:pointer;position:relative}.ag-advanced-filter-builder-item-button,.ag-advanced-filter-builder-pill{&:focus-visible{box-shadow:var(--ag-focus-shadow)}}.ag-advanced-filter-builder-item-button-disabled{cursor:default;opacity:.5}.ag-advanced-filter-builder-virtual-list-container{top:var(--ag-spacing)}.ag-advanced-filter-builder-virtual-list-item{cursor:default;display:flex;height:var(--ag-list-item-height);&:hover{background-color:var(--ag-row-hover-color);:where(.ag-advanced-filter-builder-item-button){opacity:1}}}.ag-advanced-filter-builder-invalid{color:var(--ag-invalid-color);cursor:default;margin:0 var(--ag-spacing)}:where(.ag-advanced-filter-builder-validation) .ag-advanced-filter-builder-invalid,:where(.ag-advanced-filter-builder-virtual-list-item-highlight) .ag-advanced-filter-builder-item-button:focus-visible{opacity:1}`; /***/ }), /***/ 6138: /***/ (function(__unused_webpack_module, exports) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.hideAdvancedFilterBuilder = exports.showAdvancedFilterBuilder = exports.setAdvancedFilterModel = exports.getAdvancedFilterModel = void 0; function getAdvancedFilterModel(beans) { return beans.filterManager?.getAdvFilterModel() ?? null; } exports.getAdvancedFilterModel = getAdvancedFilterModel; function setAdvancedFilterModel(beans, advancedFilterModel) { beans.filterManager?.setAdvFilterModel(advancedFilterModel); } exports.setAdvancedFilterModel = setAdvancedFilterModel; function showAdvancedFilterBuilder(beans) { beans.filterManager?.toggleAdvFilterBuilder(true, 'api'); } exports.showAdvancedFilterBuilder = showAdvancedFilterBuilder; function hideAdvancedFilterBuilder(beans) { beans.filterManager?.toggleAdvFilterBuilder(false, 'api'); } exports.hideAdvancedFilterBuilder = hideAdvancedFilterBuilder; /***/ }), /***/ 2583: /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.AdvancedFilterComp = void 0; const ag_grid_community_1 = __webpack_require__(6624); const agAutocomplete_1 = __webpack_require__(2611); const AdvancedFilterElement = { tag: 'div', cls: 'ag-advanced-filter', role: 'presentation', attrs: { tabindex: '-1' }, children: [ { tag: 'ag-autocomplete', ref: 'eAutocomplete' }, { tag: 'button', ref: 'eApplyFilterButton', cls: 'ag-button ag-standard-button ag-advanced-filter-apply-button', }, { tag: 'button', ref: 'eBuilderFilterButton', cls: 'ag-button ag-advanced-filter-builder-button', children: [ { tag: 'span', ref: 'eBuilderFilterButtonIcon', attrs: { 'aria-hidden': 'true' } }, { tag: 'span', ref: 'eBuilderFilterButtonLabel', cls: 'ag-advanced-filter-builder-button-label' }, ], }, ], }; class AdvancedFilterComp extends ag_grid_community_1.Component { wireBeans(beans) { this.advFilterExpSvc = beans.advFilterExpSvc; this.advancedFilter = beans.advancedFilter; this.filterManager = beans.filterManager; this.registry = beans.registry; } constructor() { super(AdvancedFilterElement, [agAutocomplete_1.AgAutocompleteSelector]); this.eAutocomplete = ag_grid_community_1.RefPlaceholder; this.eApplyFilterButton = ag_grid_community_1.RefPlaceholder; this.eBuilderFilterButton = ag_grid_community_1.RefPlaceholder; this.eBuilderFilterButtonIcon = ag_grid_community_1.RefPlaceholder; this.eBuilderFilterButtonLabel = ag_grid_community_1.RefPlaceholder; this.expressionParser = null; this.isApplyDisabled = true; this.builderOpen = false; } postConstruct() { this.tooltipFeature = this.createOptionalManagedBean(this.registry.createDynamicBean('tooltipFeature', false, { getGui: () => this.getGui(), getTooltipShowDelayOverride: () => 1000, getLocation: () => 'advancedFilter', })); this.eAutocomplete .setListGenerator((_value, position) => this.generateAutocompleteListParams(position)) .setValidator(() => this.validateValue()) .setForceLastSelection((lastSelection, searchString) => this.forceLastSelection(lastSelection, searchString)) .setInputAriaLabel(this.advFilterExpSvc.translate('ariaAdvancedFilterInput')) .setListAriaLabel(this.advFilterExpSvc.translate('ariaLabelAdvancedFilterAutocomplete')); this.refresh(); this.addManagedListeners(this.eAutocomplete, { eventValueChanged: ({ value }) => this.onValueChanged(value), eventValueConfirmed: ({ isValid }) => this.onValueConfirmed(isValid), eventOptionSelected: ({ position, updateEntry, autocompleteType }) => this.onOptionSelected(position, updateEntry, autocompleteType), eventValidChanged: ({ isValid, validationMessage }) => this.onValidChanged(isValid, validationMessage), }); this.setupApplyButton(); this.setupBuilderButton(); } refresh() { const expression = this.advancedFilter.getExpressionDisplayValue(); this.eAutocomplete.setValue({ value: expression ?? '', position: expression?.length, updateListOnlyIfOpen: true, }); } setInputDisabled(disabled) { this.eAutocomplete.setInputDisabled(disabled); (0, ag_grid_community_1._setDisabled)(this.eApplyFilterButton, disabled || this.isApplyDisabled); } setupApplyButton() { // eslint-disable-next-line no-restricted-properties -- Could swap to textContent, but could be a breaking change this.eApplyFilterButton.innerText = this.advFilterExpSvc.translate('advancedFilterApply'); this.activateTabIndex([this.eApplyFilterButton]); this.addManagedElementListeners(this.eApplyFilterButton, { click: () => this.onValueConfirmed(this.eAutocomplete.isValid()), }); (0, ag_grid_community_1._setDisabled)(this.eApplyFilterButton, this.isApplyDisabled); } setupBuilderButton() { this.eBuilderFilterButtonIcon.appendChild((0, ag_grid_community_1._createIconNoSpan)('advancedFilterBuilder', this.beans)); // eslint-disable-next-line no-restricted-properties -- Could swap to textContent, but could be a breaking change this.eBuilderFilterButtonLabel.innerText = this.advFilterExpSvc.translate('advancedFilterBuilder'); this.activateTabIndex([this.eBuilderFilterButton]); this.addManagedElementListeners(this.eBuilderFilterButton, { click: () => this.openBuilder() }); this.addManagedListeners(this.advancedFilter.getCtrl(), { advancedFilterBuilderClosed: () => this.closeBuilder(), }); } onValueChanged(value) { value = (0, ag_grid_community_1._makeNull)(value); this.advancedFilter.setExpressionDisplayValue(value); this.expressionParser = this.advancedFilter.createExpressionParser(value); const updatedExpression = this.expressionParser?.parseExpression(); if (updatedExpression && updatedExpression !== value) { this.eAutocomplete.setValue({ value: updatedExpression, silent: true, restoreFocus: true }); } } onValueConfirmed(isValid) { if (!isValid || this.isApplyDisabled) { return; } (0, ag_grid_community_1._setDisabled)(this.eApplyFilterButton, true); this.advancedFilter.applyExpression(); this.filterManager?.onFilterChanged({ source: 'advancedFilter' }); } onOptionSelected(position, updateEntry, type) { const { updatedValue, updatedPosition, hideAutocomplete } = this.updateExpression(position, updateEntry, type); this.eAutocomplete.setValue({ value: updatedValue, position: updatedPosition, updateListOnlyIfOpen: hideAutocomplete, restoreFocus: true, }); } validateValue() { return this.expressionParser?.isValid() ? null : this.expressionParser?.getValidationMessage() ?? null; } onValidChanged(isValid, validationMessage) { this.isApplyDisabled = !isValid || this.advancedFilter.isCurrentExpressionApplied(); (0, ag_grid_community_1._setDisabled)(this.eApplyFilterButton, this.isApplyDisabled); this.tooltipFeature?.setTooltipAndRefresh(validationMessage); } generateAutocompleteListParams(position) { return this.expressionParser ? this.expressionParser.getAutocompleteListParams(position) : this.advFilterExpSvc.getDefaultAutocompleteListParams(''); } updateExpression(position, updateEntry, type) { this.advFilterExpSvc.updateAutocompleteCache(updateEntry, type); return (this.expressionParser?.updateExpression(position, updateEntry, type) ?? this.advancedFilter.getDefaultExpression(updateEntry)); } forceLastSelection({ key, displayValue }, searchString) { return !!searchString.toLocaleLowerCase().match(`^${(displayValue ?? key).toLocaleLowerCase()}\\s*$`); } openBuilder() { if (this.builderOpen) { return; } this.builderOpen = true; (0, ag_grid_community_1._setDisabled)(this.eBuilderFilterButton, true); this.advancedFilter.getCtrl().toggleFilterBuilder({ source: 'ui', eventSource: this.eBuilderFilterButton }); } closeBuilder() { if (!this.builderOpen) { return; } this.builderOpen = false; (0, ag_grid_community_1._setDisabled)(this.eBuilderFilterButton, false); this.eBuilderFilterButton.focus(); } } exports.AdvancedFilterComp = AdvancedFilterComp; /***/ }), /***/ 5865: /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.AdvancedFilterCtrl = void 0; const ag_grid_community_1 = __webpack_require__(6624); const agDialog_1 = __webpack_require__(8775); const advancedFilterComp_1 = __webpack_require__(2583); const advancedFilterHeaderComp_1 = __webpack_require__(4858); const advancedFilterBuilderComp_1 = __webpack_require__(8986); class AdvancedFilterCtrl extends ag_grid_community_1.BeanStub { wireBeans(beans) { this.ctrlsSvc = beans.ctrlsSvc; this.popupSvc = beans.popupSvc; this.advFilterExpSvc = beans.advFilterExpSvc; this.environment = beans.environment; } constructor(enabled) { super(); this.enabled = enabled; } postConstruct() { this.hasAdvancedFilterParent = !!this.gos.get('advancedFilterParent'); this.ctrlsSvc.whenReady(this, () => this.setAdvancedFilterComp()); this.addManagedEventListeners({ advancedFilterEnabledChanged: ({ enabled }) => this.onEnabledChanged(enabled), }); this.addManagedPropertyListener('advancedFilterParent', () => this.updateComps()); this.addDestroyFunc(() => { this.destroyAdvancedFilterComp(); this.destroyBean(this.eBuilderComp); if (this.eBuilderDialog && this.eBuilderDialog.isAlive()) { this.destroyBean(this.eBuilderDialog); } }); } setupHeaderComp(eCompToInsertBefore) { if (this.eHeaderComp) { this.eHeaderComp?.getGui().remove(); this.destroyBean(this.eHeaderComp); } this.eHeaderComp = this.createManagedBean(new advancedFilterHeaderComp_1.AdvancedFilterHeaderComp(this.enabled && !this.hasAdvancedFilterParent)); eCompToInsertBefore.insertAdjacentElement('beforebegin', this.eHeaderComp.getGui()); } focusHeaderComp() { if (this.eHeaderComp) { this.eHeaderComp.getFocusableElement().focus(); return true; } return false; } refreshComp() { this.eFilterComp?.refresh(); this.eHeaderComp?.refresh(); } refreshBuilderComp() { this.eBuilderComp?.refresh(); } getHeaderHeight() { return this.eHeaderComp?.getHeight() ?? 0; } setInputDisabled(disabled) { this.eFilterComp?.setInputDisabled(disabled); this.eHeaderComp?.setInputDisabled(disabled); } toggleFilterBuilder(params) { const { source, force, eventSource } = params; if ((force && this.eBuilderDialog) || (force === false && !this.eBuilderDialog)) { // state requested is already active return; } if (this.eBuilderDialog) { this.builderDestroySource = source; this.destroyBean(this.eBuilderDialog); return; } this.setInputDisabled(true); const { width, height, minWidth } = this.getBuilderDialogSize(); this.eBuilderComp = this.createBean(new advancedFilterBuilderComp_1.AdvancedFilterBuilderComp()); this.eBuilderDialog = this.createBean(new agDialog_1.AgDialog({ title: this.advFilterExpSvc.translate('advancedFilterBuilderTitle'), component: this.eBuilderComp, width, height, resizable: true, movable: true, maximizable: true, centered: true, closable: true, minWidth, afterGuiAttached: () => this.eBuilderComp?.afterGuiAttached(), postProcessPopupParams: { type: 'advancedFilterBuilder', eventSource, }, })); this.dispatchFilterBuilderVisibleChangedEvent(source, true); this.eBuilderDialog.addEventListener('destroyed', () => { this.destroyBean(this.eBuilderComp); this.eBuilderComp = undefined; this.eBuilderDialog = undefined; this.setInputDisabled(false); this.dispatchLocalEvent({ type: 'advancedFilterBuilderClosed', }); this.dispatchFilterBuilderVisibleChangedEvent(this.builderDestroySource ?? 'ui', false); this.builderDestroySource = undefined; }); } dispatchFilterBuilderVisibleChangedEvent(source, visible) { this.eventSvc.dispatchEvent({ type: 'advancedFilterBuilderVisibleChanged', source, visible, }); } getBuilderDialogSize() { const minWidth = this.gos.get('advancedFilterBuilderParams')?.minWidth ?? 500; const popupParent = this.popupSvc.getPopupParent(); const maxWidth = Math.round((0, ag_grid_community_1._getAbsoluteWidth)(popupParent)) - 2; // assume 1 pixel border const maxHeight = Math.round((0, ag_grid_community_1._getAbsoluteHeight)(popupParent) * 0.75) - 2; const width = Math.min(Math.max(600, minWidth), maxWidth); const height = Math.min(600, maxHeight); return { width, height, minWidth }; } onEnabledChanged(enabled) { this.enabled = enabled; this.updateComps(); } updateComps() { this.setAdvancedFilterComp(); this.setHeaderCompEnabled(); this.eventSvc.dispatchEvent({ type: 'headerHeightChanged', }); } setAdvancedFilterComp() { this.destroyAdvancedFilterComp(); if (!this.enabled) { return; } const advancedFilterParent = this.gos.get('advancedFilterParent'); this.hasAdvancedFilterParent = !!advancedFilterParent; if (advancedFilterParent) { // unmanaged as can be recreated const eAdvancedFilterComp = this.createBean(new advancedFilterComp_1.AdvancedFilterComp()); const eAdvancedFilterCompGui = eAdvancedFilterComp.getGui(); this.environment.applyThemeClasses(eAdvancedFilterCompGui); eAdvancedFilterCompGui.classList.add(this.gos.get('enableRtl') ? 'ag-rtl' : 'ag-ltr'); advancedFilterParent.appendChild(eAdvancedFilterCompGui); this.eFilterComp = eAdvancedFilterComp; } } setHeaderCompEnabled() { this.eHeaderComp?.setEnabled(this.enabled && !this.hasAdvancedFilterParent); } destroyAdvancedFilterComp() { if (this.eFilterComp) { (0, ag_grid_community_1._removeFromParent)(this.eFilterComp.getGui()); this.destroyBean(this.eFilterComp); } } } exports.AdvancedFilterCtrl = AdvancedFilterCtrl; /***/ }), /***/ 1723: /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.AdvancedFilterExpressionService = void 0; const ag_grid_community_1 = __webpack_require__(6624); const advancedFilterLocaleText_1 = __webpack_require__(8397); const colFilterExpressionParser_1 = __webpack_require__(9023); const filterExpressionOperators_1 = __webpack_require__(9459); class AdvancedFilterExpressionService extends ag_grid_community_1.BeanStub { constructor() { super(...arguments); this.beanName = 'advFilterExpSvc'; this.columnNameToIdMap = {}; this.columnAutocompleteEntries = null; this.expressionEvaluatorParams = {}; } wireBeans(beans) { this.valueSvc = beans.valueSvc; this.colModel = beans.colModel; this.colNames = beans.colNames; this.dataTypeSvc = beans.dataTypeSvc; } postConstruct() { this.expressionJoinOperators = this.generateExpressionJoinOperators(); this.expressionOperators = this.generateExpressionOperators(); } parseJoinOperator(model) { const { type } = model; return this.expressionJoinOperators[type] ?? type; } getColumnDisplayValue(model) { const { colId } = model; const columnEntries = this.getColumnAutocompleteEntries(); const columnEntry = columnEntries.find(({ key }) => key === colId); let columnName; if (columnEntry) { columnName = columnEntry.displayValue; this.columnNameToIdMap[columnName.toLocaleUpperCase()] = { colId, columnName }; } else { columnName = colId; } return columnName; } getOperatorDisplayValue(model) { return this.getExpressionOperator(model.filterType, model.type)?.displayValue ?? model.type; } getOperandModelValue(operand, baseCellDataType, column) { switch (baseCellDataType) { case 'number': return (0, ag_grid_community_1._exists)(operand) ? Number(operand) : null; case 'date': return (0, ag_grid_community_1._serialiseDate)(this.valueSvc.parseValue(column, null, operand, undefined), false); case 'dateString': { // displayed string format may be different from data string format, so parse before converting to date const parsedDateString = this.valueSvc.parseValue(column, null, operand, undefined); return this.dataTypeSvc ? (0, ag_grid_community_1._serialiseDate)(this.dataTypeSvc.getDateParserFunction(column)(parsedDateString) ?? null, false) : parsedDateString; } } return operand; } getOperandDisplayValue(model, skipFormatting) { const { colId, filter } = model; const column = this.colModel.getColDefCol(colId); let operand = ''; if (filter != null) { let operand1; switch (model.filterType) { case 'number': operand1 = (0, ag_grid_community_1._toStringOrNull)(filter) ?? ''; break; case 'date': { const dateValue = (0, ag_grid_community_1._parseDateTimeFromString)(filter); operand1 = column ? this.valueSvc.formatValue(column, null, dateValue) : null; break; } case 'dateString': { let dateStringStringValue; if (this.dataTypeSvc) { // need to convert from ISO date string to Date to data string format to formatted string format const dateStringDateValue = (0, ag_grid_community_1._parseDateTimeFromString)(filter); dateStringStringValue = column ? this.dataTypeSvc?.getDateFormatterFunction(column)(dateStringDateValue ?? undefined) : null; } else { dateStringStringValue = filter; } operand1 = column ? this.valueSvc.formatValue(column, null, dateStringStringValue) : null; break; } } if (model.filterType !== 'number') { operand1 = operand1 ?? (0, ag_grid_community_1._toStringOrNull)(filter) ?? ''; if (!skipFormatting) { operand1 = `"${operand1}"`; } } operand = skipFormatting ? operand1 : ` ${operand1}`; } return operand; } parseColumnFilterModel(model) { const columnName = this.getColumnDisplayValue(model) ?? ''; const operator = this.getOperatorDisplayValue(model) ?? ''; const operands = this.getOperandDisplayValue(model); return `[${columnName}] ${operator}${operands}`; } updateAutocompleteCache(updateEntry, type) { if (type === 'column') { const { key: colId, displayValue } = updateEntry; this.columnNameToIdMap[updateEntry.displayValue.toLocaleUpperCase()] = { colId, columnName: displayValue, }; } } translate(key, variableValues) { let defaultValue = advancedFilterLocaleText_1.ADVANCED_FILTER_LOCALE_TEXT[key]; if (typeof defaultValue === 'function') { defaultValue = defaultValue(variableValues); } return this.getLocaleTextFunc()(key, defaultValue, variableValues); } generateAutocompleteListParams(entries, type, searchString) { return { enabled: true, type, searchString, entries, }; } getColumnAutocompleteEntries() { if (this.columnAutocompleteEntries) { return this.columnAutocompleteEntries; } const columns = this.colModel.getColDefCols() ?? []; const entries = []; const includeHiddenColumns = this.gos.get('includeHiddenColumnsInAdvancedFilter'); columns.forEach((column) => { if (column.getColDef().filter && (includeHiddenColumns || column.isVisible() || column.isRowGroupActive())) { entries.push({ key: column.getColId(), displayValue: this.colNames.getDisplayNameForColumn(column, 'advancedFilter'), }); } }); entries.sort((a, b) => { const aValue = a.displayValue ?? ''; const bValue = b.displayValue ?? ''; if (aValue < bValue) { return -1; } else if (bValue > aValue) { return 1; } return 0; }); return entries; } getOperatorAutocompleteEntries(column, baseCellDataType) { const activeOperators = this.getActiveOperators(column); return this.getDataTypeExpressionOperator(baseCellDataType).getEntries(activeOperators); } getJoinOperatorAutocompleteEntries() { // eslint-disable-next-line no-restricted-properties return Object.entries(this.expressionJoinOperators).map(([key, displayValue]) => ({ key, displayValue })); } getDefaultAutocompleteListParams(searchString) { return this.generateAutocompleteListParams(this.getColumnAutocompleteEntries(), 'column', searchString); } getDataTypeExpressionOperator(baseCellDataType) { return this.expressionOperators[baseCellDataType]; } getExpressionOperator(baseCellDataType, operator) { return this.getDataTypeExpressionOperator(baseCellDataType)?.operators?.[operator]; } getExpressionJoinOperators() { return this.expressionJoinOperators; } getColId(columnName) { const upperCaseColumnName = columnName.toLocaleUpperCase(); const cachedColId = this.columnNameToIdMap[upperCaseColumnName]; if (cachedColId) { return cachedColId; } const columnAutocompleteEntries = this.getColumnAutocompleteEntries(); const colEntry = columnAutocompleteEntries.find(({ displayValue }) => displayValue.toLocaleUpperCase() === upperCaseColumnName); if (colEntry) { const { key: colId, displayValue } = colEntry; const colValue = { colId, columnName: displayValue }; // cache for faster lookup this.columnNameToIdMap[upperCaseColumnName] = colValue; return colValue; } return null; } getExpressionEvaluatorParams(colId) { let params = this.expressionEvaluatorParams[colId]; if (params) { return params; } const column = this.colModel.getColDefCol(colId); if (!column) { return { valueConverter: (v) => v }; } const baseCellDataType = this.dataTypeSvc?.getBaseDataType(column); switch (baseCellDataType) { case 'dateString': params = { valueConverter: this.dataTypeSvc?.getDateParserFunction(column) ?? ((v) => v), }; break; case 'object': // If there's a filter value getter, assume the value is already a string. Otherwise we need to format it. if (column.getColDef().filterValueGetter) { params = { valueConverter: (v) => v }; } else { params = { valueConverter: (value, node) => this.valueSvc.formatValue(column, node, value) ?? (typeof value.toString === 'function' ? value.toString() : ''), }; } break; case 'text': case undefined: params = { valueConverter: (v) => (0, ag_grid_community_1._toStringOrNull)(v) }; break; default: params = { valueConverter: (v) => v }; break; } const { filterParams } = column.getColDef(); if (filterParams) { ['caseSensitive', 'includeBlanksInEquals', 'includeBlanksInLessThan', 'includeBlanksInGreaterThan'].forEach((param) => { const paramValue = filterParams[param]; if (paramValue) { params[param] = paramValue; } }); } this.expressionEvaluatorParams[colId] = params; return params; } getColumnDetails(colId) { const column = this.colModel.getColDefCol(colId) ?? undefined; const baseCellDataType = (column ? this.dataTypeSvc?.getBaseDataType(column) : undefined) ?? 'text'; return { column, baseCellDataType }; } generateExpressionOperators() { const translate = (key, variableValues) => this.translate(key, variableValues); return { text: new filterExpressionOperators_1.TextFilterExpressionOperators({ translate }), boolean: new filterExpressionOperators_1.BooleanFilterExpressionOperators({ translate }), object: new filterExpressionOperators_1.TextFilterExpressionOperators({ translate }), number: new filterExpressionOperators_1.ScalarFilterExpressionOperators({ translate, equals: (v, o) => v === o }), date: new filterExpressionOperators_1.ScalarFilterExpressionOperators({ translate, equals: (v, o) => v.getTime() === o.getTime(), }), dateString: new filterExpressionOperators_1.ScalarFilterExpressionOperators({ translate, equals: (v, o) => v.getTime() === o.getTime(), }), }; } getColumnValue({ displayValue }) { return `${colFilterExpressionParser_1.COL_FILTER_EXPRESSION_START_CHAR}${displayValue}${colFilterExpressionParser_1.COL_FILTER_EXPRESSION_END_CHAR}`; } generateExpressionJoinOperators() { return { AND: this.translate('advancedFilterAnd'), OR: this.translate('advancedFilterOr'), }; } getActiveOperators(column) { const filterOptions = column.getColDef().filterParams?.filterOptions; if (!filterOptions) { return undefined; } const isValid = filterOptions.every((filterOption) => typeof filterOption === 'string'); return isValid ? filterOptions : undefined; } resetColumnCaches() { this.columnAutocompleteEntries = null; this.columnNameToIdMap = {}; this.expressionEvaluatorParams = {}; } } exports.AdvancedFilterExpressionService = AdvancedFilterExpressionService; /***/ }), /***/ 4858: /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.AdvancedFilterHeaderComp = void 0; const ag_grid_community_1 = __webpack_require__(6624); const advancedFilterComp_1 = __webpack_require__(2583); const AdvancedFilterHeaderElement = { tag: 'div', cls: 'ag-advanced-filter-header', role: 'row', }; class AdvancedFilterHeaderComp extends ag_grid_community_1.Component { wireBeans(beans) { this.colModel = beans.colModel; this.focusSvc = beans.focusSvc; this.ctrlsSvc = beans.ctrlsSvc; } constructor(enabled) { super(AdvancedFilterHeaderElement); this.enabled = enabled; } postConstruct() { this.setupAdvancedFilter(this.enabled); this.addDestroyFunc(() => this.destroyBean(this.eAdvancedFilter)); const heightListener = () => { if (this.enabled) { this.setEnabledHeight(); } }; this.addManagedEventListeners({ gridColumnsChanged: () => this.onGridColumnsChanged(), columnHeaderHeightChanged: heightListener, gridStylesChanged: heightListener, }); this.addManagedPropertyListener('headerHeight', heightListener); this.addManagedPropertyListener('floatingFiltersHeight', heightListener); this.addGuiEventListener('keydown', (event) => this.onKeyDown(event)); this.addGuiEventListener('focusout', (event) => { if (!this.getFocusableElement().contains(event.relatedTarget)) { this.focusSvc.clearAdvancedFilterColumn(); } }); } getFocusableElement() { return this.eAdvancedFilter?.getGui() ?? this.getGui(); } setEnabled(enabled) { if (enabled === this.enabled) { return; } this.setupAdvancedFilter(enabled); } refresh() { this.eAdvancedFilter?.refresh(); } getHeight() { return this.height; } setInputDisabled(disabled) { this.eAdvancedFilter?.setInputDisabled(disabled); } setupAdvancedFilter(enabled) { const eGui = this.getGui(); if (enabled) { // unmanaged as can be recreated this.eAdvancedFilter = this.createBean(new advancedFilterComp_1.AdvancedFilterComp()); const eAdvancedFilterGui = this.eAdvancedFilter.getGui(); this.eAdvancedFilter.addCssClass('ag-advanced-filter-header-cell'); this.setEnabledHeight(); this.setAriaRowIndex(); (0, ag_grid_community_1._setAriaRole)(eAdvancedFilterGui, 'gridcell'); (0, ag_grid_community_1._setAriaColIndex)(eAdvancedFilterGui, 1); this.setAriaColumnCount(eAdvancedFilterGui); eGui.appendChild(eAdvancedFilterGui); } else { (0, ag_grid_community_1._clearElement)(eGui); this.destroyBean(this.eAdvancedFilter); this.height = 0; } (0, ag_grid_community_1._setDisplayed)(eGui, enabled); this.enabled = enabled; } setEnabledHeight() { const eGui = this.getGui(); this.height = (0, ag_grid_community_1._getFloatingFiltersHeight)(this.beans); const height = `${this.height}px`; eGui.style.height = height; eGui.style.minHeight = height; } setAriaColumnCount(eAdvancedFilterGui) { (0, ag_grid_community_1._setAriaColSpan)(eAdvancedFilterGui, this.colModel.getCols().length); } setAriaRowIndex() { (0, ag_grid_community_1._setAriaRowIndex)(this.getGui(), this.ctrlsSvc.getHeaderRowContainerCtrl()?.getRowCount() ?? 0); } onGridColumnsChanged() { if (!this.eAdvancedFilter) { return; } this.setAriaColumnCount(this.eAdvancedFilter.getGui()); this.setAriaRowIndex(); } onKeyDown(event) { switch (event.key) { case ag_grid_community_1.KeyCode.ENTER: { if (this.hasFocus()) { if ((0, ag_grid_community_1._focusInto)(this.getFocusableElement())) { event.preventDefault(); } } break; } case ag_grid_community_1.KeyCode.ESCAPE: if (!this.hasFocus()) { this.getFocusableElement().focus(); } break; case ag_grid_community_1.KeyCode.UP: this.navigateUpDown(true, event); break; case ag_grid_community_1.KeyCode.DOWN: this.navigateUpDown(false, event); break; case ag_grid_community_1.KeyCode.TAB: if (this.hasFocus()) { this.navigateLeftRight(event); } else { const nextFocusableEl = (0, ag_grid_community_1._findNextFocusableElement)(this.beans, this.getFocusableElement(), null, event.shiftKey); if (nextFocusableEl) { event.preventDefault(); nextFocusableEl.focus(); } else { this.navigateLeftRight(event); } } break; } } navigateUpDown(backwards, event) { if (this.hasFocus()) { if (this.focusSvc.focusNextFromAdvancedFilter(backwards)) { event.preventDefault(); } } } navigateLeftRight(event) { if (event.shiftKey ? this.focusSvc.focusLastHeader() : this.focusSvc.focusNextFromAdvancedFilter(false, true)) { event.preventDefault(); } } hasFocus() { return (0, ag_grid_community_1._getActiveDomElement)(this.beans) === this.getFocusableElement(); } } exports.AdvancedFilterHeaderComp = AdvancedFilterHeaderComp; /***/ }), /***/ 8397: /***/ (function(__unused_webpack_module, exports) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ADVANCED_FILTER_LOCALE_TEXT = void 0; exports.ADVANCED_FILTER_LOCALE_TEXT = { ariaAdvancedFilterBuilderItem: (variableValues) => `${variableValues[0]}. Level ${variableValues[1]}. Press ENTER to edit`, ariaAdvancedFilterBuilderItemValidation: (variableValues) => `${variableValues[0]}. Level ${variableValues[1]}. ${variableValues[2]} Press ENTER to edit`, ariaAdvancedFilterBuilderList: 'Advanced Filter Builder List', ariaAdvancedFilterBuilderFilterItem: 'Filter Condition', ariaAdvancedFilterBuilderGroupItem: 'Filter Group', ariaAdvancedFilterBuilderColumn: 'Column', ariaAdvancedFilterBuilderOption: 'Option', ariaAdvancedFilterBuilderValue: 'Value', ariaAdvancedFilterBuilderJoinOperator: 'Join Operator', ariaAdvancedFilterInput: 'Advanced Filter Input', ariaLabelAdvancedFilterAutocomplete: 'Advanced Filter Autocomplete', advancedFilterContains: 'contains', advancedFilterNotContains: 'does not contain', advancedFilterTextEquals: 'equals', advancedFilterTextNotEqual: 'does not equal', advancedFilterStartsWith: 'begins with', advancedFilterEndsWith: 'ends with', advancedFilterBlank: 'is blank', advancedFilterNotBlank: 'is not blank', advancedFilterEquals: '=', advancedFilterNotEqual: '!=', advancedFilterGreaterThan: '>', advancedFilterGreaterThanOrEqual: '>=', advancedFilterLessThan: '<', advancedFilterLessThanOrEqual: '<=', advancedFilterTrue: 'is true', advancedFilterFalse: 'is false', advancedFilterAnd: 'AND', advancedFilterOr: 'OR', advancedFilterApply: 'Apply', advancedFilterBuilder: 'Builder', advancedFilterValidationMissingColumn: 'Column is missing', advancedFilterValidationMissingOption: 'Option is missing', advancedFilterValidationMissingValue: 'Value is missing', advancedFilterValidationInvalidColumn: 'Column not found', advancedFilterValidationInvalidOption: 'Option not found', advancedFilterValidationMissingQuote: 'Value is missing an end quote', advancedFilterValidationNotANumber: 'Value is not a number', advancedFilterValidationInvalidDate: 'Value is not a valid date', advancedFilterValidationMissingCondition: 'Condition is missing', advancedFilterValidationJoinOperatorMismatch: 'Join operators within a condition must be the same', advancedFilterValidationInvalidJoinOperator: 'Join operator not found', advancedFilterValidationMissingEndBracket: 'Missing end bracket', advancedFilterValidationExtraEndBracket: 'Too many end brackets', advancedFilterValidationMessage: (variableValues) => `Expression has an error. ${variableValues[0]} - ${variableValues[1]}.`, advancedFilterValidationMessageAtEnd: (variableValues) => `Expression has an error. ${variableValues[0]} at end of expression.`, advancedFilterBuilderTitle: 'Advanced Filter', advancedFilterBuilderApply: 'Apply', advancedFilterBuilderCancel: 'Cancel', advancedFilterBuilderAddButtonTooltip: 'Add Filter or Group', advancedFilterBuilderRemoveButtonTooltip: 'Remove', advancedFilterBuilderMoveUpButtonTooltip: 'Move Up', advancedFilterBuilderMoveDownButtonTooltip: 'Move Down', advancedFilterBuilderAddJoin: 'Add Group', advancedFilterBuilderAddCondition: 'Add Filter', advancedFilterBuilderSelectColumn: 'Select a column', advancedFilterBuilderSelectOption: 'Select an option', advancedFilterBuilderEnterValue: 'Enter a value...', advancedFilterBuilderValidationAlreadyApplied: 'Current filter already applied.', advancedFilterBuilderValidationIncomplete: 'Not all conditions are complete.', advancedFilterBuilderValidationSelectColumn: 'Must select a column.', advancedFilterBuilderValidationSelectOption: 'Must select an option.', advancedFilterBuilderValidationEnterValue: 'Must enter a value.', }; /***/ }), /***/ 7976: /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.AdvancedFilterModule = void 0; const ag_grid_community_1 = __webpack_require__(6624); const agGridEnterpriseModule_1 = __webpack_require__(9206); const version_1 = __webpack_require__(7205); const advanced_filter_css_GENERATED_1 = __webpack_require__(5372); const advancedFilterApi_1 = __webpack_require__(6138); const advancedFilterExpressionService_1 = __webpack_require__(1723); const advancedFilterService_1 = __webpack_require__(3065); /** * @feature Filtering -> Advanced Filter * @gridOption enableAdvanced Filter */ exports.AdvancedFilterModule = { moduleName: 'AdvancedFilter', version: version_1.VERSION, beans: [advancedFilterService_1.AdvancedFilterService, advancedFilterExpressionService_1.AdvancedFilterExpressionService], icons: { // Builder button in Advanced Filter advancedFilterBuilder: 'group', // drag handle used to pick up Advanced Filter Builder rows advancedFilterBuilderDrag: 'grip', // Advanced Filter Builder row validation error advancedFilterBuilderInvalid: 'not-allowed', // shown on Advanced Filter Builder rows to move them up advancedFilterBuilderMoveUp: 'up', // shown on Advanced Filter Builder rows to move them down advancedFilterBuilderMoveDown: 'down', // shown on Advanced Filter Builder rows to add new rows advancedFilterBuilderAdd: 'plus', // shown on Advanced Filter Builder rows to remove row advancedFilterBuilderRemove: 'minus', // shown on Advanced Filter Builder selection pills advancedFilterBuilderSelectOpen: 'small-down', // remove for rich select editor pills richSelectRemove: 'cancel', }, apiFunctions: { getAdvancedFilterModel: advancedFilterApi_1.getAdvancedFilterModel, setAdvancedFilterModel: advancedFilterApi_1.setAdvancedFilterModel, showAdvancedFilterBuilder: advancedFilterApi_1.showAdvancedFilterBuilder, hideAdvancedFilterBuilder: advancedFilterApi_1.hideAdvancedFilterBuilder, }, dependsOn: [agGridEnterpriseModule_1.EnterpriseCoreModule, ag_grid_community_1._FilterCoreModule, ag_grid_community_1._SharedDragAndDropModule, ag_grid_community_1._PopupModule, ag_grid_community_1._FilterValueModule], css: [advanced_filter_css_GENERATED_1.advancedFilterCSS], }; /***/ }), /***/ 3065: /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.AdvancedFilterService = void 0; const ag_grid_community_1 = __webpack_require__(6624); const advancedFilterCtrl_1 = __webpack_require__(5865); const filterExpressionParser_1 = __webpack_require__(4899); class AdvancedFilterService extends ag_grid_community_1.BeanStub { constructor() { super(...arguments);