ag-grid-enterprise
Version:
Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue
1,005 lines (961 loc) • 4.21 MB
JavaScript
(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);