UNPKG

js-uploader

Version:
58 lines 2.56 kB
import { from, fromEvent } from 'rxjs'; import { delayWhen, filter, map, tap } from 'rxjs/operators'; import { Logger } from '../../shared'; var FilePicker = /** @class */ (function () { function FilePicker(opts) { var _this = this; var $el = opts.$el, multiple = opts.multiple, directory = opts.directory, accept = opts.accept; if (!$el) { throw new Error(); } this.$el = $el instanceof HTMLInputElement ? $el : this.createInput(opts); // const reduceFile = () => // scheduled(this.$el.files as FileList, asapScheduler) // .pipe( // reduce((acc: File[], val) => { // acc.push(val) // return acc // }, []), // ) // .toPromise() this.setInputAttr(multiple, directory, accept); this.file$ = fromEvent(this.$el, 'change').pipe(delayWhen(function () { return from(new Promise(setTimeout)); }), filter(function () { var _a; return !!((_a = _this.$el.files) === null || _a === void 0 ? void 0 : _a.length); }), // mergeMap(() => from(reduceFile())), map(function () { return Array.from(_this.$el.files); }), tap(function (files) { _this.$el.value = ''; Logger.info('FilePicker -> constructor -> files', files); })); } FilePicker.prototype.createInput = function (opts) { var $input = document.querySelector(opts.$el) || null; if (!$input) { var id = String(opts.$el).replace(/^[#.]*/, ''); $input = document.createElement('input'); $input.id = id; Object.assign($input.style, { visibility: 'hidden', position: 'absolute', width: '1px', height: '1px', top: '-1px', left: '-1px', }); document.body.append($input); } $input.setAttribute('type', 'file'); return $input; }; FilePicker.prototype.setInputAttr = function (multiple, directory, accept) { if (accept === void 0) { accept = []; } this.$el.setAttribute('type', 'file'); multiple && this.$el.setAttribute('multiple', 'multiple'); directory && this.$el.setAttribute('webkitdirectory', 'webkitdirectory'); (accept === null || accept === void 0 ? void 0 : accept.length) && this.$el.setAttribute('accept', accept.join()); }; return FilePicker; }()); export { FilePicker }; //# sourceMappingURL=FilePicker.js.map