devexpress-reporting
Version:
DevExpress Reporting provides the capability to develop a reporting application to create and customize reports.
114 lines (113 loc) • 5.02 kB
JavaScript
/**
* DevExpress HTML/JS Reporting (designer\helpers\reportParameterHelper.js)
* Version: 24.2.6
* Build date: Mar 18, 2025
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
* License: https://www.devexpress.com/Support/EULAs/universal.xml
*/
import { getUniqueNameForNamedObjectsArray } from '@devexpress/analytics-core/analytics-internal';
import * as ko from 'knockout';
import { ParameterHelper } from '../../viewer/parameters/parameterHelper';
import { GroupLayoutItem, ParameterLayoutItem } from '../dataObjects/parameters/layoutItems';
import { defaultParameterEditingSettings } from '../utils/inititalizer';
export class ReportParameterHelper extends ParameterHelper {
get parameters() {
return this.container.parameters;
}
get parameterPanelLayoutItems() {
return this.container.parameterPanelLayoutItems;
}
initialize(knownEnums, callbacks, _parameterEditingSettings = defaultParameterEditingSettings) {
super.initialize(knownEnums, callbacks);
this._parameterEditingSettings = _parameterEditingSettings;
if (callbacks && callbacks.customizeParameterProperties) {
this._customizeParameterProperties = callbacks.customizeParameterProperties;
}
}
getAllLayoutItems(items) {
const allChildLayoutItems = [];
items.forEach((item) => {
allChildLayoutItems.push(item);
if (item instanceof GroupLayoutItem) {
const subLayoutItems = this.getAllLayoutItems(item.parameterPanelLayoutItems());
if (subLayoutItems && subLayoutItems.length)
allChildLayoutItems.push(...subLayoutItems);
}
});
return allChildLayoutItems;
}
constructor(container) {
super();
this.container = container;
this._disposables.push(this.allLayoutItems = ko.pureComputed(() => {
let allItems = [];
if (this.parameterPanelLayoutItems && this.parameterPanelLayoutItems()?.length)
allItems = this.getAllLayoutItems(this.parameterPanelLayoutItems());
return allItems;
}));
}
addParameterPanelLayoutItem(item) {
if (item instanceof GroupLayoutItem && !item.title()) {
const newName = getUniqueNameForNamedObjectsArray(this.allLayoutItems().filter(x => x instanceof GroupLayoutItem), 'Group');
item.title(newName);
}
}
startEditing() {
this.parameters().forEach(parameter => {
parameter._isEditing(true);
parameter._showLayoutProperties(true);
});
}
endEditing() {
this.parameters().forEach(parameter => {
parameter._isEditing(false);
parameter._showLayoutProperties(false);
});
}
updateParameterLayoutItems() {
this.parameters().forEach(parameter => {
const parameterLayoutItem = this.getParameterLayoutItem(parameter);
if (!parameterLayoutItem) {
const newItem = new ParameterLayoutItem({}, this.container, undefined, parameter);
this.parameterPanelLayoutItems.push(newItem);
}
});
}
clearLayoutItems() {
const toRemove = [];
this.parameterPanelLayoutItems().forEach(item => {
if (item instanceof ParameterLayoutItem) {
const isModify = item.getInfo().some(x => !!x.editor && item.isPropertyModified(x.propertyName));
if (!isModify) {
toRemove.push(item);
}
}
});
toRemove.forEach(x => this.parameterPanelLayoutItems.remove(x));
}
getParameterLayoutItem(parameter) {
return this.allLayoutItems().filter(x => x['parameter'] && x['parameter']() === parameter)[0];
}
removeParameterModel(parameter) {
for (const parameterLayoutItem of this.allLayoutItems()) {
if (parameterLayoutItem['parameter'] && parameterLayoutItem['parameter']() === parameter) {
parameterLayoutItem.delete();
}
}
}
_disableParameterProperties(editors) {
if (this._parameterEditingSettings.allowEditProperties) {
return;
}
editors.forEach(info => info.disabled = true);
}
customizeParameterProperties(model, editors, parameterPanelLayoutItem) {
const editOptions = { allowDelete: model.canRemove };
const parameterDescriptor = parameterPanelLayoutItem.layoutItemType === 'Parameter' ? model.getParameterDescriptor() : null;
this._customizeParameterProperties && this._customizeParameterProperties(parameterDescriptor, parameterPanelLayoutItem, editors, (path) => {
return editors.find(info => info.propertyName === path || info.modelName === '@' + path || info.modelName === path);
}, editOptions);
model['_canRemove'] = editOptions.allowDelete;
this._disableParameterProperties(editors);
}
}