devexpress-reporting
Version:
DevExpress Reporting provides the capability to develop a reporting application to create and customize reports.
93 lines (92 loc) • 4.09 kB
JavaScript
/**
* DevExpress HTML/JS Reporting (designer\dataObjects\expressions\_wrappedExpressionOptions.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 { CriteriaOperatorStateMachine } from '@devexpress/analytics-core/analytics-criteria-utils';
import { validateExpression } from '@devexpress/analytics-core/analytics-internal';
import { Disposable } from '@devexpress/analytics-core/analytics-utils';
import * as ko from 'knockout';
import { createIDataMemberInfoByName } from '../../internal/_createIDataMemberInfoByName';
export class WrappedExpressionOptions extends Disposable {
constructor(options, handlers, fieldListProvider, eventName) {
super();
this.eventName = eventName;
this.isValid = ko.observable(true);
this.warningMessage = ko.observable('');
this.expression = ko.observable(null);
this.rootItems = [
{ name: 'Parameters', needPrefix: true },
{ name: 'ReportItems', needPrefix: false, rootPath: 'Root' },
{ name: 'DataSource', needPrefix: false, rootPath: 'Root' },
{ name: 'Arguments', needPrefix: false, rootPath: 'Root' }
];
if (handlers) {
this._disposables.push(this.value = ko.computed({
read: () => {
return this.expression() && this.expression().expression() || '';
},
write: (newVal) => {
if (this.expression()) {
if (newVal && newVal.trim()) {
this.expression().expression(newVal);
}
else {
handlers.removeExpression(this.expression());
}
}
else {
if (newVal && newVal.trim())
handlers.addExpression(newVal);
}
}
}));
}
else {
this.value = options.value;
}
this.path = options.path;
this.functions = options.functions;
this.customizeCategories = options.customizeCategories;
const specificRootItems = {
'DataSource': (path) => {
if (path === 'DataSource') {
return ['CurrentRowIndex', 'RowCount', 'CurrentRowHierarchyLevel'].map(name => createIDataMemberInfoByName(name, 'integer'))
.concat(['IsFirstRow', 'IsLastRow'].map(name => createIDataMemberInfoByName(name, 'bool')));
}
},
'Arguments': (path) => path === 'Arguments' && ['PageIndex', 'PageCount'].map(name => createIDataMemberInfoByName(name, 'integer'))
};
this._disposables.push(ko.computed(() => {
const unwrappedfieldListProvider = ko.unwrap(fieldListProvider);
try {
this.isValid(true);
this.warningMessage('');
if (!this.value())
return;
CriteriaOperatorStateMachine.parse(this.value());
if (unwrappedfieldListProvider) {
validateExpression({
fieldListProvider: {
getItemByPath: (path) => {
return unwrappedfieldListProvider.getItemByPath(path, specificRootItems);
},
getItems: () => void 0
},
expression: this.value(),
path: this.path(),
rootItems: this.rootItems.map(x => x.name),
}).done((result) => this.warningMessage(result)).fail(() => this.isValid(false));
}
}
catch {
this.isValid(false);
}
}));
}
onHiding(e) { }
onShowing(e) { }
onContentReady(e) { }
}