UNPKG

@duoduo-oba/ng-devui

Version:

DevUI components based on Angular

201 lines 17.8 kB
/** * @fileoverview added by tsickle * Generated from: select-files.utils.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import endsWith from 'lodash-es/endsWith'; import { Observable, from } from 'rxjs'; import { map, mergeMap } from 'rxjs/operators'; import { Injectable } from '@angular/core'; import { I18nService } from '@duoduo-oba/ng-devui/i18n'; var SelectFiles = /** @class */ (function () { function SelectFiles(i18n) { var _this = this; this.i18n = i18n; this.selectFiles = (/** * @param {?} __0 * @return {?} */ function (_a) { var multiple = _a.multiple, accept = _a.accept; return new Promise((/** * @param {?} resolve * @return {?} */ function (resolve) { /** @type {?} */ var tempNode = document.getElementById('d-upload-temp'); if (tempNode) { document.body.removeChild(tempNode); } /** @type {?} */ var input = document.createElement('input'); input.style.position = 'fixed'; input.style.left = '-2000px'; input.style.top = '-2000px'; input.setAttribute('id', 'd-upload-temp'); input.setAttribute('type', 'file'); if (multiple) { input.setAttribute('multiple', ''); } if (accept) { input.setAttribute('accept', accept); } input.addEventListener('change', (/** * @param {?} event * @return {?} */ function (event) { resolve(Array.prototype.slice.call(((/** @type {?} */ (event.target))).files)); })); document.body.appendChild(input); // Fix campatability issue with Internet Explorer 11 _this.simulateClickEvent(input); })); }); this.isAllowedFileType = (/** * @param {?} accept * @param {?} file * @return {?} */ function (accept, file) { if (accept) { /** @type {?} */ var acceptArr = accept.split(','); return acceptArr.reduce((/** * @param {?} result * @param {?} item * @return {?} */ function (result, item) { return result || file.type.indexOf(item.replace(/[\.*]/g, '')) > -1 || endsWith(file.name, item); }), false); } return true; }); this.beyondMaximalSize = (/** * @param {?} fileSize * @param {?} maximumSize * @return {?} */ function (fileSize, maximumSize) { if (maximumSize) { return fileSize > 1000000 * maximumSize; } return false; }); this.triggerSelectFiles = (/** * @param {?} fileOptions * @param {?} uploadOptions * @return {?} */ function (fileOptions, uploadOptions) { var multiple = fileOptions.multiple, accept = fileOptions.accept; return _this._validateFiles(from(_this.selectFiles({ multiple: multiple, accept: accept })), accept, uploadOptions); }); this.triggerDropFiles = (/** * @param {?} fileOptions * @param {?} uploadOptions * @param {?} files * @return {?} */ function (fileOptions, uploadOptions, files) { var multiple = fileOptions.multiple, accept = fileOptions.accept; return _this._validateFiles(new Observable((/** * @param {?} observer * @return {?} */ function (observer) { return observer.next(files); })), accept, uploadOptions); }); this.i18nText = this.i18n.getI18nText().upload; this.i18nSubscription = this.i18n.langChange().subscribe((/** * @param {?} data * @return {?} */ function (data) { _this.i18nText = data.upload; })); } /** * @param {?} observable * @param {?} accept * @param {?} uploadOptions * @return {?} */ SelectFiles.prototype._validateFiles = /** * @param {?} observable * @param {?} accept * @param {?} uploadOptions * @return {?} */ function (observable, accept, uploadOptions) { var _this = this; return observable.pipe(mergeMap((/** * @param {?} file * @return {?} */ function (file) { return (/** @type {?} */ (file)); })), map((/** * @param {?} file * @return {?} */ function (file) { if (!_this.isAllowedFileType(accept, (/** @type {?} */ (file)))) { _this.NOT_ALLOWED_FILE_TYPE_MSG = _this.i18nText.getNotAllowedFileTypeMsg(((/** @type {?} */ (file))).name, accept); throw new Error(_this.NOT_ALLOWED_FILE_TYPE_MSG); } if (_this.beyondMaximalSize(((/** @type {?} */ (file))).size, uploadOptions.maximumSize)) { _this.BEYOND_MAXIMAL_FILE_SIZE_MSG = _this.i18nText.getBeyondMaximalFileSizeMsg(((/** @type {?} */ (file))).size, uploadOptions.maximumSize); throw new Error(_this.BEYOND_MAXIMAL_FILE_SIZE_MSG); } return file; }))); }; /** * @param {?} input * @return {?} */ SelectFiles.prototype.simulateClickEvent = /** * @param {?} input * @return {?} */ function (input) { /** @type {?} */ var evt = document.createEvent('MouseEvents'); evt.initMouseEvent('click', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 0, null); input.dispatchEvent(evt); }; SelectFiles.decorators = [ { type: Injectable } ]; /** @nocollapse */ SelectFiles.ctorParameters = function () { return [ { type: I18nService } ]; }; return SelectFiles; }()); export { SelectFiles }; if (false) { /** @type {?} */ SelectFiles.prototype.NOT_ALLOWED_FILE_TYPE_MSG; /** @type {?} */ SelectFiles.prototype.BEYOND_MAXIMAL_FILE_SIZE_MSG; /** @type {?} */ SelectFiles.prototype.i18nText; /** @type {?} */ SelectFiles.prototype.i18nSubscription; /** @type {?} */ SelectFiles.prototype.selectFiles; /** @type {?} */ SelectFiles.prototype.isAllowedFileType; /** @type {?} */ SelectFiles.prototype.beyondMaximalSize; /** @type {?} */ SelectFiles.prototype.triggerSelectFiles; /** @type {?} */ SelectFiles.prototype.triggerDropFiles; /** * @type {?} * @private */ SelectFiles.prototype.i18n; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWZpbGVzLnV0aWxzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZGV2dWkvdXBsb2FkLyIsInNvdXJjZXMiOlsic2VsZWN0LWZpbGVzLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxRQUFRLE1BQU0sb0JBQW9CLENBQUM7QUFFMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0MsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQWlCLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzRDtJQU1FLHFCQUFvQixJQUFpQjtRQUFyQyxpQkFLQztRQUxtQixTQUFJLEdBQUosSUFBSSxDQUFhO1FBT3JDLGdCQUFXOzs7O1FBQUcsVUFBQyxFQUFnQztnQkFBL0Isc0JBQVEsRUFBRSxrQkFBTTtZQUM5QixPQUFPLElBQUksT0FBTzs7OztZQUFDLFVBQUMsT0FBTzs7b0JBQ25CLFFBQVEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQztnQkFDekQsSUFBSSxRQUFRLEVBQUU7b0JBQ1osUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ3JDOztvQkFDSyxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7Z0JBRTdDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztnQkFDL0IsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO2dCQUM3QixLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUM7Z0JBRTVCLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO2dCQUMxQyxLQUFL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RUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDOztnQkE3RkYsVUFBVTs7OztnQkFGYSxXQUFXOztJQWdHbkMsa0JBQUM7Q0FBQSxBQTlGRCxJQThGQztTQTdGWSxXQUFXOzs7SUFDdEIsZ0RBQWtDOztJQUNsQyxtREFBcUM7O0lBQ3JDLCtCQUFrQzs7SUFDbEMsdUNBQStCOztJQVEvQixrQ0EyQkM7O0lBRUQsd0NBUUM7O0lBRUQsd0NBS0M7O0lBRUQseUNBR0M7O0lBR0QsdUNBSUM7Ozs7O0lBL0RXLDJCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBlbmRzV2l0aCBmcm9tICdsb2Rhc2gtZXMvZW5kc1dpdGgnO1xyXG5pbXBvcnQge0lGaWxlT3B0aW9ucywgSVVwbG9hZE9wdGlvbnN9IGZyb20gJy4vZmlsZS11cGxvYWRlci50eXBlcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIGZyb20sIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIG1lcmdlTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSTE4bkludGVyZmFjZSwgSTE4blNlcnZpY2UgfSBmcm9tICduZy1kZXZ1aS9pMThuJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFNlbGVjdEZpbGVzIHtcclxuICBOT1RfQUxMT1dFRF9GSUxFX1RZUEVfTVNHOiBzdHJpbmc7XHJcbiAgQkVZT05EX01BWElNQUxfRklMRV9TSVpFX01TRzogc3RyaW5nO1xyXG4gIGkxOG5UZXh0OiBJMThuSW50ZXJmYWNlWyd1cGxvYWQnXTtcclxuICBpMThuU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpMThuOiBJMThuU2VydmljZSkge1xyXG4gICAgdGhpcy5pMThuVGV4dCA9IHRoaXMuaTE4bi5nZXRJMThuVGV4dCgpLnVwbG9hZDtcclxuICAgIHRoaXMuaTE4blN1YnNjcmlwdGlvbiA9IHRoaXMuaTE4bi5sYW5nQ2hhbmdlKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgIHRoaXMuaTE4blRleHQgPSBkYXRhLnVwbG9hZDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0RmlsZXMgPSAoe211bHRpcGxlLCBhY2NlcHR9OiBJRmlsZU9wdGlvbnMpOiBQcm9taXNlPEZpbGVbXT4gPT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIGNvbnN0IHRlbXBOb2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2QtdXBsb2FkLXRlbXAnKTtcclxuICAgICAgaWYgKHRlbXBOb2RlKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZW1wTm9kZSk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xyXG5cclxuICAgICAgaW5wdXQuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xyXG4gICAgICBpbnB1dC5zdHlsZS5sZWZ0ID0gJy0yMDAwcHgnO1xyXG4gICAgICBpbnB1dC5zdHlsZS50b3AgPSAnLTIwMDBweCc7XHJcblxyXG4gICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ2QtdXBsb2FkLXRlbXAnKTtcclxuICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ2ZpbGUnKTtcclxuICAgICAgaWYgKG11bHRpcGxlKSB7XHJcbiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdtdWx0aXBsZScsICcnKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYWNjZXB0KSB7XHJcbiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdhY2NlcHQnLCBhY2NlcHQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBldmVudCA9PiB7XHJcbiAgICAgICAgcmVzb2x2ZShBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmZpbGVzKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlucHV0KTsgLy8gRml4IGNhbXBhdGFiaWxpdHkgaXNzdWUgd2l0aCBJbnRlcm5ldCBFeHBsb3JlciAxMVxyXG4gICAgICB0aGlzLnNpbXVsYXRlQ2xpY2tFdmVudChpbnB1dCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGlzQWxsb3dlZEZpbGVUeXBlID0gKGFjY2VwdDogc3RyaW5nLCBmaWxlOiBGaWxlKSA9PiB7XHJcbiAgICBpZiAoYWNjZXB0KSB7XHJcbiAgICAgIGNvbnN0IGFjY2VwdEFyciA9IGFjY2VwdC5zcGxpdCgnLCcpO1xyXG4gICAgICByZXR1cm4gYWNjZXB0QXJyLnJlZHVjZSgocmVzdWx0OiBib29sZWFuLCBpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0IHx8IGZpbGUudHlwZS5pbmRleE9mKGl0ZW0ucmVwbGFjZSgvW1xcLipdL2csICcnKSkgPiAtMSB8fCBlbmRzV2l0aChmaWxlLm5hbWUsIGl0ZW0pO1xyXG4gICAgICB9LCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGJleW9uZE1heGltYWxTaXplID0gKGZpbGVTaXplLCBtYXhpbXVtU2l6ZSkgPT4ge1xyXG4gICAgaWYgKG1heGltdW1TaXplKSB7XHJcbiAgICAgIHJldHVybiBmaWxlU2l6ZSA+IDEwMDAwMDAgKiBtYXhpbXVtU2l6ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJTZWxlY3RGaWxlcyA9IChmaWxlT3B0aW9uczogSUZpbGVPcHRpb25zLCB1cGxvYWRPcHRpb25zOiBJVXBsb2FkT3B0aW9ucykgPT4ge1xyXG4gICAgY29uc3Qge211bHRpcGxlLCBhY2NlcHR9ID0gZmlsZU9wdGlvbnM7XHJcbiAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVGaWxlcyhmcm9tKHRoaXMuc2VsZWN0RmlsZXMoe211bHRpcGxlLCBhY2NlcHR9KSksIGFjY2VwdCwgdXBsb2FkT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgdHJpZ2dlckRyb3BGaWxlcyA9ICAoZmlsZU9wdGlvbnM6IElGaWxlT3B0aW9ucywgdXBsb2FkT3B0aW9uczogSVVwbG9hZE9wdGlvbnMsIGZpbGVzOiBhbnkpID0+IHtcclxuICAgIGNvbnN0IHttdWx0aXBsZSwgYWNjZXB0fSA9IGZpbGVPcHRpb25zO1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlRmlsZXMobmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4gb2JzZXJ2ZXIubmV4dChmaWxlcykpLCBhY2NlcHQsIHVwbG9hZE9wdGlvbnMpO1xyXG5cclxuICB9XHJcblxyXG4gIF92YWxpZGF0ZUZpbGVzKG9ic2VydmFibGUsIGFjY2VwdCwgdXBsb2FkT3B0aW9ucykge1xyXG4gICAgcmV0dXJuIG9ic2VydmFibGUucGlwZShcclxuICAgIG1lcmdlTWFwKGZpbGUgPT4gPGFueT5maWxlKSxcclxuICAgIG1hcCgoZmlsZSkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuaXNBbGxvd2VkRmlsZVR5cGUoYWNjZXB0LCA8RmlsZT5maWxlKSkge1xyXG4gICAgICAgIHRoaXMuTk9UX0FMTE9XRURfRklMRV9UWVBFX01TRyA9IHRoaXMuaTE4blRleHQuZ2V0Tm90QWxsb3dlZEZpbGVUeXBlTXNnKCg8RmlsZT5maWxlKS5uYW1lLCBhY2NlcHQpO1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLk5PVF9BTExPV0VEX0ZJTEVfVFlQRV9NU0cpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5iZXlvbmRNYXhpbWFsU2l6ZSgoPEZpbGU+ZmlsZSkuc2l6ZSwgdXBsb2FkT3B0aW9ucy5tYXhpbXVtU2l6ZSkpIHtcclxuICAgICAgICB0aGlzLkJFWU9ORF9NQVhJTUFMX0ZJTEVfU0laRV9NU0cgPSB0aGlzLmkxOG5UZXh0LmdldEJleW9uZE1heGltYWxGaWxlU2l6ZU1zZygoPEZpbGU+ZmlsZSkuc2l6ZSwgdXBsb2FkT3B0aW9ucy5tYXhpbXVtU2l6ZSk7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHRoaXMuQkVZT05EX01BWElNQUxfRklMRV9TSVpFX01TRyk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZpbGU7XHJcbiAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNpbXVsYXRlQ2xpY2tFdmVudChpbnB1dCkge1xyXG4gICAgY29uc3QgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ01vdXNlRXZlbnRzJyk7XHJcbiAgICBldnQuaW5pdE1vdXNlRXZlbnQoJ2NsaWNrJywgdHJ1ZSwgdHJ1ZSwgd2luZG93LCAxLCAwLCAwLCAwLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMCwgbnVsbCk7XHJcbiAgICBpbnB1dC5kaXNwYXRjaEV2ZW50KGV2dCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==