UNPKG

devexpress-reporting

Version:

DevExpress Reporting provides the capability to develop a reporting application to create and customize reports.

167 lines (166 loc) 7.91 kB
/** * DevExpress HTML/JS Reporting (designer\bands\_bandHolder.js) * Version: 20.2.13 * Build date: Apr 10, 2023 * Copyright (c) 2012 - 2023 Developer Express Inc. ALL RIGHTS RESERVED * License: https://www.devexpress.com/Support/EULAs/universal.xml */ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { 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 extendStatics(d, b); }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); var analytics_utils_1 = require("@devexpress/analytics-core/analytics-utils"); var ko = require("knockout"); var BandsHolder = (function (_super) { __extends(BandsHolder, _super); function BandsHolder(_container) { var _this = _super.call(this) || this; _this._container = _container; _this.bands = ko.observableArray(); if (_container instanceof xrReport_1.ReportSurface || _container instanceof xrDetailReportBand_1.DetailReportBandSurface) _this._disposables.push(_this.verticalBandsContainer = new _vericalBandContainer_1.VerticalBandsContainerSurface(_container)); _this._disposables.push(_this.multiColumn = ko.computed(function () { var containerMultiColumn = _container['multiColumn'] && _container['multiColumn'](); if (containerMultiColumn && containerMultiColumn.haveColumns()) { return containerMultiColumn; } else { var detailBand = _this.bands().filter(function (item) { return item instanceof xrDetailBand_1.DetailBandSurface; })[0]; if (detailBand && detailBand.multiColumn() && detailBand.multiColumn().haveColumns()) return detailBand.multiColumn(); else return null; } })); return _this; } BandsHolder.prototype.dispose = function () { _super.prototype.dispose.call(this); this.disposeObservableArray(this.bands); this.resetObservableArray(this.bands); }; BandsHolder.prototype._createBandsMapCollection = function (elementModels, callbacks) { var position = 0; elementModels.peek().forEach(function (item) { return callbacks.addItem(callbacks.createItem(item), position++); }); callbacks.callMutated(); return elementModels.subscribe(function (args) { args.forEach(function (changeSet) { if (changeSet.status === 'deleted') { callbacks.removeItem(changeSet.value.surface); } }); args.forEach(function (changeSet) { if (changeSet.status === 'added') { callbacks.addItem(callbacks.createItem(changeSet.value), changeSet.index); } }); callbacks.callMutated(); }, null, 'arrayChange'); }; BandsHolder.prototype._addHorizontalBand = function (item, index) { var verticalBandsPosition = this.verticalBandsContainer && this.verticalBandsContainer.bandPosition(); if (index === undefined) return this.bands().push(item); if (verticalBandsPosition > 0 && index > verticalBandsPosition) { index -= this.verticalBandsContainer.verticalBands().length; } this.bands().splice(index, 0, item); }; BandsHolder.prototype._addVerticalBand = function (item, index) { this.verticalBandsContainer.verticalBands().splice(index > 0 ? index : 0, 0, item); }; BandsHolder.prototype.initialize = function (bands) { var _this = this; var isVerticalChanged = false; var isHorizontalChanged = false; this._disposables.push(this._createBandsMapCollection(bands, { addItem: function (item, index) { if (item instanceof xrVerticalBand_1.VerticalBandSurface) { _this._addVerticalBand(item, index - _this.verticalBandsContainer.bandPosition()); isVerticalChanged = true; } else { isHorizontalChanged = true; _this._addHorizontalBand(item, index); } }, callMutated: function () { isHorizontalChanged && _this.bands.valueHasMutated(); isVerticalChanged && _this.verticalBandsContainer && _this.verticalBandsContainer.verticalBands.valueHasMutated(); isHorizontalChanged = false; isVerticalChanged = false; }, createItem: function (item) { return _this._container._createSurface(item); }, removeItem: function (item) { if (item instanceof xrVerticalBand_1.VerticalBandSurface) { _this.verticalBandsContainer.verticalBands().splice(_this.verticalBandsContainer.verticalBands().indexOf(item), 1); isVerticalChanged = true; } else { _this.bands().splice(_this.bands().indexOf(item), 1); isHorizontalChanged = true; } } })); }; BandsHolder.prototype.getHeight = function () { var minHeight = (this.verticalBandsContainer && this.verticalBandsContainer.height()) || 0; this.bands().forEach(function (band) { minHeight += band.height(); }); return minHeight; }; BandsHolder.prototype.getTotalHeight = function () { var height = this.verticalBandsContainer && this.verticalBandsContainer._height() || 0; return height + (this.bands() || []).reduce(function (acc, x) { return acc + x._totalHeight(); }, 0); }; BandsHolder.prototype.getBandAbsolutePositionY = function (band) { var newY = 0; var bandIndex; var parentBands = ko.unwrap(this.bands); if (parentBands && parentBands.length !== 0) { bandIndex = parentBands.indexOf(band); if (bandIndex === -1) return newY; if (bandIndex > 0 && parentBands[bandIndex - 1]) { newY = parentBands[bandIndex - 1].absolutePosition.y() + parentBands[bandIndex - 1].height(); } else if (bandIndex === 0 && this._container['absolutePosition']) { newY = this._container['absolutePosition'].y(); } if (this.verticalBandsContainer) { if (bandIndex === this.verticalBandsContainer.getBandPosition()) { newY = this.verticalBandsContainer.topOffset() + this.verticalBandsContainer.height(); } } } return newY; }; BandsHolder.prototype.checkUnderCursor = function () { var isOver = false; [this.bands(), this.verticalBandsContainer.verticalBands()].forEach(function (collection) { for (var i = 0; i < collection.length; i++) { isOver = collection[i].underCursor().isOver; if (isOver) return isOver; } }); return isOver; }; return BandsHolder; }(analytics_utils_1.Disposable)); exports.BandsHolder = BandsHolder; var xrReport_1 = require("../controls/xrReport"); var xrDetailBand_1 = require("./xrDetailBand"); var xrDetailReportBand_1 = require("./xrDetailReportBand"); var xrVerticalBand_1 = require("./xrVerticalBand"); var _vericalBandContainer_1 = require("./_vericalBandContainer");