-
Notifications
You must be signed in to change notification settings - Fork 0
/
fetch-progress.js
25 lines (21 loc) · 863 Bytes
/
fetch-progress.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import { $ } from '../utils/dom';
function xhrProgress(method, url, data, progress, success, error) {
const csrf = $('meta[name="csrf-token"]').content;
const xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState !== XMLHttpRequest.DONE) return;
if (xhr.status >= 200 && xhr.status < 300) {
success(new Response(xhr.responseText, {status: xhr.status}));
} else {
error(new Error('Failed to complete upload'));
}
}
xhr.open(method, url, true);
xhr.upload.addEventListener('progress', progress);
xhr.setRequestHeader('X-CSRF-Token', csrf);
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.send(data);
}
export function fetchProgress(method, url, data, progress) {
return new Promise((resolve, reject) => xhrProgress(method, url, data, progress, resolve, reject));
}