@duoduo-oba/ng-devui
Version:
DevUI components based on Angular
189 lines • 17.2 kB
JavaScript
/**
* @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';
export class SelectFiles {
/**
* @param {?} i18n
*/
constructor(i18n) {
this.i18n = i18n;
this.selectFiles = (/**
* @param {?} __0
* @return {?}
*/
({ multiple, accept }) => {
return new Promise((/**
* @param {?} resolve
* @return {?}
*/
(resolve) => {
/** @type {?} */
const tempNode = document.getElementById('d-upload-temp');
if (tempNode) {
document.body.removeChild(tempNode);
}
/** @type {?} */
const 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 {?}
*/
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 {?}
*/
(accept, file) => {
if (accept) {
/** @type {?} */
const acceptArr = accept.split(',');
return acceptArr.reduce((/**
* @param {?} result
* @param {?} item
* @return {?}
*/
(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 {?}
*/
(fileSize, maximumSize) => {
if (maximumSize) {
return fileSize > 1000000 * maximumSize;
}
return false;
});
this.triggerSelectFiles = (/**
* @param {?} fileOptions
* @param {?} uploadOptions
* @return {?}
*/
(fileOptions, uploadOptions) => {
const { multiple, accept } = fileOptions;
return this._validateFiles(from(this.selectFiles({ multiple, accept })), accept, uploadOptions);
});
this.triggerDropFiles = (/**
* @param {?} fileOptions
* @param {?} uploadOptions
* @param {?} files
* @return {?}
*/
(fileOptions, uploadOptions, files) => {
const { multiple, accept } = fileOptions;
return this._validateFiles(new Observable((/**
* @param {?} observer
* @return {?}
*/
observer => observer.next(files))), accept, uploadOptions);
});
this.i18nText = this.i18n.getI18nText().upload;
this.i18nSubscription = this.i18n.langChange().subscribe((/**
* @param {?} data
* @return {?}
*/
(data) => {
this.i18nText = data.upload;
}));
}
/**
* @param {?} observable
* @param {?} accept
* @param {?} uploadOptions
* @return {?}
*/
_validateFiles(observable, accept, uploadOptions) {
return observable.pipe(mergeMap((/**
* @param {?} file
* @return {?}
*/
file => (/** @type {?} */ (file)))), map((/**
* @param {?} file
* @return {?}
*/
(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 {?}
*/
simulateClickEvent(input) {
/** @type {?} */
const 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 = () => [
{ type: I18nService }
];
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWZpbGVzLnV0aWxzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZGV2dWkvdXBsb2FkLyIsInNvdXJjZXMiOlsic2VsZWN0LWZpbGVzLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxRQUFRLE1BQU0sb0JBQW9CLENBQUM7QUFFMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0MsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQWlCLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczRCxNQUFNLE9BQU8sV0FBVzs7OztJQUt0QixZQUFvQixJQUFpQjtRQUFqQixTQUFJLEdBQUosSUFBSSxDQUFhO1FBT3JDLGdCQUFXOzs7O1FBQUcsQ0FBQyxFQUFDLFFBQVEsRUFBRSxNQUFNLEVBQWUsRUFBbUIsRUFBRTtZQUNsRSxPQUFPLElBQUksT0FBTzs7OztZQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7O3NCQUN2QixRQUFRLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUM7Z0JBQ3pELElBQUksUUFBUSxFQUFFO29CQUNaLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUNyQzs7c0JBQ0ssS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO2dCQUU3QyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7Z0JBQy9CLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztnQkFDN0IsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDO2dCQUU1QixLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxlQUFl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QUFhLENBQUM7UUFDL0MsR0FBRyxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BHLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FBQzs7O1lBN0ZGLFVBQVU7Ozs7WUFGYSxXQUFXOzs7O0lBSWpDLGdEQUFrQzs7SUFDbEMsbURBQXFDOztJQUNyQywrQkFBa0M7O0lBQ2xDLHVDQUErQjs7SUFRL0Isa0NBMkJDOztJQUVELHdDQVFDOztJQUVELHdDQUtDOztJQUVELHlDQUdDOztJQUdELHVDQUlDOzs7OztJQS9EVywyQkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZW5kc1dpdGggZnJvbSAnbG9kYXNoLWVzL2VuZHNXaXRoJztcclxuaW1wb3J0IHtJRmlsZU9wdGlvbnMsIElVcGxvYWRPcHRpb25zfSBmcm9tICcuL2ZpbGUtdXBsb2FkZXIudHlwZXMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCBtZXJnZU1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEkxOG5JbnRlcmZhY2UsIEkxOG5TZXJ2aWNlIH0gZnJvbSAnbmctZGV2dWkvaTE4bic7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RGaWxlcyB7XHJcbiAgTk9UX0FMTE9XRURfRklMRV9UWVBFX01TRzogc3RyaW5nO1xyXG4gIEJFWU9ORF9NQVhJTUFMX0ZJTEVfU0laRV9NU0c6IHN0cmluZztcclxuICBpMThuVGV4dDogSTE4bkludGVyZmFjZVsndXBsb2FkJ107XHJcbiAgaTE4blN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaTE4bjogSTE4blNlcnZpY2UpIHtcclxuICAgIHRoaXMuaTE4blRleHQgPSB0aGlzLmkxOG4uZ2V0STE4blRleHQoKS51cGxvYWQ7XHJcbiAgICB0aGlzLmkxOG5TdWJzY3JpcHRpb24gPSB0aGlzLmkxOG4ubGFuZ0NoYW5nZSgpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICB0aGlzLmkxOG5UZXh0ID0gZGF0YS51cGxvYWQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdEZpbGVzID0gKHttdWx0aXBsZSwgYWNjZXB0fTogSUZpbGVPcHRpb25zKTogUHJvbWlzZTxGaWxlW10+ID0+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBjb25zdCB0ZW1wTm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkLXVwbG9hZC10ZW1wJyk7XHJcbiAgICAgIGlmICh0ZW1wTm9kZSkge1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGVtcE5vZGUpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcclxuXHJcbiAgICAgIGlucHV0LnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcclxuICAgICAgaW5wdXQuc3R5bGUubGVmdCA9ICctMjAwMHB4JztcclxuICAgICAgaW5wdXQuc3R5bGUudG9wID0gJy0yMDAwcHgnO1xyXG5cclxuICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdpZCcsICdkLXVwbG9hZC10ZW1wJyk7XHJcbiAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICdmaWxlJyk7XHJcbiAgICAgIGlmIChtdWx0aXBsZSkge1xyXG4gICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnbXVsdGlwbGUnLCAnJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGFjY2VwdCkge1xyXG4gICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnYWNjZXB0JywgYWNjZXB0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZXZlbnQgPT4ge1xyXG4gICAgICAgIHJlc29sdmUoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5maWxlcykpO1xyXG4gICAgICB9KTtcclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpbnB1dCk7IC8vIEZpeCBjYW1wYXRhYmlsaXR5IGlzc3VlIHdpdGggSW50ZXJuZXQgRXhwbG9yZXIgMTFcclxuICAgICAgdGhpcy5zaW11bGF0ZUNsaWNrRXZlbnQoaW5wdXQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpc0FsbG93ZWRGaWxlVHlwZSA9IChhY2NlcHQ6IHN0cmluZywgZmlsZTogRmlsZSkgPT4ge1xyXG4gICAgaWYgKGFjY2VwdCkge1xyXG4gICAgICBjb25zdCBhY2NlcHRBcnIgPSBhY2NlcHQuc3BsaXQoJywnKTtcclxuICAgICAgcmV0dXJuIGFjY2VwdEFyci5yZWR1Y2UoKHJlc3VsdDogYm9vbGVhbiwgaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdCB8fCBmaWxlLnR5cGUuaW5kZXhPZihpdGVtLnJlcGxhY2UoL1tcXC4qXS9nLCAnJykpID4gLTEgfHwgZW5kc1dpdGgoZmlsZS5uYW1lLCBpdGVtKTtcclxuICAgICAgfSwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBiZXlvbmRNYXhpbWFsU2l6ZSA9IChmaWxlU2l6ZSwgbWF4aW11bVNpemUpID0+IHtcclxuICAgIGlmIChtYXhpbXVtU2l6ZSkge1xyXG4gICAgICByZXR1cm4gZmlsZVNpemUgPiAxMDAwMDAwICogbWF4aW11bVNpemU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyU2VsZWN0RmlsZXMgPSAoZmlsZU9wdGlvbnM6IElGaWxlT3B0aW9ucywgdXBsb2FkT3B0aW9uczogSVVwbG9hZE9wdGlvbnMpID0+IHtcclxuICAgIGNvbnN0IHttdWx0aXBsZSwgYWNjZXB0fSA9IGZpbGVPcHRpb25zO1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlRmlsZXMoZnJvbSh0aGlzLnNlbGVjdEZpbGVzKHttdWx0aXBsZSwgYWNjZXB0fSkpLCBhY2NlcHQsIHVwbG9hZE9wdGlvbnMpO1xyXG4gIH1cclxuXHJcblxyXG4gIHRyaWdnZXJEcm9wRmlsZXMgPSAgKGZpbGVPcHRpb25zOiBJRmlsZU9wdGlvbnMsIHVwbG9hZE9wdGlvbnM6IElVcGxvYWRPcHRpb25zLCBmaWxlczogYW55KSA9PiB7XHJcbiAgICBjb25zdCB7bXVsdGlwbGUsIGFjY2VwdH0gPSBmaWxlT3B0aW9ucztcclxuICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZUZpbGVzKG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IG9ic2VydmVyLm5leHQoZmlsZXMpKSwgYWNjZXB0LCB1cGxvYWRPcHRpb25zKTtcclxuXHJcbiAgfVxyXG5cclxuICBfdmFsaWRhdGVGaWxlcyhvYnNlcnZhYmxlLCBhY2NlcHQsIHVwbG9hZE9wdGlvbnMpIHtcclxuICAgIHJldHVybiBvYnNlcnZhYmxlLnBpcGUoXHJcbiAgICBtZXJnZU1hcChmaWxlID0+IDxhbnk+ZmlsZSksXHJcbiAgICBtYXAoKGZpbGUpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmlzQWxsb3dlZEZpbGVUeXBlKGFjY2VwdCwgPEZpbGU+ZmlsZSkpIHtcclxuICAgICAgICB0aGlzLk5PVF9BTExPV0VEX0ZJTEVfVFlQRV9NU0cgPSB0aGlzLmkxOG5UZXh0LmdldE5vdEFsbG93ZWRGaWxlVHlwZU1zZygoPEZpbGU+ZmlsZSkubmFtZSwgYWNjZXB0KTtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IodGhpcy5OT1RfQUxMT1dFRF9GSUxFX1RZUEVfTVNHKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuYmV5b25kTWF4aW1hbFNpemUoKDxGaWxlPmZpbGUpLnNpemUsIHVwbG9hZE9wdGlvbnMubWF4aW11bVNpemUpKSB7XHJcbiAgICAgICAgdGhpcy5CRVlPTkRfTUFYSU1BTF9GSUxFX1NJWkVfTVNHID0gdGhpcy5pMThuVGV4dC5nZXRCZXlvbmRNYXhpbWFsRmlsZVNpemVNc2coKDxGaWxlPmZpbGUpLnNpemUsIHVwbG9hZE9wdGlvbnMubWF4aW11bVNpemUpO1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLkJFWU9ORF9NQVhJTUFMX0ZJTEVfU0laRV9NU0cpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmaWxlO1xyXG4gICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzaW11bGF0ZUNsaWNrRXZlbnQoaW5wdXQpIHtcclxuICAgIGNvbnN0IGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdNb3VzZUV2ZW50cycpO1xyXG4gICAgZXZ0LmluaXRNb3VzZUV2ZW50KCdjbGljaycsIHRydWUsIHRydWUsIHdpbmRvdywgMSwgMCwgMCwgMCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDAsIG51bGwpO1xyXG4gICAgaW5wdXQuZGlzcGF0Y2hFdmVudChldnQpO1xyXG4gIH1cclxufVxyXG4iXX0=