demarches-normaliennes/app/javascript/shared/activestorage/ujs.js
Pierre de La Morinerie 833d7a3b59 javascript: ignore most common upload errors also in standard uploads
In #5149, we ignored most common upload errors, but only for
auto-uploads.

This PR ignores those errors also for standard uploads.
2020-05-18 11:50:29 +02:00

72 lines
2.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import ProgressBar from './progress-bar';
import {
errorFromDirectUploadMessage,
ERROR_CODE_READ,
FAILURE_CLIENT
} from './file-upload-error';
import { fire } from '@utils';
const INITIALIZE_EVENT = 'direct-upload:initialize';
const START_EVENT = 'direct-upload:start';
const PROGRESS_EVENT = 'direct-upload:progress';
const ERROR_EVENT = 'direct-upload:error';
const END_EVENT = 'direct-upload:end';
function addUploadEventListener(type, handler) {
addEventListener(type, (event) => {
// Internet Explorer and Edge will sometime replay Javascript events
// that were dispatched just before a page navigation (!), but without
// the event payload.
//
// Ignore these replayed events.
const isEventValid = event && event.detail && event.detail.id != undefined;
if (!isEventValid) return;
handler(event);
});
}
addUploadEventListener(INITIALIZE_EVENT, ({ target, detail: { id, file } }) => {
ProgressBar.init(target, id, file);
});
addUploadEventListener(START_EVENT, ({ target, detail: { id } }) => {
ProgressBar.start(id);
// At the end of the upload, the form will be submitted again.
// Avoid the confirm dialog to be presented again then.
const button = target.form.querySelector('button.primary');
if (button) {
button.removeAttribute('data-confirm');
}
});
addUploadEventListener(PROGRESS_EVENT, ({ detail: { id, progress } }) => {
ProgressBar.progress(id, progress);
});
addUploadEventListener(ERROR_EVENT, (event) => {
let id = event.detail.id;
let errorMsg = event.detail.error;
// Display an error message
alert(
`Nous sommes désolés, une erreur sest produite lors de lenvoi du fichier.
(${errorMsg})`
);
// Prevent ActiveStorage from displaying its own error message
event.preventDefault();
ProgressBar.error(id, errorMsg);
// Report unexpected client errors to Sentry.
// (But ignore usual client errors, or errors we can monitor better on the server side.)
let error = errorFromDirectUploadMessage(errorMsg);
if (error.failureReason == FAILURE_CLIENT && error.code != ERROR_CODE_READ) {
fire(document, 'sentry:capture-exception', error);
}
});
addUploadEventListener(END_EVENT, ({ detail: { id } }) => {
ProgressBar.end(id);
});