UNPKG

@progress/telerik-jquery-report-viewer

Version:

Progress® Telerik® Report Viewer for jQuery

139 lines (136 loc) 5.2 kB
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 };