@progress/telerik-jquery-report-viewer
Version:
Progress® Telerik® Report Viewer for jQuery
139 lines (136 loc) • 5.2 kB
JavaScript
import { ViewModes, PageModes, ScaleModes } from './enums.js';
function UIController(options) {
var stateFlags = {
ExportInProgress: 1 << 0,
PrintInProgress: 1 << 1,
RenderInProgress: 1 << 2
};
function getState(flags) {
return (state & flags) != 0;
}
function setState(flags, value) {
if (value) {
state |= flags;
} else {
state &= ~flags;
}
}
var controller = options.controller;
var historyManager = options.history;
var state = 0;
var refreshUI;
var commands = options.commands;
if (!controller) {
throw "No controller (telerikReporting.ReportViewerController) has been specified.";
}
function getDocumentMapState() {
var args = {};
controller.getDocumentMapState(args);
return args;
}
function getParametersAreaState() {
var args = {};
controller.getParametersAreaState(args);
return args;
}
function getSearchDialogState() {
var args = {};
controller.getSearchDialogState(args);
return args;
}
function getSendEmailDialogState() {
var args = {};
controller.getSendEmailDialogState(args);
return args;
}
function updateUI() {
if (!refreshUI) {
refreshUI = true;
window.setTimeout(function() {
try {
updateUICore();
} finally {
refreshUI = false;
}
}, 10);
}
}
function updateUICore() {
var rs = controller.getReportSource();
var pageCount = controller.getPageCount();
var currentPageNumber = controller.getCurrentPageNumber();
var hasReport = rs && rs.report;
var hasPages = hasReport && pageCount > 0;
var nextPage = hasPages && currentPageNumber < pageCount;
var prevPage = hasPages && currentPageNumber > 1;
var hasPage = hasPages && currentPageNumber;
var documentMapState = getDocumentMapState();
var parametersAreaState = getParametersAreaState();
var searchDialogState = getSearchDialogState();
var sendEmailDialogState = getSendEmailDialogState();
var renderInProgress = getState(stateFlags.RenderInProgress);
var printInProgress = getState(stateFlags.PrintInProgress);
var exportInProgress = getState(stateFlags.ExportInProgress);
commands.goToFirstPage.enabled(prevPage);
commands.goToPrevPage.enabled(prevPage);
commands.stopRendering.enabled(hasReport && renderInProgress);
commands.goToLastPage.enabled(nextPage);
commands.goToNextPage.enabled(nextPage);
commands.goToPage.enabled(hasPages);
commands.print.enabled(hasPages && !renderInProgress && !printInProgress);
commands.export.enabled(hasPages && !renderInProgress && !exportInProgress);
commands.refresh.enabled(hasReport);
commands.historyBack.enabled(historyManager && historyManager.canMoveBack());
commands.historyForward.enabled(historyManager && historyManager.canMoveForward());
commands.toggleDocumentMap.enabled(hasReport && documentMapState.enabled).checked(documentMapState.enabled && documentMapState.visible);
commands.toggleParametersArea.enabled(hasReport && parametersAreaState.enabled).checked(parametersAreaState.enabled && parametersAreaState.visible);
commands.togglePrintPreview.enabled(hasPages).checked(controller.getViewMode() == ViewModes.PRINT_PREVIEW);
commands.pageMode.enabled(hasPages).checked(controller.getPageMode() == PageModes.CONTINUOUS_SCROLL);
commands.zoom.enabled(hasPage);
commands.zoomIn.enabled(hasPage);
commands.zoomOut.enabled(hasPage);
commands.toggleZoomMode.enabled(hasPage).checked(controller.getScaleMode() == ScaleModes.FIT_PAGE || controller.getScaleMode() == ScaleModes.FIT_PAGE_WIDTH);
commands.toggleSearchDialog.enabled(hasPages).checked(searchDialogState.visible);
commands.toggleSendEmailDialog.enabled(hasPages).checked(sendEmailDialogState.visible);
controller.updateUI(null);
controller.pageNumberChange(currentPageNumber);
controller.pageCountChange(pageCount);
}
controller.setParametersAreaVisible(updateUI);
controller.setDocumentMapVisible(updateUI);
controller.updateUIInternal(updateUI);
controller.setSearchDialogVisible(updateUI);
controller.setSendEmailDialogVisible(updateUI);
controller.scaleModeChanged(updateUI);
controller.currentPageChanged(updateUI);
controller.beforeLoadReport(function() {
setState(stateFlags.RenderInProgress, true);
updateUI();
});
controller.reportLoadProgress(updateUI);
controller.reportLoadComplete(function() {
setState(stateFlags.RenderInProgress, false);
updateUI();
});
controller.reportSourceChanged(updateUI);
controller.viewModeChanged(updateUI);
controller.pageModeChanged(function() {
updateUI();
});
controller.setUIState(function(event, args) {
setState(stateFlags[args.operationName], args.inProgress);
updateUI();
});
controller.error(function() {
setState(stateFlags.ExportInProgress, false);
setState(stateFlags.PrintInProgress, false);
setState(stateFlags.RenderInProgress, false);
updateUI();
});
controller.renderingStopped(function() {
setState(stateFlags.RenderInProgress, false);
updateUI();
});
updateUI();
}
export { UIController };