UNPKG

devexpress-reporting

Version:

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

61 lines (60 loc) 3.53 kB
/** * DevExpress HTML/JS Reporting (designer\bands\_printAcrossBandsPlaceHolder.js) * Version: 25.1.3 * Build date: Jun 26, 2025 * Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED * License: https://www.devexpress.com/Support/EULAs/universal.xml */ import { Disposable } from '@devexpress/analytics-core/analytics-utils'; import * as ko from 'knockout'; import { isVerticalBand } from '../controls/utils/_controlTypes'; export class PrintAcrossBandsPlaceHolder extends Disposable { findNextUntransparentSiblingBand(band) { if (!band || !band.parent) return; const currentBandIndex = band.parent.bandsHolder.bands().indexOf(band); return band.parent.bandsHolder.bands().filter((band, index) => (!band.printAcrossBands || band.printAcrossBands && !band.printAcrossBands()) && index > currentBandIndex)[0]; } findFirstNonAcrossBand() { const isSubband = this.bandModel.controlType === 'SubBand'; const bandHolder = isSubband ? this.band.parent.parent['bandsHolder'] : this.band.parent.bandsHolder; let bandsWithoutAcross = []; if (this.bandModel.controlType === 'GroupHeaderBand' || (isSubband && this.bandModel.parentModel().controlType === 'GroupHeaderBand')) { const groupHeader = isSubband ? this.bandModel.parentModel() : this.bandModel; const groupHeaderLevel = groupHeader.level(); bandsWithoutAcross = bandHolder.bands().filter(_band => (_band.getControlModel().controlType === 'GroupFooterBand' && _band.getControlModel().level() > groupHeaderLevel) || _band.getControlModel().controlType === 'PageFooterBand' || _band.getControlModel().controlType === 'ReportFooterBand' || _band.getControlModel().controlType === 'BottomMarginBand'); } else if (this.bandModel.controlType === 'PageHeaderBand' || (isSubband && this.bandModel.parentModel().controlType === 'PageHeaderBand')) { bandsWithoutAcross = bandHolder.bands().filter(_band => (_band.getControlModel().controlType === 'BottomMarginBand')); } if (bandsWithoutAcross.length > 0) { return bandsWithoutAcross[0]; } } constructor(band) { super(); this.band = band; this._disposables.push(this.isVisible = ko.computed(() => { return band.printAcrossBands() && !this.bandModel.parentModel().bands().filter(x => isVerticalBand(x.controlType)).length; }), this.absolutePositionY = ko.computed(() => { const subbandsWithoutPrintAcrossBands = band.bandsHolder.bands().filter(subband => !subband.printAcrossBands()); if (subbandsWithoutPrintAcrossBands.length > 0) { return subbandsWithoutPrintAcrossBands[0].absolutePosition.y(); } let nextUntransparentSiblingBand = this.findNextUntransparentSiblingBand(band); if (!nextUntransparentSiblingBand) { nextUntransparentSiblingBand = this.findNextUntransparentSiblingBand(band.parent); } return nextUntransparentSiblingBand && nextUntransparentSiblingBand.absolutePosition.y(); }), this.height = ko.computed(() => { const firstBandWithoutAcross = this.findFirstNonAcrossBand(); return firstBandWithoutAcross ? (firstBandWithoutAcross.absolutePosition.y() - this.absolutePositionY()) : 0; })); } get bandModel() { return this.band.getControlModel(); } }