devexpress-reporting
Version:
DevExpress Reporting provides the capability to develop a reporting application to create and customize reports.
102 lines (101 loc) • 4.96 kB
JavaScript
/**
* DevExpress HTML/JS Reporting (designer\actions\_mongoDBDataSourceEditor.js)
* Version: 25.2.3
* Build date: Dec 15, 2025
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
* License: https://www.devexpress.com/Support/EULAs/universal.xml
*/
import { DxDeferred } from '@devexpress/analytics-core/analytics-internal';
import { getLocalization, PathRequest } from '@devexpress/analytics-core/analytics-utils';
import { DataSourceType, DataSourceWizardPageIterator, MongoDBDataSourceWizardPageId, _createDefaultDataSourceWizardState, _restoreMongoDBDataSourceFromState } from '@devexpress/analytics-core/analytics-wizard';
import { addDataSourceToReport } from '../internal/_dataUtils';
import { ReportDataSourceService } from '../services/_reportDataSourceService';
import { QBRequestWrapper } from '../tools/generator/_qBRequestWrapper';
import { DataSourceEditorBase } from './_sqlDataSourceEditor';
import { MongoDBDataSource } from '@devexpress/analytics-core/analytics-data';
export class MongoDBEditSchemaIterator extends DataSourceWizardPageIterator {
getNextPageId(pageId) {
if (!pageId)
return MongoDBDataSourceWizardPageId.ChooseMongoDBCollectionPage;
return super.getNextPageId(pageId);
}
}
export class MongoDBDataSourceEditor extends DataSourceEditorBase {
constructor() {
super(...arguments);
this.editSchemaAction = {
clickAction: (item) => {
this.editSchema(new PathRequest(item.path).id);
},
position: 0,
imageClassName: 'dx-image-edit',
imageTemplateName: 'dxrd-svg-operations-edit',
text: getLocalization('Edit Schema...', 'DataAccessUIStringId.JsonDataSourceDesignerVerbEditSchema')
};
}
_applyDataSourceChange(source, dest) {
return MongoDBDataSourceEditor.createMongoDBDataSourceInfo(source)
.done((result) => {
if (dest) {
dest.data['base64'](result.base64());
}
else {
addDataSourceToReport(this._dsHelper(), this._reportViewModel(), this._undoEngine(), this._itemsProvider(), result);
}
});
}
editSchema(dataSourceID) {
const dataSourceInfo = this._findDataSource(dataSourceID);
ReportDataSourceService.getMongoDBDataSourceFromBase64(dataSourceInfo.data['base64']())
.done((result) => {
const mongoDBDataSource = new MongoDBDataSource(JSON.parse(result.mongoDBDataSourceJSON), undefined, QBRequestWrapper());
const beforeInitEvent = (e) => {
e.state.dataSourceType = DataSourceType.MongoDB;
};
this._wizard.events.addHandler('beforeInitialize', beforeInitEvent);
this._wizard.initialize(_createDefaultDataSourceWizardState(undefined, undefined, undefined, undefined, {
connectionJson: mongoDBDataSource.connection.serialize(),
queries: mongoDBDataSource.saveQueries(),
collections: mongoDBDataSource.queries().map(query => JSON.stringify(query.toCollection())),
dataSourceName: dataSourceInfo.name
}), (factory, stateManager) => new MongoDBEditSchemaIterator(factory, stateManager, this._wizard['_wizardOptions']));
this._wizard.events.removeHandler('beforeInitialize', beforeInitEvent);
this._wizard.start();
this._wizard.isVisible(true);
});
}
applyDataSourceWizardChanges(dataSourceWizardModel) {
const mongoDBDataSource = _restoreMongoDBDataSourceFromState(dataSourceWizardModel.mongoDBDataSourceWizard, undefined, dataSourceWizardModel.dataSourceId);
const dataSource = mongoDBDataSource && this._dsHelper().findDataSourceInfoByName(mongoDBDataSource.name());
return this._applyDataSourceChange(mongoDBDataSource, dataSource);
}
static createMongoDBDataSourceInfo(source) {
const deferred = new DxDeferred();
ReportDataSourceService.getMongoDBDataSourceBase64(source)
.done((result) => {
deferred.resolve({
name: 'mongoDBDataSource',
id: source.id,
data: {
'@ObjectType': 'DevExpress.DataAccess.MongoDB.MongoDBDataSource',
'@Base64': result.base64
},
isMongoDBDataSource: true,
isSupportQueries: true,
isListType: false,
base64: () => result.base64
});
})
.fail(result => { MongoDBDataSourceEditor._onFail(result, deferred); });
return deferred.promise();
}
getActions(context) {
const result = [];
if (!context.data)
return result;
if (context.data['isMongoDBDataSource'] === true) {
result.push(this.editSchemaAction);
}
return result;
}
}