devexpress-reporting
Version:
DevExpress Reporting provides the capability to develop a reporting application to create and customize reports.
106 lines (105 loc) • 6.59 kB
JavaScript
/**
* DevExpress HTML/JS Reporting (viewer\mobile\utils\_mobileInitializer.js)
* Version: 24.2.7
* Build date: Apr 29, 2025
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
* License: https://www.devexpress.com/Support/EULAs/universal.xml
*/
import { MobileReportPreview } from '../mobilePreview';
import { MobileSearchViewModel } from '../internal/_mobileSearch';
import { GalleryModel } from '../internal/gallery/_galleryModel';
import { MobilePaginator } from '../internal/_paginator';
import { PreviewParametersPanelModel } from '../../parameters/previewParametersModel';
import { PreviewRequestWrapper } from '../../internal/_previewRequestWrapper';
import { updatePreviewContentSizeMobile } from '../internal/_sizeUtils';
import { MobilePreviewParameterHelper } from '../internal/_mobilePreviewParameterHelper';
import { ExportOptionsModel } from '../../exportOptions/exportOptionsModel';
import { ExportFormatID, PreviewElements } from '../../constants';
import { getPreviewActionsMobile } from './_mobileActionList';
import { MobilePreviewModel } from '../internal/_mobilePreviewModel';
import { ParametersPopupModel } from '../internal/_parametersPopup';
import { MobilePreviewElements } from '../constants';
import { getUpdateProgressBarCallback } from '../../internal/_progressBarUtils';
import { getDockedElementCallback } from '../../internal/_sizeUtils';
import { $dx, appendStaticContextToRootViewModel, staticContext } from '@devexpress/analytics-core/analytics-internal-native';
import { BreadcrumbModel } from '../../internal/_previewBreadcrumbs';
export function createMobilePreview(bindingSettings) {
const callbacks = bindingSettings.callbacks;
const bindingModel = bindingSettings.model;
const bindingElement = bindingSettings.element;
const previewWrapper = new PreviewRequestWrapper(null, callbacks), breadcrumb = new BreadcrumbModel(), reportPreview = new MobileReportPreview(bindingModel.handlerUri, previewWrapper, undefined, callbacks, undefined, bindingModel.mobileModeSettings, breadcrumb, bindingModel.exportSettings);
const $root = $dx(bindingElement);
const updatePreviewContentSize_ = updatePreviewContentSizeMobile(reportPreview, $root);
updatePreviewContentSize_();
const gallery = new GalleryModel(reportPreview);
const searchModel = new MobileSearchViewModel(reportPreview, gallery);
const parametersModel = new PreviewParametersPanelModel(reportPreview, new MobilePreviewParameterHelper(bindingModel.parametersInfo && bindingModel.parametersInfo.knownEnums, callbacks));
const exportModel = new ExportOptionsModel(reportPreview);
reportPreview.allowURLsWithJSContent = bindingModel.allowURLsWithJSContent;
reportPreview.previewParametersViewModel = parametersModel;
previewWrapper.initialize(reportPreview, parametersModel, searchModel);
const exportTypes = ([
ExportFormatID.PDF, ExportFormatID.XLS, ExportFormatID.XLSX,
ExportFormatID.RTF, ExportFormatID.DOCX, ExportFormatID.HTML,
ExportFormatID.Text, ExportFormatID.CSV, ExportFormatID.Image
]);
const paginator = new MobilePaginator(reportPreview, gallery);
const designerModelOptions = {
rootStyle: 'dxrd-preview dxrdp-mobile dxd-back-primary',
reportPreview: reportPreview,
parametersModel: parametersModel,
exportModel: exportModel,
searchModel: searchModel,
rtl: reportPreview.rtlViewer,
gallery: gallery,
paginator: paginator,
availableFormats: exportTypes
};
const designerModel = new MobilePreviewModel(designerModelOptions);
const mobileActions = getPreviewActionsMobile({ designerModel, reportPreview, exportModel, parametersModel, searchModel, exportTypes, callbacks: callbacks });
const parametersPopup = new ParametersPopupModel(parametersModel, reportPreview);
const designerViewModel = designerModel.getViewModel();
designerModel.parts = [
{ id: MobilePreviewElements.Surface, templateName: MobilePreviewElements.Surface, model: designerViewModel.reportPreview },
{ id: MobilePreviewElements.Search, templateName: MobilePreviewElements.Search, model: designerViewModel.searchModel },
{ id: MobilePreviewElements.Pages, templateName: MobilePreviewElements.Pages, model: designerViewModel.paginator },
{ id: MobilePreviewElements.MobileActions, templateName: MobilePreviewElements.MobileActions, model: mobileActions, viewModel: mobileActions.getViewModel() },
{ id: MobilePreviewElements.Parameters, templateName: MobilePreviewElements.Parameters, model: parametersPopup, viewModel: parametersPopup.getViewModel() },
{ id: PreviewElements.ExportTool, templateName: PreviewElements.ExportTool, model: designerViewModel.exportHandler }
];
designerModel.subscribeViewModelToDesignerParts();
callbacks && callbacks.customizeParts && callbacks.customizeParts(designerModel.parts);
const $actions = $root.find('.dxrdp-mobile-actions');
const updateProgressPosition = getUpdateProgressBarCallback(bindingModel.progressBarSettings, designerModel, reportPreview, bindingElement, window);
const updateMobilePreviewActionsPosition_ = getDockedElementCallback($actions, $root, window, '.dxrdp-mobile-actions');
const updateSizesCallback = () => {
updatePreviewContentSize_ && updatePreviewContentSize_();
updateProgressPosition && updateProgressPosition();
};
designerModel.updateSurfaceSize = updateSizesCallback;
designerModel.resizeCallback = () => {
if (parametersModel._popupInfo.visible) {
parametersPopup.initVisibilityIcons();
}
updateSizesCallback();
if (reportPreview.actionsVisible)
updateMobilePreviewActionsPosition_(bindingElement);
};
window.addEventListener('resize', designerModel.resizeCallback);
const onScroll = () => {
if (reportPreview.actionsVisible)
updateMobilePreviewActionsPosition_(bindingElement);
};
window.addEventListener('scroll', onScroll);
designerModel.addDisposable(() => {
window.removeEventListener('resize', designerModel.resizeCallback);
window.removeEventListener('scroll', onScroll);
mobileActions.dispose();
});
designerModel.addDisposable(reportPreview.events.on('actionsVisibleChanged', (args) => {
if (args.newValue)
updateMobilePreviewActionsPosition_(bindingElement);
}));
appendStaticContextToRootViewModel(designerModel, staticContext);
return designerModel;
}