coming together
This commit is contained in:
46
static/js/upload-helper.js
Normal file
46
static/js/upload-helper.js
Normal file
@@ -0,0 +1,46 @@
|
||||
(function() {
|
||||
/**
|
||||
* uploadWithAlerts
|
||||
* Small helper to perform a fetch for uploads and, on failure, show a UI alert with
|
||||
* a correlation reference from the server's error envelope. It uses window.http.toError
|
||||
* and window.http.formatAlert to produce a user-facing message.
|
||||
*
|
||||
* Usage:
|
||||
* const formData = new FormData();
|
||||
* formData.append('file', input.files[0]);
|
||||
* const respJson = await uploadWithAlerts(`/api/documents/upload/${fileNo}`, formData);
|
||||
* // respJson is the parsed JSON on success, otherwise an Error is thrown after alerting
|
||||
*
|
||||
* The alert includes "Ref: <correlation-id>" when available.
|
||||
*/
|
||||
async function uploadWithAlerts(url, formData, { method = 'POST', extraOptions = {}, alertTitle = 'Upload failed' } = {}) {
|
||||
const options = {
|
||||
method,
|
||||
body: formData,
|
||||
...extraOptions,
|
||||
};
|
||||
const response = await window.http.wrappedFetch(url, options);
|
||||
if (!response.ok) {
|
||||
const err = await window.http.toError(response, alertTitle);
|
||||
const msg = window.http.formatAlert(err, alertTitle);
|
||||
if (window.alerts && typeof window.alerts.error === 'function') {
|
||||
window.alerts.error(msg, { html: true, duration: 0 });
|
||||
} else if (window.showNotification) {
|
||||
window.showNotification(msg, 'error', 8000);
|
||||
} else {
|
||||
alert(String(msg));
|
||||
}
|
||||
throw err;
|
||||
}
|
||||
try {
|
||||
return await response.json();
|
||||
} catch (_) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// Expose globally for pages to use
|
||||
window.uploadWithAlerts = uploadWithAlerts;
|
||||
})();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user