ag-grid
Version:
Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
384 lines (383 loc) • 17.4 kB
JavaScript
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v18.1.2
* @link http://www.ag-grid.com/
* @license MIT
*/
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
var context_1 = require("../context/context");
var dateFilter_1 = require("./dateFilter");
var componentAnnotations_1 = require("../widgets/componentAnnotations");
var utils_1 = require("../utils");
var componentRecipes_1 = require("../components/framework/componentRecipes");
var component_1 = require("../widgets/component");
var constants_1 = require("../constants");
var InputTextFloatingFilterComp = (function (_super) {
__extends(InputTextFloatingFilterComp, _super);
function InputTextFloatingFilterComp() {
var _this = _super.call(this, "<div><input ref=\"eColumnFloatingFilter\" class=\"ag-floating-filter-input\"></div>") || this;
_this.lastKnownModel = null;
return _this;
}
InputTextFloatingFilterComp.prototype.init = function (params) {
this.onFloatingFilterChanged = params.onFloatingFilterChanged;
this.currentParentModel = params.currentParentModel;
var debounceMs = params.debounceMs != null ? params.debounceMs : 500;
var toDebounce = utils_1._.debounce(this.syncUpWithParentFilter.bind(this), debounceMs);
this.addDestroyableEventListener(this.eColumnFloatingFilter, 'input', toDebounce);
this.addDestroyableEventListener(this.eColumnFloatingFilter, 'keypress', toDebounce);
this.addDestroyableEventListener(this.eColumnFloatingFilter, 'keydown', toDebounce);
var columnDef = params.column.getDefinition();
if (columnDef.filterParams && columnDef.filterParams.filterOptions && columnDef.filterParams.filterOptions.length === 1 && columnDef.filterParams.filterOptions[0] === 'inRange') {
this.eColumnFloatingFilter.disabled = true;
}
};
InputTextFloatingFilterComp.prototype.onParentModelChanged = function (parentModel, combinedFilter) {
if (combinedFilter != null) {
this.eColumnFloatingFilter.value = this.parseAsText(combinedFilter.condition1) + " " + combinedFilter.operator + " " + this.parseAsText(combinedFilter.condition2);
this.eColumnFloatingFilter.disabled = true;
this.lastKnownModel = null;
this.eColumnFloatingFilter.title = this.eColumnFloatingFilter.value;
this.eColumnFloatingFilter.style.cursor = 'default';
return;
}
else {
this.eColumnFloatingFilter.disabled = false;
}
if (this.equalModels(this.lastKnownModel, parentModel)) {
// ensure column floating filter text is blanked out when both ranges are empty
if (!this.lastKnownModel && !parentModel) {
this.eColumnFloatingFilter.value = '';
}
return;
}
this.lastKnownModel = parentModel;
var incomingTextValue = this.asFloatingFilterText(parentModel);
if (incomingTextValue === this.eColumnFloatingFilter.value) {
return;
}
this.eColumnFloatingFilter.value = incomingTextValue;
this.eColumnFloatingFilter.title = '';
};
InputTextFloatingFilterComp.prototype.syncUpWithParentFilter = function (e) {
var model = this.asParentModel();
if (this.equalModels(this.lastKnownModel, model)) {
return;
}
var modelUpdated = null;
if (utils_1._.isKeyPressed(e, constants_1.Constants.KEY_ENTER)) {
modelUpdated = this.onFloatingFilterChanged({
model: model,
apply: true
});
}
else {
modelUpdated = this.onFloatingFilterChanged({
model: model,
apply: false
});
}
if (modelUpdated) {
this.lastKnownModel = model;
}
};
InputTextFloatingFilterComp.prototype.equalModels = function (left, right) {
if (utils_1._.referenceCompare(left, right)) {
return true;
}
if (!left || !right) {
return false;
}
if (Array.isArray(left) || Array.isArray(right)) {
return false;
}
return (utils_1._.referenceCompare(left.type, right.type) &&
utils_1._.referenceCompare(left.filter, right.filter) &&
utils_1._.referenceCompare(left.filterTo, right.filterTo) &&
utils_1._.referenceCompare(left.filterType, right.filterType));
};
__decorate([
componentAnnotations_1.RefSelector('eColumnFloatingFilter'),
__metadata("design:type", HTMLInputElement)
], InputTextFloatingFilterComp.prototype, "eColumnFloatingFilter", void 0);
return InputTextFloatingFilterComp;
}(component_1.Component));
exports.InputTextFloatingFilterComp = InputTextFloatingFilterComp;
var TextFloatingFilterComp = (function (_super) {
__extends(TextFloatingFilterComp, _super);
function TextFloatingFilterComp() {
return _super !== null && _super.apply(this, arguments) || this;
}
TextFloatingFilterComp.prototype.asFloatingFilterText = function (parentModel) {
if (!parentModel) {
return '';
}
return parentModel.filter;
};
TextFloatingFilterComp.prototype.asParentModel = function () {
var currentParentModel = this.currentParentModel();
return {
type: currentParentModel.type,
filter: this.eColumnFloatingFilter.value,
filterType: 'text'
};
};
TextFloatingFilterComp.prototype.parseAsText = function (model) {
return this.asFloatingFilterText(model);
};
return TextFloatingFilterComp;
}(InputTextFloatingFilterComp));
exports.TextFloatingFilterComp = TextFloatingFilterComp;
var DateFloatingFilterComp = (function (_super) {
__extends(DateFloatingFilterComp, _super);
function DateFloatingFilterComp() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.lastKnownModel = null;
return _this;
}
DateFloatingFilterComp.prototype.init = function (params) {
this.onFloatingFilterChanged = params.onFloatingFilterChanged;
this.currentParentModel = params.currentParentModel;
var debounceMs = params.debounceMs != null ? params.debounceMs : 500;
var toDebounce = utils_1._.debounce(this.onDateChanged.bind(this), debounceMs);
var dateComponentParams = {
onDateChanged: toDebounce,
filterParams: params.column.getColDef().filterParams
};
this.dateComponentPromise = this.componentRecipes.newDateComponent(dateComponentParams);
var body = utils_1._.loadTemplate("<div></div>");
this.dateComponentPromise.then(function (dateComponent) {
body.appendChild(dateComponent.getGui());
var columnDef = params.column.getDefinition();
var isInRange = (columnDef.filterParams &&
columnDef.filterParams.filterOptions &&
columnDef.filterParams.filterOptions.length === 1 &&
columnDef.filterParams.filterOptions[0] === 'inRange');
if (dateComponent.eDateInput) {
dateComponent.eDateInput.disabled = isInRange;
}
});
this.setTemplateFromElement(body);
};
DateFloatingFilterComp.prototype.onDateChanged = function () {
var parentModel = this.currentParentModel();
var model = this.asParentModel();
if (this.equalModels(parentModel, model)) {
return;
}
this.onFloatingFilterChanged({
model: model,
apply: true
});
this.lastKnownModel = model;
};
DateFloatingFilterComp.prototype.equalModels = function (left, right) {
if (utils_1._.referenceCompare(left, right)) {
return true;
}
if (!left || !right) {
return false;
}
if (Array.isArray(left) || Array.isArray(right)) {
return false;
}
return (utils_1._.referenceCompare(left.type, right.type) &&
utils_1._.referenceCompare(left.dateFrom, right.dateFrom) &&
utils_1._.referenceCompare(left.dateTo, right.dateTo) &&
utils_1._.referenceCompare(left.filterType, right.filterType));
};
DateFloatingFilterComp.prototype.asParentModel = function () {
var currentParentModel = this.currentParentModel();
var filterValueDate = this.dateComponentPromise.resolveNow(null, function (dateComponent) { return dateComponent.getDate(); });
var filterValueText = utils_1._.serializeDateToYyyyMmDd(dateFilter_1.DateFilter.removeTimezone(filterValueDate), "-");
return {
type: currentParentModel.type,
dateFrom: filterValueText,
dateTo: currentParentModel ? currentParentModel.dateTo : null,
filterType: 'date'
};
};
DateFloatingFilterComp.prototype.onParentModelChanged = function (parentModel) {
var _this = this;
this.lastKnownModel = parentModel;
this.dateComponentPromise.then(function (dateComponent) {
if (!parentModel || !parentModel.dateFrom) {
dateComponent.setDate(null);
return;
}
_this.enrichDateInput(parentModel.type, parentModel.dateFrom, parentModel.dateTo, dateComponent);
dateComponent.setDate(utils_1._.parseYyyyMmDdToDate(parentModel.dateFrom, '-'));
});
};
DateFloatingFilterComp.prototype.enrichDateInput = function (type, dateFrom, dateTo, dateComponent) {
if (dateComponent.eDateInput) {
if (type === 'inRange') {
dateComponent.eDateInput.title = dateFrom + " to " + dateTo;
dateComponent.eDateInput.disabled = true;
}
else {
dateComponent.eDateInput.title = '';
dateComponent.eDateInput.disabled = true;
}
}
};
__decorate([
context_1.Autowired('componentRecipes'),
__metadata("design:type", componentRecipes_1.ComponentRecipes)
], DateFloatingFilterComp.prototype, "componentRecipes", void 0);
return DateFloatingFilterComp;
}(component_1.Component));
exports.DateFloatingFilterComp = DateFloatingFilterComp;
var NumberFloatingFilterComp = (function (_super) {
__extends(NumberFloatingFilterComp, _super);
function NumberFloatingFilterComp() {
return _super !== null && _super.apply(this, arguments) || this;
}
NumberFloatingFilterComp.prototype.asFloatingFilterText = function (toParse) {
var currentParentModel = this.currentParentModel();
if (toParse == null && currentParentModel == null) {
return '';
}
if (toParse == null && currentParentModel != null && currentParentModel.type !== 'inRange') {
this.eColumnFloatingFilter.disabled = false;
return '';
}
if (currentParentModel != null && currentParentModel.type === 'inRange') {
this.eColumnFloatingFilter.disabled = true;
return this.parseAsText(currentParentModel);
}
this.eColumnFloatingFilter.disabled = false;
return this.parseAsText(toParse);
};
NumberFloatingFilterComp.prototype.parseAsText = function (model) {
if (model.type && model.type === 'inRange') {
var number_1 = this.asNumber(model.filter);
var numberTo = this.asNumber(model.filterTo);
return (number_1 ? number_1 + '' : '') +
'-' +
(numberTo ? numberTo + '' : '');
}
var number = this.asNumber(model.filter);
return number != null ? number + '' : '';
};
NumberFloatingFilterComp.prototype.asParentModel = function () {
var currentParentModel = this.currentParentModel();
var filterValueNumber = this.asNumber(this.eColumnFloatingFilter.value);
var filterValueText = this.eColumnFloatingFilter.value;
var modelFilterValue = null;
if (filterValueNumber == null && filterValueText === '') {
modelFilterValue = null;
}
else if (filterValueNumber == null) {
modelFilterValue = currentParentModel.filter;
}
else {
modelFilterValue = filterValueNumber;
}
return {
type: currentParentModel.type,
filter: modelFilterValue,
filterTo: !currentParentModel ? null : currentParentModel.filterTo,
filterType: 'number'
};
};
NumberFloatingFilterComp.prototype.asNumber = function (value) {
if (value == null) {
return null;
}
if (value === '') {
return null;
}
var asNumber = Number(value);
var invalidNumber = !utils_1._.isNumeric(asNumber);
return invalidNumber ? null : asNumber;
};
return NumberFloatingFilterComp;
}(InputTextFloatingFilterComp));
exports.NumberFloatingFilterComp = NumberFloatingFilterComp;
var SetFloatingFilterComp = (function (_super) {
__extends(SetFloatingFilterComp, _super);
function SetFloatingFilterComp() {
return _super !== null && _super.apply(this, arguments) || this;
}
SetFloatingFilterComp.prototype.init = function (params) {
_super.prototype.init.call(this, params);
this.eColumnFloatingFilter.disabled = true;
};
SetFloatingFilterComp.prototype.asFloatingFilterText = function (parentModel) {
this.eColumnFloatingFilter.disabled = true;
if (!parentModel)
return '';
// also supporting old filter model for backwards compatibility
var values = (parentModel instanceof Array) ? parentModel : parentModel.values;
if (values.length === 0) {
return '';
}
var arrayToDisplay = values.length > 10 ? values.slice(0, 10).concat('...') : values;
return "(" + values.length + ") " + arrayToDisplay.join(",");
};
SetFloatingFilterComp.prototype.parseAsText = function (model) {
return this.asFloatingFilterText(model);
};
SetFloatingFilterComp.prototype.asParentModel = function () {
if (this.eColumnFloatingFilter.value == null || this.eColumnFloatingFilter.value === '') {
return {
values: [],
filterType: 'set'
};
}
return {
values: this.eColumnFloatingFilter.value.split(","),
filterType: 'set'
};
};
SetFloatingFilterComp.prototype.equalModels = function (left, right) {
return false;
};
return SetFloatingFilterComp;
}(InputTextFloatingFilterComp));
exports.SetFloatingFilterComp = SetFloatingFilterComp;
var ReadModelAsStringFloatingFilterComp = (function (_super) {
__extends(ReadModelAsStringFloatingFilterComp, _super);
function ReadModelAsStringFloatingFilterComp() {
return _super !== null && _super.apply(this, arguments) || this;
}
ReadModelAsStringFloatingFilterComp.prototype.init = function (params) {
_super.prototype.init.call(this, params);
this.eColumnFloatingFilter.disabled = true;
};
ReadModelAsStringFloatingFilterComp.prototype.onParentModelChanged = function (parentModel) {
this.eColumnFloatingFilter.value = this.asFloatingFilterText(this.currentParentModel());
};
ReadModelAsStringFloatingFilterComp.prototype.asFloatingFilterText = function (parentModel) {
return parentModel;
};
ReadModelAsStringFloatingFilterComp.prototype.parseAsText = function (model) {
return model;
};
ReadModelAsStringFloatingFilterComp.prototype.asParentModel = function () {
return null;
};
return ReadModelAsStringFloatingFilterComp;
}(InputTextFloatingFilterComp));
exports.ReadModelAsStringFloatingFilterComp = ReadModelAsStringFloatingFilterComp;