UNPKG

devexpress-reporting

Version:

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

116 lines (115 loc) 5.54 kB
/** * DevExpress HTML/JS Reporting (designer\dataObjects\parameters\lookupSettings.js) * Version: 26.1.3 * Build date: Jun 16, 2026 * Copyright (c) 2012 - 2026 Developer Express Inc. ALL RIGHTS RESERVED * License: https://www.devexpress.com/Support/EULAs/universal.xml */ import { DxDeferred, extend, getFullPath } from '@devexpress/analytics-core/analytics-internal'; import { deserializeArray } from '@devexpress/analytics-core/analytics-utils'; import { FilterStringOptions } from '@devexpress/analytics-core/analytics-widgets'; import * as ko from 'knockout'; import { filterString, filterStringEditable } from '../../controls/metadata/properties/metadata'; import { dynamicListLookUpSettingsInfoBase, editedStaticListLookUpSettingsInfo, readonlyStaticListLookUpSettingsInfo } from '../metadata/parameters/lookUpSettings'; import { collectAvailableParameters } from '../metadata/_parameterUtils'; import { ObjectItem } from '../objectStorageItem'; import { LookUpValue } from './lookUpValue'; import { GroupLayoutItem, ParameterLayoutItem } from './layoutItems'; export class LookUpSettings extends ObjectItem { _getFlatParametersOrderedList(layoutItems) { let parameters = []; layoutItems.forEach(layoutItem => { if (layoutItem instanceof ParameterLayoutItem) parameters.push(layoutItem.parameter()); else if (layoutItem instanceof GroupLayoutItem) { const paramsInGroup = this._getFlatParametersOrderedList(layoutItem.parameterPanelLayoutItems()); if (paramsInGroup.length > 0) parameters = [...parameters, ...paramsInGroup]; } }); return parameters; } getInfo() { return super.getInfo().concat([filterString, filterStringEditable]); } updateFilter(parameter, report) { this.filterString.helper.parameters = ko.pureComputed({ read: () => { const orderedParameters = this._getFlatParametersOrderedList(report.parameterPanelLayoutItems()); const currentIndex = orderedParameters.indexOf(parameter); const filteredParameters = currentIndex == -1 ? orderedParameters : (currentIndex > 0 ? orderedParameters.slice(0, currentIndex) : []); return collectAvailableParameters(filteredParameters); }, deferEvaluation: true }); this._disposables.push(this.filterString.helper.parameters); } constructor(model, dsHelperProvider, serializer) { super(model, dsHelperProvider, serializer); } } export class StaticListLookUpSettings extends LookUpSettings { getInfo() { return super.getInfo().concat(this._isEditing() ? editedStaticListLookUpSettingsInfo : readonlyStaticListLookUpSettingsInfo); } preInitProperties(model, helper, serializer) { super.preInitProperties(model, helper, serializer); this._isEditing = ko.observable(false); } afterDeserialization(model, serializer) { this.lookUpValues = deserializeArray(model.LookUpValues || [], (item) => { return new LookUpValue(item, serializer); }); super.afterDeserialization(model, serializer); } updateFilter(parameter, report) { this.filterString.itemsProvider({ getItems(pathRequest) { const result = new DxDeferred(); result.resolve([ { displayName: 'Description', isList: false, name: 'Description', specifics: 'String' }, { displayName: 'Value', isList: false, name: 'Value', specifics: parameter.specifics } ]); return result.promise(); } }); super.updateFilter(parameter, report); } constructor(model, dsHelperProvider, serializer) { super(extend({ '@ObjectType': 'DevExpress.XtraReports.Parameters.StaticListLookUpSettings' }, model), dsHelperProvider, serializer); this.filterString = new FilterStringOptions(this._filterString); this.filterString.helper.canChoiceParameters = true; this.filterString.itemsProvider = ko.observable(null); } } export class DynamicListLookUpSettings extends LookUpSettings { getInfo() { return super.getInfo().concat(dynamicListLookUpSettingsInfoBase); } constructor(model, dsHelperProvider, serializer) { super(extend({ '@ObjectType': 'DevExpress.XtraReports.Parameters.DynamicListLookUpSettings' }, model), dsHelperProvider, serializer); this.dsHelperProvider = dsHelperProvider; this.filterString = new FilterStringOptions(this._filterString, ko.pureComputed(() => { return this.getPath('valueMember'); }), ko.pureComputed(() => !this.dataSource())); } getPath(propertyName) { if (propertyName === 'dataMember') { return this.dsHelperProvider() && this.dsHelperProvider().getDataSourcePath(this.dataSource()); } else if (propertyName === 'displayMember' || propertyName === 'valueMember' || propertyName === 'sortMember') { return getFullPath(this.getPath('dataMember'), this.dataMember()); } return ''; } isPropertyDisabled(name) { if (name != 'dataSource') return this.dataSource() === null; } }