UNPKG

xenos

Version:

Xenos is a data grid built upon angular2 and bootstrap.

284 lines 11.2 kB
"use strict"; var filter_candidate_1 = require("./filter-candidate"); var column_filter_descriptor_1 = require("./column-filter-descriptor"); var column_sort_descriptor_1 = require("./column-sort-descriptor"); var sort_direction_1 = require("./sort-direction"); var id_generator_1 = require("./id-generator"); var default_candidate_matcher_1 = require("./default-candidate-matcher"); var Subject_1 = require("rxjs/Subject"); var Observable_1 = require("rxjs/Observable"); var async_1 = require("rxjs/scheduler/async"); require("rxjs/add/Observable/timer"); require("rxjs/add/operator/debounce"); require("rxjs/add/operator/map"); var DataGridColumn = (function () { function DataGridColumn(config) { var _this = this; this.threshold = 30; this.debounceThreshold = 200; this.candidateQueryInternal = ""; this.candidates = []; this.candidateFinder = new Subject_1.Subject(); this.sortDirectionCycler = new Map(); if (!config) { config = this.getDefaultOptions(); } if (!config.id) { config.id = id_generator_1.IdGenerator.getNextColumnId(); } if (!config.sortDirection) { config.sortDirection = undefined; } this.config = config; this.sortDirectionCycler.set(null, sort_direction_1.SortDirection.ascending); this.sortDirectionCycler.set(undefined, sort_direction_1.SortDirection.ascending); this.sortDirectionCycler.set(sort_direction_1.SortDirection.ascending, sort_direction_1.SortDirection.descending); this.sortDirectionCycler.set(sort_direction_1.SortDirection.descending, sort_direction_1.SortDirection.ascending); this.matchers = [new default_candidate_matcher_1.DefaultCandidateMatcher()]; this.candidateFinder.asObservable() .debounce(function (x) { return Observable_1.Observable.timer(_this.debounceThreshold); }) .observeOn(async_1.async) .map(function (x) { return _this.findCandidates(x); }) .subscribe(function (x) { _this.candidates.splice(0); x.forEach(function (x) { return _this.candidates.push(x); }); }); } Object.defineProperty(DataGridColumn.prototype, "id", { get: function () { return this.config.id; }, enumerable: true, configurable: true }); Object.defineProperty(DataGridColumn.prototype, "initialSortDirection", { get: function () { return this.config.sortDirection; }, enumerable: true, configurable: true }); Object.defineProperty(DataGridColumn.prototype, "sortDirection", { get: function () { this.ensureAttachment(); var id = id_generator_1.IdGenerator.synthesizeColumnSortId(this); var desc = this.dataGrid.sortDescriptors.find(function (x) { return x.id == id; }); return desc ? desc.direction : undefined; }, set: function (direction) { this.ensureAttachment(); var id = id_generator_1.IdGenerator.synthesizeColumnSortId(this); var index = this.dataGrid.sortDescriptors.findIndex(function (x) { return x.id === id; }); if (~index) { if (direction) { var descriptor = new column_sort_descriptor_1.ColumnSortDescriptor(this, direction); this.dataGrid.sortDescriptors.splice(index, 1, descriptor); } else { this.dataGrid.sortDescriptors.splice(index, 1); } } else { if (direction) { var descriptor = new column_sort_descriptor_1.ColumnSortDescriptor(this, direction); this.dataGrid.sortDescriptors.push(descriptor); } } }, enumerable: true, configurable: true }); Object.defineProperty(DataGridColumn.prototype, "hidden", { get: function () { return this.config.hidden; }, set: function (value) { this.config.hidden = value; }, enumerable: true, configurable: true }); Object.defineProperty(DataGridColumn.prototype, "disableSorting", { get: function () { return this.config.disableSorting; }, set: function (value) { this.config.disableSorting = value; }, enumerable: true, configurable: true }); Object.defineProperty(DataGridColumn.prototype, "disableFiltering", { get: function () { return this.config.disableFiltering; }, set: function (value) { this.config.disableFiltering = value; }, enumerable: true, configurable: true }); Object.defineProperty(DataGridColumn.prototype, "valueAccessor", { get: function () { return this.config.valueAccessor; }, enumerable: true, configurable: true }); Object.defineProperty(DataGridColumn.prototype, "cellRenderer", { get: function () { return this.config.cellRenderer; }, enumerable: true, configurable: true }); Object.defineProperty(DataGridColumn.prototype, "headerRenderer", { get: function () { return this.config.headerRenderer; }, enumerable: true, configurable: true }); Object.defineProperty(DataGridColumn.prototype, "candidateRenderer", { get: function () { return this.config.candidateRenderer; }, enumerable: true, configurable: true }); DataGridColumn.prototype.ensureAttachment = function () { if (!this.dataGrid) { throw new Error("The column is not attached to a grid."); } }; Object.defineProperty(DataGridColumn.prototype, "activeFilters", { get: function () { var _this = this; this.ensureAttachment(); return this.dataGrid.filterDescriptors .map(function (x) { return x; }) .filter(function (x) { return x.column; }) .map(function (x) { return x; }) .filter(function (x) { return x.column.id === _this.id; }); }, enumerable: true, configurable: true }); Object.defineProperty(DataGridColumn.prototype, "candidateQuery", { get: function () { return this.candidateQueryInternal; }, set: function (phrase) { this.candidateQueryInternal = phrase; this.candidateFinder.next(phrase); }, enumerable: true, configurable: true }); DataGridColumn.prototype.reset = function () { this.candidateQuery = ""; this.candidates.splice(0, this.candidates.length); }; DataGridColumn.prototype.cycleSortDirections = function () { this.sortDirection = this.sortDirectionCycler.get(this.sortDirection); }; DataGridColumn.prototype.removeAllColumnFilters = function (event) { var _this = this; event.preventDefault(); event.stopPropagation(); this.ensureAttachment(); var filters = this.dataGrid.filterDescriptors.filter(function (x) { return x.groupId !== _this.config.id; }); this.dataGrid.filterDescriptors.splice(0); filters.forEach(function (x) { return _this.dataGrid.filterDescriptors.push(x); }); }; DataGridColumn.prototype.removeFilter = function (event, descriptor) { event.preventDefault(); event.stopPropagation(); this.ensureAttachment(); var index = this.dataGrid.filterDescriptors.findIndex(function (x) { return x.id === descriptor.id; }); if (~index) { this.dataGrid.filterDescriptors.splice(index, 1); } }; DataGridColumn.prototype.onCandidateClicked = function (event, candidate) { var _this = this; event.preventDefault(); event.stopPropagation(); this.ensureAttachment(); var desc = new column_filter_descriptor_1.ColumnFilterDescriptor(this, candidate.value, function (x) { var value = _this.valueAccessor(x); return value === candidate.value; }); if (this.dataGrid.filterDescriptors.find(function (x) { return x.id === desc.id; })) { return; } this.dataGrid.filterDescriptors.push(desc); }; DataGridColumn.prototype.findCandidates = function (phrase) { var _this = this; this.ensureAttachment(); if (!this.dataGrid.lastSnapShot) { return []; } var distinctDates = new Map(); var distinctValues = new Map(); var source = this.activeFilters.length > 0 ? this.dataGrid.lastSnapShot.items : this.dataGrid.lastSnapShot.processedItems; source.forEach(function (x) { var value = _this.config.valueAccessor(x); if (value instanceof Date) { var ms = value.getTime(); if (!distinctDates.has(ms)) { distinctDates.set(ms, value); } return; } if (!distinctValues.has(value)) { distinctValues.set(value, value); } }); distinctDates.forEach(function (x) { distinctValues.set(x, x); }); var empty = (phrase == null || phrase == ""); if (empty && distinctValues.size < this.threshold) { var values_1 = []; distinctValues.forEach(function (x) { values_1.push(new filter_candidate_1.FilterCandidate(x)); }); return values_1; } if (empty) { return source; } var values = []; distinctValues.forEach(function (x) { var match = false; _this.matchers.forEach(function (y) { if (match) { return; } match = y.match(phrase, x); }); if (match) { values.push(new filter_candidate_1.FilterCandidate(x)); } }); return values; }; DataGridColumn.prototype.getDefaultOptions = function () { return { id: undefined, headerRenderer: function () { return undefined; }, disableFiltering: false, disableSorting: false, hidden: false, cellRenderer: function (x) { return x; }, valueAccessor: function (x) { return x; } }; }; return DataGridColumn; }()); exports.DataGridColumn = DataGridColumn; //# sourceMappingURL=data-grid-column.js.map