UNPKG

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