import { DirectUploadController } from './direct_upload_controller'; import { findElements, dispatchEvent, toArray } from './helpers'; const inputSelector = 'input[type=file][data-direct-upload-url]:not([disabled])'; export class DirectUploadsController { constructor(form) { this.form = form; this.inputs = findElements(form, inputSelector).filter( input => input.files.length ); } start(callback) { const controllers = this.createDirectUploadControllers(); const startNextController = () => { const controller = controllers.shift(); if (controller) { controller.start(error => { if (error) { callback(error); this.dispatch('end'); } else { startNextController(); } }); } else { callback(); this.dispatch('end'); } }; this.dispatch('start'); startNextController(); } createDirectUploadControllers() { const controllers = []; this.inputs.forEach(input => { toArray(input.files).forEach(file => { const controller = new DirectUploadController(input, file); controllers.push(controller); }); }); return controllers; } dispatch(name, detail = {}) { return dispatchEvent(this.form, `direct-uploads:${name}`, { detail }); } }