diff --git a/app/javascript/new_design/dossiers/auto-upload-controller.js b/app/javascript/new_design/dossiers/auto-upload-controller.js index a2780a65e..84e5f594b 100644 --- a/app/javascript/new_design/dossiers/auto-upload-controller.js +++ b/app/javascript/new_design/dossiers/auto-upload-controller.js @@ -1,6 +1,9 @@ import Uploader from '../../shared/activestorage/uploader'; import { show, hide, toggle } from '@utils'; -import { FAILURE_CONNECTIVITY } from '../../shared/activestorage/file-upload-error'; +import { + ERROR_CODE_READ, + FAILURE_CONNECTIVITY +} from '../../shared/activestorage/file-upload-error'; // Given a file input in a champ with a selected file, upload a file, // then attach it to the dossier. @@ -68,6 +71,12 @@ export default class AutoUploadController { description: 'Vérifiez votre connexion à Internet, puis ré-essayez.', retry: true }; + } else if (error.code == ERROR_CODE_READ) { + return { + title: 'Nous n’arrivons pas à lire ce fichier sur votre appareil.', + description: 'Essayez à nouveau, ou sélectionnez un autre fichier.', + retry: false + }; } else { return { title: 'Le fichier n’a pas pu être envoyé.', diff --git a/app/javascript/new_design/dossiers/auto-uploads-controllers.js b/app/javascript/new_design/dossiers/auto-uploads-controllers.js index 18b0bc882..a469f115f 100644 --- a/app/javascript/new_design/dossiers/auto-uploads-controllers.js +++ b/app/javascript/new_design/dossiers/auto-uploads-controllers.js @@ -1,12 +1,9 @@ import Rails from '@rails/ujs'; import AutoUploadController from './auto-upload-controller.js'; -import { fire } from '@utils'; -import { FAILURE_CONNECTIVITY } from '../../shared/activestorage/file-upload-error'; - -// -// DEBUG -// -const originalImpl = FileReader.prototype.addEventListener; +import { + FAILURE_CLIENT, + ERROR_CODE_READ +} from '../../shared/activestorage/file-upload-error'; // Manage multiple concurrent uploads. // @@ -24,10 +21,11 @@ export default class AutoUploadsControllers { try { let controller = new AutoUploadController(input, file); await controller.start(); - } catch (error) { - // Report errors to Sentry (except connectivity issues) - if (error.failureReason != FAILURE_CONNECTIVITY) { - throw error; + } catch (err) { + // Report unexpected client errors to Sentry. + // (But ignore usual client errors, or errors we can monitor better on the server side.) + if (err.failureReason == FAILURE_CLIENT && err.code != ERROR_CODE_READ) { + throw err; } } finally { this._decrementInFlightUploads(form); @@ -42,25 +40,6 @@ export default class AutoUploadsControllers { .querySelectorAll('button[type=submit]') .forEach((submitButton) => Rails.disableElement(submitButton)); } - - // - // DEBUG: hook into FileReader onload event - // - if (FileReader.prototype.addEventListener === originalImpl) { - FileReader.prototype.addEventListener = function () { - // When DirectUploads attempts to add an event listener for "error", - // also insert a custom event listener of our that will report errors to Sentry. - if (arguments[0] == 'error') { - let handler = (event) => { - let message = `FileReader ${event.target.error.name}: ${event.target.error.message}`; - fire(document, 'sentry:capture-exception', new Error(message)); - }; - originalImpl.apply(this, ['error', handler]); - } - // Add the originally requested event listener - return originalImpl.apply(this, arguments); - }; - } } _decrementInFlightUploads(form) { @@ -73,12 +52,5 @@ export default class AutoUploadsControllers { .querySelectorAll('button[type=submit]') .forEach((submitButton) => Rails.enableElement(submitButton)); } - - // - // DEBUG: remove the FileReader hook we set before. - // - if (this.inFlightUploadsCount == 0) { - FileReader.prototype.addEventListener = originalImpl; - } } }