devexpress-reporting
Version:
DevExpress Reporting provides the capability to develop a reporting application to create and customize reports.
211 lines (210 loc) • 8.86 kB
JavaScript
/**
* DevExpress HTML/JS Reporting (viewer\mobile\mobilePreview.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
*/
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
import { ReportPreview } from '../reportPreview';
import { ZoomAutoBy } from '../constants';
import { MobilePreviewPage } from './internal/_mobilePage';
import { mutable } from '@devexpress/analytics-core/analytics-serializer-native';
import { createMobileReportPreviewViewModel, updateMobileReportPreviewViewModel } from './mobilePreview.viewModel';
export class MobileReportPreview extends ReportPreview {
deferredUpdateViewModel() { return false; }
_getScrollAvailable() {
return !(this.scrollReachedTop && this.scrollReachedLeft
&& this.scrollReachedRight && this.scrollReachedBottom);
}
constructor(handlerUri, previewRequestWrapper, previewHandlersHelper, callbacks, rtl = false, mobileSettings = { readerMode: true, animationEnabled: true }, breadcrumb, exportSettings) {
super(handlerUri, previewRequestWrapper, previewHandlersHelper, callbacks, rtl, undefined, exportSettings, undefined, breadcrumb);
this.readerMode = mobileSettings.readerMode;
const globalAnimationEnabled = mobileSettings.animationEnabled;
this.animationSettings = { zoomEnabled: globalAnimationEnabled, swipeEnabled: globalAnimationEnabled };
this.canSwitchToDesigner = false;
this.autoFitBy = ZoomAutoBy.PageWidth;
this.showMultipagePreview = true;
}
onPropertyChanged(args) {
super.onPropertyChanged(args);
if (args.propertyName === 'mobileZoom') {
this.zoom = args.newValue;
}
if (args.propertyName === 'zoom' || args.propertyName === 'originalZoom') {
const currentZoom = this.zoom;
this.mobileZoomRead = currentZoom > 0 ? currentZoom : this.originalZoom;
}
if (args.propertyName === 'searchPanelVisible') {
if (args.newValue) {
this.actionsVisible = false;
}
}
if (args.propertyName == 'pageIndex') {
this.actionsVisible = false;
}
if (args.propertyName === 'pages') {
this.interactionDisabled = this.pages.length === 0;
}
if (args.propertyName === 'pages' || args.propertyName === 'availablePages') {
if (!this.availablePages) {
this.visiblePages = [].concat(this.pages);
}
else {
this.visiblePages = this.pages.filter((x) => this.availablePages.indexOf(x.pageIndex) !== -1);
}
}
}
createViewModel() {
return createMobileReportPreviewViewModel.call(this, super.createViewModel());
}
updateViewModel(args) {
super.updateViewModel(args);
updateMobileReportPreviewViewModel.call(this, args);
}
setZoomUpdating(newValue) {
this.zoomUpdating = newValue;
}
createPage(pageIndex, processClick, subscribeToPageLoading = false) {
return new MobilePreviewPage(this, pageIndex, processClick, subscribeToPageLoading);
}
createBrickClickProcessor(cyclePageIndex) {
const _clickHandler = super.createBrickClickProcessor(cyclePageIndex);
const func = (brick) => {
if (this.zoomUpdating)
return;
if (cyclePageIndex !== this.pageIndex) {
this.actionsVisible = false;
const supscriptionDispose = this.events.on('actionsVisibleChanged', (args) => {
supscriptionDispose();
this.actionsVisible = false;
});
}
_clickHandler(brick);
};
return func;
}
_hasActiveEditingFields() {
return this.visiblePages.some(p => {
const pageEditFields = p.editingFields;
return pageEditFields && pageEditFields.some(x => x.active);
});
}
showActions() {
if (this.zoomUpdating || this.interactionDisabled)
return;
const searchVisible = this.searchPanelVisible;
if (!searchVisible) {
if (!this._hasActiveEditingFields()) {
this.actionsVisible = !this.actionsVisible;
}
}
else {
this.searchPanelVisible = !searchVisible;
}
}
onSlide(e) {
this.scrollReachedLeft = true;
this.scrollReachedRight = true;
if (this.autoFitBy === ZoomAutoBy.None && e.removedItems && e.removedItems[0].blocks.length === 1 && e.addedItems && e.addedItems[0].blocks.length === 1)
this.autoFitBy = ZoomAutoBy.PageWidth;
}
goToPage(pageIndex, forcePage) {
super.goToPage(pageIndex, forcePage);
}
setScrollReached(e) {
this.scrollReachedLeft = e.reachedLeft;
this.scrollReachedRight = e.reachedRight;
this.scrollReachedTop = e.reachedTop;
this.scrollReachedBottom = e.reachedBottom;
}
initializeSlideOptions(searchModel, gallery) {
const viewModel = this.getViewModel();
viewModel.gallery = gallery.getViewModel();
viewModel.slideOptions = {
readerMode: this.readerMode,
animationSettings: this.animationSettings,
searchPanel: searchModel,
getTopOffset: () => this.topOffset,
setTopOffset: (value) => this.topOffset = value,
getReachedTop: () => this.scrollReachedTop,
getReachedLeft: () => this.scrollReachedLeft,
getReachedRight: () => this.scrollReachedRight,
getDisabled: () => this.interactionDisabled,
setAutoFitBy: (value) => this.autoFitBy = value,
getGalleryIsAnimated: () => gallery.isAnimated,
getRepaintTimeout: () => gallery.repaintTimeout,
setRepaintTimeout: (value) => gallery.repaintTimeout = value,
setZoomUpdating: (value) => this.zoomUpdating = value,
getZoomUpdating: () => this.zoomUpdating,
getBrickEventsDisabled: () => this.brickEventsDisabled,
setBrickEventsDisabled: (value) => this.brickEventsDisabled = value,
getScrollAvailable: () => this._getScrollAvailable(),
getSwipeEnabled: () => {
if (this.zoomUpdating) {
return false;
}
if (searchModel.height > 0 && !searchModel.editorVisible) {
return false;
}
if (!this.scrollReachedLeft && !this.scrollReachedRight) {
return false;
}
return true;
}
};
}
}
__decorate([
mutable(null)
], MobileReportPreview.prototype, "slideOptions", void 0);
__decorate([
mutable(0)
], MobileReportPreview.prototype, "topOffset", void 0);
__decorate([
mutable({ width: 0, height: 0 })
], MobileReportPreview.prototype, "previewWrapperSize", void 0);
__decorate([
mutable(() => [])
], MobileReportPreview.prototype, "availablePages", void 0);
__decorate([
mutable(() => [])
], MobileReportPreview.prototype, "visiblePages", void 0);
__decorate([
mutable(false)
], MobileReportPreview.prototype, "searchPanelVisible", void 0);
__decorate([
mutable(false)
], MobileReportPreview.prototype, "actionsVisible", void 0);
__decorate([
mutable(false)
], MobileReportPreview.prototype, "scrollReachedLeft", void 0);
__decorate([
mutable(false)
], MobileReportPreview.prototype, "scrollReachedRight", void 0);
__decorate([
mutable(true)
], MobileReportPreview.prototype, "scrollReachedTop", void 0);
__decorate([
mutable(true)
], MobileReportPreview.prototype, "scrollReachedBottom", void 0);
__decorate([
mutable(false)
], MobileReportPreview.prototype, "zoomUpdating", void 0);
__decorate([
mutable(1)
], MobileReportPreview.prototype, "mobileZoom", void 0);
__decorate([
mutable(1)
], MobileReportPreview.prototype, "mobileZoomRead", void 0);
__decorate([
mutable(false)
], MobileReportPreview.prototype, "brickEventsDisabled", void 0);
__decorate([
mutable(true)
], MobileReportPreview.prototype, "scrollAvailable", void 0);