js-uploader
Version:
A JavaScript library for file upload
58 lines • 2.56 kB
JavaScript
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