diff --git a/beat/web/reports/static/reports/app/directives/bootstrapModal.js b/beat/web/reports/static/reports/app/directives/bootstrapModal.js index 6692f51a013e7a507f86b61578b176b3c6f8a15d..3a60c59e9f31fc0a32279295071eaea48e93b39d 100644 --- a/beat/web/reports/static/reports/app/directives/bootstrapModal.js +++ b/beat/web/reports/static/reports/app/directives/bootstrapModal.js @@ -36,7 +36,6 @@ angular.module('reportApp') buttonSubmitText: '@' }, link: function(scope){ - console.log(scope); }, transclude: { 'title': '?bTitle', diff --git a/beat/web/reports/static/reports/app/directives/error.js b/beat/web/reports/static/reports/app/directives/error.js index 673449b7021aa7c0674d93187eccfbac1248ff5c..a8759663eef6136d0f7bc6580a96766d7be2d0dc 100644 --- a/beat/web/reports/static/reports/app/directives/error.js +++ b/beat/web/reports/static/reports/app/directives/error.js @@ -35,16 +35,24 @@ angular.module('reportApp') }, restrict: 'E', link: function(scope){ - scope.error = null; + scope.currError = { + message: '', + error: '' + }; + + const errors = []; const processError = () => { - // if theres no error, return - if(!ErrorService._hasError){ + const modalOpen = ($("#errorReportModal").data('bs.modal') || {}).isShown; + if(modalOpen || errors.length === 0){ return; } // save our error - scope.error = ErrorService._getError(); + const e = errors.shift(); + scope.currError.message = e.message; + scope.currError.error = e.error; + scope.$apply(); // pop up the modal $('#errorReportModal').modal(); @@ -53,14 +61,15 @@ angular.module('reportApp') $timeout(() => { $('#errorReportModal').on('hidden.bs.modal', () => { // finished processing the last error - scope.error = null; - - // process the next one, if there is one + // process the next one processError(); }); }, 0); - scope.$watch(ErrorService._hasError, processError); + scope.$on('user:error', (event, error) => { + errors.push(error); + processError(); + }); }, template: ` <bootstrap-modal dom-id='errorReportModal' button-cancel-text='Continue'> @@ -69,8 +78,9 @@ angular.module('reportApp') </b-title> <b-content> <p>There was an error:</p> - <p>{{ error.message }}</p> - <pre>{{ error.error.message }}</pre> + <p>{{ currError.message }}</p> + <small>Details:</small> + <pre>{{ currError.error }}</pre> </b-content> </bootstrap-modal> ` diff --git a/beat/web/reports/static/reports/app/directives/publish.js b/beat/web/reports/static/reports/app/directives/publish.js index 8833a3445dd38228b0418b06c498ff070425fab8..ebd3ee047f46cce81690362228211d765d35da87 100644 --- a/beat/web/reports/static/reports/app/directives/publish.js +++ b/beat/web/reports/static/reports/app/directives/publish.js @@ -50,7 +50,9 @@ angular.module('reportApp') scope.algorithms.forEach(a => { scope.radios[a] = ''; }); }) .catch(e => { - ErrorService.logError(e, `Could not publish the report.`); + $('#publishReportModal').modal('hide'); + // wait for the modal to close before logging error + setTimeout(() => ErrorService.logError(e, `Could not fetch the algorithms of the report, which is required to publish it.`), 500); }) ; }; @@ -67,7 +69,11 @@ angular.module('reportApp') visible_algorithms: openSourceAlgs }); - return ReportService.publishReport(openSourceAlgs); + return ReportService.publishReport(openSourceAlgs) + .catch(e => { + ErrorService.logError(e, `Could not publish the report.`); + }) + ; }; }, template: ` diff --git a/beat/web/reports/static/reports/app/services/errorService.js b/beat/web/reports/static/reports/app/services/errorService.js index 3343054bb5a5d0919daad0b4fd7d60ea309847f0..562c8a3261e40dd61b42d84fb0ecc1dfdb88f1bf 100644 --- a/beat/web/reports/static/reports/app/services/errorService.js +++ b/beat/web/reports/static/reports/app/services/errorService.js @@ -29,10 +29,8 @@ * The ErrorService will (one at a time & synchronously!) pop up an error * modal (directives/error.js, "report-error") to let the user know. */ -angular.module('reportApp').factory('ErrorService', [function(){ +angular.module('reportApp').factory('ErrorService', ['$rootScope', function($rootScope){ const es = { - _errors: [], - _hasError: false }; class ReportError { @@ -53,19 +51,8 @@ angular.module('reportApp').factory('ErrorService', [function(){ es.logError = (error, message) => { const newErr = new ReportError(error, message); - es._errors.push(newErr); - _hasError = true; + $rootScope.$broadcast('user:error', newErr); }; - es._getError = () => { - const err = es._errors.shift(); - - if(es._errors.length === 0){ - es._hasError = false; - } - - return err; - } - return es; }]); diff --git a/beat/web/reports/templates/reports/panels/viewer.html b/beat/web/reports/templates/reports/panels/viewer.html index f1cc222afaee2eb2f1c7c0c37b9a020f262dc11c..9fcba9aaff87aaf06b976cce62e3168408389476 100644 --- a/beat/web/reports/templates/reports/panels/viewer.html +++ b/beat/web/reports/templates/reports/panels/viewer.html @@ -66,6 +66,7 @@ </div>{# row #} <div class="row"> <div class="col-sm-12"> + <report-error></report-error> <div groups-layout></div> </div> </div>