UNPKG

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