devexpress-reporting
Version:
DevExpress Reporting provides the capability to develop a reporting application to create and customize reports.
78 lines (77 loc) • 3.9 kB
JavaScript
/**
* DevExpress HTML/JS Reporting (designer\internal\_displayNameBindings.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 { $dx, addDisposeCallback, DisplayExpressionConverter } from '@devexpress/analytics-core/analytics-internal';
import * as ko from 'knockout';
import { ValueConverter } from './_htmlMarkUpConverter';
ko.bindingHandlers['controlDisplayName'] = {
update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
const value = valueAccessor(), surface = ko.unwrap(value);
const parameters = surface.displayNameParameters();
if (parameters.isExpression) {
$dx(element).text(parameters.text);
const expressionConverter = new DisplayExpressionConverter(bindingContext.$root.displayNameProvider());
expressionConverter.toDisplayExpression(parameters.dataMember, parameters.text).done(result => {
$dx(element).text(result);
});
}
else if (parameters.dataMember) {
const wrapFieldName = (name) => {
const field = name ? ('[' + name + ']') : '';
return parameters.summaryFunc ? (parameters.summaryFunc + '(' + field + ')') : field;
};
$dx(element).text(wrapFieldName(parameters.dataMember));
bindingContext.$root.displayNameProvider()
.getDisplayName(parameters.dataSource, parameters.dataMember, parameters.dataMemberOffset, false)
.done(data => $dx(element).text(wrapFieldName(data)))
.fail(() => $dx(element).text(wrapFieldName(parameters.dataMember)));
}
else {
if (!parameters.allowMarkupText) {
$dx(element).text(parameters.text || '');
}
else {
new ValueConverter(parameters).appendTo(element);
}
}
}
};
ko.bindingHandlers['displayNameExtender'] = {
init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
const value = ko.unwrap(valueAccessor());
const displayName = ko.observable('');
const displayNameLoader = ko.computed(() => {
const getDataMember = () => {
return ko.isSubscribable(value.dataMember) ? value.dataMember() : (value.getDataMember && value.getDataMember());
};
const getDataSource = () => {
return ko.isSubscribable(value.dataSource) ? value.dataSource() : (value.getDataSource && value.getDataSource() || undefined);
};
const getPath = () => {
return ko.isSubscribable(value.path) ? value.path() : (value.getPath && value.getPath());
};
const displayNameProvider = bindingContext.$root.displayNameProvider.peek();
if (getDataMember() && displayNameProvider) {
const promise = getPath() ? displayNameProvider.getDisplayNameByPath(getPath(), getDataMember()) :
displayNameProvider.getDisplayName(getDataSource(), getDataMember(), value.dataMemberOffset, value.includeDataSourceName);
promise.done(data => displayName(data))
.fail(() => displayName(ko.unwrap(value.dataMember)));
}
else {
displayName('');
}
}).extend({ rateLimit: 0 });
addDisposeCallback(element, function () {
displayNameLoader.dispose();
ko.cleanNode(element);
});
bindingContext.$data.$displayName = displayName;
ko.applyBindingsToDescendants(bindingContext, element);
return { controlsDescendantBindings: true };
}
};
ko.virtualElements.allowedBindings['displayNameExtender'] = true;