UNPKG

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