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
JavaScript
/**
* 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();
}
}