loomio/loomio

View on GitHub
vue/src/shared/services/file_uploader.js

Summary

Maintainability
A
0 mins
Test Coverage
import { DirectUpload } from "activestorage";

export default class FileUploader {
  constructor({onProgress}) {
    this.onProgress = onProgress;
  }

  upload(file) {
    const url = "/direct_uploads";
    const upload = new DirectUpload(file, url, {
      directUploadWillStoreFileWithXHR: xhr => {
        return xhr.upload.addEventListener('progress', e => {
          if (e.lengthComputable) {
            return this.onProgress(e);
          }
        });
      }
    });

    return new Promise((resolve, reject) => upload.create(function(error, blob, delegate) {
      if (error) {
        return reject(error);
      } else {
        return resolve(blob);
      }
    }));
  }
}