UNPKG

angular-material-fileupload

Version:
240 lines 19.2 kB
/** * @fileoverview added by tsickle * Generated from: lib/mat-file-upload/mat-file-upload.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ChangeDetectionStrategy, Input, Output, EventEmitter, } from "@angular/core"; import { ReplaySubject, BehaviorSubject, Subscription } from "rxjs"; import { HttpClient, HttpEventType, } from "@angular/common/http"; import { MatFileUploadQueueService } from "../mat-file-upload-queue/mat-file-upload-queue.service"; var MatFileUploadComponent = /** @class */ (function () { function MatFileUploadComponent(HttpClient, matFileUploadQueueService) { this.HttpClient = HttpClient; this.matFileUploadQueueService = matFileUploadQueueService; this.uploadProgressSubject = new ReplaySubject(); this.uploadProgress$ = this.uploadProgressSubject.asObservable(); this.uploadInProgressSubject = new BehaviorSubject(false); this.uploadInProgress$ = this.uploadInProgressSubject.asObservable(); this.subs = new Subscription(); this.fileUploadAriaLabel = "File Upload"; this.cancelAriaLabel = "Cancel File Upload"; /** * Output */ this.removeEvent = new EventEmitter(); this.onUpload = new EventEmitter(); /** @type {?} */ var queueInput = this.matFileUploadQueueService.getInputValue(); if (queueInput) { this.httpUrl = this.httpUrl || queueInput.httpUrl; this.httpRequestHeaders = this.httpRequestHeaders || queueInput.httpRequestHeaders; this.httpRequestParams = this.httpRequestParams || queueInput.httpRequestParams; this.fileAlias = this.fileAlias || queueInput.fileAlias; } } Object.defineProperty(MatFileUploadComponent.prototype, "file", { get: /** * @return {?} */ function () { return this._file; }, set: /** * @param {?} file * @return {?} */ function (file) { this._file = file; }, enumerable: true, configurable: true }); Object.defineProperty(MatFileUploadComponent.prototype, "id", { get: /** * @return {?} */ function () { return this._id; }, set: /** * @param {?} id * @return {?} */ function (id) { this._id = id; }, enumerable: true, configurable: true }); /** * @return {?} */ MatFileUploadComponent.prototype.ngOnInit = /** * @return {?} */ function () { this.uploadProgressSubject.next({ progressPercentage: 0, loaded: 0, total: this._file.size, }); }; /** * @return {?} */ MatFileUploadComponent.prototype.upload = /** * @return {?} */ function () { var _this = this; this.uploadInProgressSubject.next(true); // How to set the alias? /** @type {?} */ var formData = new FormData(); formData.set(this.fileAlias, this._file, this._file.name); this.subs.add(this.HttpClient.post(this.httpUrl, formData, { headers: this.httpRequestHeaders, observe: "events", params: this.httpRequestParams, reportProgress: true, responseType: "json", }).subscribe((/** * @param {?} event * @return {?} */ function (event) { if (event.type === HttpEventType.UploadProgress) { _this.uploadProgressSubject.next({ progressPercentage: Math.floor((event.loaded * 100) / event.total), loaded: event.loaded, total: event.total, }); } _this.onUpload.emit({ file: _this._file, event: event }); }), (/** * @param {?} error * @return {?} */ function (error) { if (_this.fileUploadSubscription) { _this.fileUploadSubscription.unsubscribe(); } _this.uploadInProgressSubject.next(false); _this.onUpload.emit({ file: _this._file, event: event }); }), (/** * @return {?} */ function () { return _this.uploadInProgressSubject.next(false); }))); }; /** * @return {?} */ MatFileUploadComponent.prototype.remove = /** * @return {?} */ function () { this.subs.unsubscribe(); this.removeEvent.emit(this); }; /** * @return {?} */ MatFileUploadComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { this.subs.unsubscribe(); }; MatFileUploadComponent.decorators = [ { type: Component, args: [{ selector: "mat-file-upload", template: "<ng-container *ngIf=\"uploadProgress$ | async as uploadProgress\">\n <mat-card>\n <span class=\"file-summary\">{{ file.name }}({{ file.size | bytes }})</span>\n <div class=\"upload-progress\">\n <mat-progress-bar\n [value]=\"uploadProgress.progressPercentage\"\n ></mat-progress-bar>\n\n <button\n mat-icon-button\n [attr.aria-label]=\"fileUploadAriaLabel\"\n (click)=\"upload()\"\n [disabled]=\"uploadInProgress$ | async\"\n >\n <mat-icon>file_upload</mat-icon>\n </button>\n\n <button\n mat-icon-button\n [attr.aria-label]=\"cancelAriaLabel\"\n (click)=\"remove()\"\n >\n <mat-icon>cancel</mat-icon>\n </button>\n </div>\n <span class=\"file-summary\">{{ uploadProgress.progressPercentage }}%</span>\n <span>\n {{ uploadProgress.loaded | bytes }} of\n {{ uploadProgress.total | bytes }}</span\n >\n </mat-card>\n</ng-container>\n", changeDetection: ChangeDetectionStrategy.OnPush, styles: [".file-summary{font-size:.85rem}.upload-progress{display:flex;align-content:center;align-items:center;height:10px}.upload-progress ::ng-deep .mat-progress-bar .mat-progress-bar-element{transition:none}"] }] } ]; /** @nocollapse */ MatFileUploadComponent.ctorParameters = function () { return [ { type: HttpClient }, { type: MatFileUploadQueueService } ]; }; MatFileUploadComponent.propDecorators = { httpUrl: [{ type: Input }], httpRequestHeaders: [{ type: Input }], httpRequestParams: [{ type: Input }], fileAlias: [{ type: Input }], file: [{ type: Input }], id: [{ type: Input }], fileUploadAriaLabel: [{ type: Input }], cancelAriaLabel: [{ type: Input }], removeEvent: [{ type: Output }], onUpload: [{ type: Output }] }; return MatFileUploadComponent; }()); export { MatFileUploadComponent }; if (false) { /** * @type {?} * @private */ MatFileUploadComponent.prototype.uploadProgressSubject; /** @type {?} */ MatFileUploadComponent.prototype.uploadProgress$; /** * @type {?} * @private */ MatFileUploadComponent.prototype.uploadInProgressSubject; /** @type {?} */ MatFileUploadComponent.prototype.uploadInProgress$; /** @type {?} */ MatFileUploadComponent.prototype.subs; /** @type {?} */ MatFileUploadComponent.prototype.httpUrl; /** @type {?} */ MatFileUploadComponent.prototype.httpRequestHeaders; /** @type {?} */ MatFileUploadComponent.prototype.httpRequestParams; /** @type {?} */ MatFileUploadComponent.prototype.fileAlias; /** * @type {?} * @private */ MatFileUploadComponent.prototype._file; /** * @type {?} * @private */ MatFileUploadComponent.prototype._id; /** @type {?} */ MatFileUploadComponent.prototype.fileUploadAriaLabel; /** @type {?} */ MatFileUploadComponent.prototype.cancelAriaLabel; /** * Output * @type {?} */ MatFileUploadComponent.prototype.removeEvent; /** @type {?} */ MatFileUploadComponent.prototype.onUpload; /** * @type {?} * @private */ MatFileUploadComponent.prototype.fileUploadSubscription; /** * @type {?} * @private */ MatFileUploadComponent.prototype.HttpClient; /** * @type {?} * @private */ MatFileUploadComponent.prototype.matFileUploadQueueService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LWZpbGUtdXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItbWF0ZXJpYWwtZmlsZXVwbG9hZC8iLCJzb3VyY2VzIjpbImxpYi9tYXQtZmlsZS11cGxvYWQvbWF0LWZpbGUtdXBsb2FkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsdUJBQXVCLEVBRXZCLEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRSxPQUFPLEVBR0wsVUFBVSxFQUNWLGFBQWEsR0FDZCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBR25HO0lBbUVFLGdDQUNVLFVBQXNCLEVBQ3RCLHlCQUFvRDtRQURwRCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMkI7UUE5RHRELDBCQUFxQixHQUFHLElBQUksYUFBYSxFQUFtQixDQUFDO1FBQ3JFLG9CQUFlLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXBELDRCQUF1QixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3RFLHNCQUFpQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV6RCxTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQTJDakMsd0JBQW1CLEdBQUcsYUFBYSxDQUFDO1FBR3BDLG9CQUFlLEdBQUcsb0JBQW9CLENBQUM7Ozs7UUFHN0IsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBMEIsQ0FBQztRQUN6RCxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQzs7WUFR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LGlEQUN1Qzs7Ozs7SUFHdkMsNkNBQW1FOztJQUNuRSwwQ0FBd0M7Ozs7O0lBRXhDLHdEQUFvQzs7Ozs7SUFHbEMsNENBQThCOzs7OztJQUM5QiwyREFBNEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIE9uRGVzdHJveSxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgUmVwbGF5U3ViamVjdCwgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtcbiAgSHR0cEhlYWRlcnMsXG4gIEh0dHBQYXJhbXMsXG4gIEh0dHBDbGllbnQsXG4gIEh0dHBFdmVudFR5cGUsXG59IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHsgTWF0RmlsZVVwbG9hZFF1ZXVlU2VydmljZSB9IGZyb20gXCIuLi9tYXQtZmlsZS11cGxvYWQtcXVldWUvbWF0LWZpbGUtdXBsb2FkLXF1ZXVlLnNlcnZpY2VcIjtcbmltcG9ydCB7IElVcGxvYWRQcm9ncmVzcyB9IGZyb20gXCIuLi9tYXQtZmlsZS11cGxvYWQudHlwZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwibWF0LWZpbGUtdXBsb2FkXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vbWF0LWZpbGUtdXBsb2FkLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9tYXQtZmlsZS11cGxvYWQuY29tcG9uZW50LnNjc3NcIl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNYXRGaWxlVXBsb2FkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHVwbG9hZFByb2dyZXNzU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PElVcGxvYWRQcm9ncmVzcz4oKTtcbiAgdXBsb2FkUHJvZ3Jlc3MkID0gdGhpcy51cGxvYWRQcm9ncmVzc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSB1cGxvYWRJblByb2dyZXNzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICB1cGxvYWRJblByb2dyZXNzJCA9IHRoaXMudXBsb2FkSW5Qcm9ncmVzc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHVibGljIHN1YnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgLyogSHR0cCByZXF1ZXN0IGlucHV0IGJpbmRpbmdzICovXG4gIEBJbnB1dCgpXG4gIGh0dHBVcmw6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBodHRwUmVxdWVzdEhlYWRlcnM6XG4gICAgfCBIdHRwSGVhZGVyc1xuICAgIHwge1xuICAgICAgICBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICAgIH07XG5cbiAgQElucHV0KClcbiAgaHR0cFJlcXVlc3RQYXJhbXM6XG4gICAgfCBIdHRwUGFyYW1zXG4gICAgfCB7XG4gICAgICAgIFtwYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgICB9O1xuXG4gIEBJbnB1dCgpXG4gIGZpbGVBbGlhczogc3RyaW5nO1xuXG4gIHByaXZhdGUgX2ZpbGU6IGFueTtcbiAgcHJpdmF0ZSBfaWQ6IG51bWJlcjtcblxuICBASW5wdXQoKVxuICBnZXQgZmlsZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9maWxlO1xuICB9XG4gIHNldCBmaWxlKGZpbGU6IGFueSkge1xuICAgIHRoaXMuX2ZpbGUgPSBmaWxlO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGlkKGlkOiBudW1iZXIpIHtcbiAgICB0aGlzLl9pZCA9IGlkO1xuICB9XG4gIGdldCBpZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9pZDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGZpbGVVcGxvYWRBcmlhTGFiZWwgPSBcIkZpbGUgVXBsb2FkXCI7XG5cbiAgQElucHV0KClcbiAgY2FuY2VsQXJpYUxhYmVsID0gXCJDYW5jZWwgRmlsZSBVcGxvYWRcIjtcblxuICAvKiogT3V0cHV0ICAqL1xuICBAT3V0cHV0KCkgcmVtb3ZlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPE1hdEZpbGVVcGxvYWRDb21wb25lbnQ+KCk7XG4gIEBPdXRwdXQoKSBvblVwbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwcml2YXRlIGZpbGVVcGxvYWRTdWJzY3JpcHRpb246IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIEh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBtYXRGaWxlVXBsb2FkUXVldWVTZXJ2aWNlOiBNYXRGaWxlVXBsb2FkUXVldWVTZXJ2aWNlXG4gICkge1xuICAgIGNvbnN0IHF1ZXVlSW5wdXQgPSB0aGlzLm1hdEZpbGVVcGxvYWRRdWV1ZVNlcnZpY2UuZ2V0SW5wdXRWYWx1ZSgpO1xuICAgIGlmIChxdWV1ZUlucHV0KSB7XG4gICAgICB0aGlzLmh0dHBVcmwgPSB0aGlzLmh0dHBVcmwgfHwgcXVldWVJbnB1dC5odHRwVXJsO1xuICAgICAgdGhpcy5odHRwUmVxdWVzdEhlYWRlcnMgPVxuICAgICAgICB0aGlzLmh0dHBSZXF1ZXN0SGVhZGVycyB8fCBxdWV1ZUlucHV0Lmh0dHBSZXF1ZXN0SGVhZGVycztcbiAgICAgIHRoaXMuaHR0cFJlcXVlc3RQYXJhbXMgPVxuICAgICAgICB0aGlzLmh0dHBSZXF1ZXN0UGFyYW1zIHx8IHF1ZXVlSW5wdXQuaHR0cFJlcXVlc3RQYXJhbXM7XG4gICAgICB0aGlzLmZpbGVBbGlhcyA9IHRoaXMuZmlsZUFsaWFzIHx8IHF1ZXVlSW5wdXQuZmlsZUFsaWFzO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudXBsb2FkUHJvZ3Jlc3NTdWJqZWN0Lm5leHQoe1xuICAgICAgcHJvZ3Jlc3NQZXJjZW50YWdlOiAwLFxuICAgICAgbG9hZGVkOiAwLFxuICAgICAgdG90YWw6IHRoaXMuX2ZpbGUuc2l6ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy51cGxvYWRJblByb2dyZXNzU3ViamVjdC5uZXh0KHRydWUpO1xuICAgIC8vIEhvdyB0byBzZXQgdGhlIGFsaWFzP1xuICAgIGxldCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGZvcm1EYXRhLnNldCh0aGlzLmZpbGVBbGlhcywgdGhpcy5fZmlsZSwgdGhpcy5fZmlsZS5uYW1lKTtcbiAgICB0aGlzLnN1YnMuYWRkKFxuICAgICAgdGhpcy5IdHRwQ2xpZW50LnBvc3QodGhpcy5odHRwVXJsLCBmb3JtRGF0YSwge1xuICAgICAgICBoZWFkZXJzOiB0aGlzLmh0dHBSZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgb2JzZXJ2ZTogXCJldmVudHNcIixcbiAgICAgICAgcGFyYW1zOiB0aGlzLmh0dHBSZXF1ZXN0UGFyYW1zLFxuICAgICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiBcImpzb25cIixcbiAgICAgIH0pLnN1YnNjcmliZShcbiAgICAgICAgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzcykge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRQcm9ncmVzc1N1YmplY3QubmV4dCh7XG4gICAgICAgICAgICAgIHByb2dyZXNzUGVyY2VudGFnZTogTWF0aC5mbG9vcihcbiAgICAgICAgICAgICAgICAoZXZlbnQubG9hZGVkICogMTAwKSAvIGV2ZW50LnRvdGFsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGxvYWRlZDogZXZlbnQubG9hZGVkLFxuICAgICAgICAgICAgICB0b3RhbDogZXZlbnQudG90YWwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5vblVwbG9hZC5lbWl0KHsgZmlsZTogdGhpcy5fZmlsZSwgZXZlbnQ6IGV2ZW50IH0pO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmZpbGVVcGxvYWRTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZVVwbG9hZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnVwbG9hZEluUHJvZ3Jlc3NTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMub25VcGxvYWQuZW1pdCh7IGZpbGU6IHRoaXMuX2ZpbGUsIGV2ZW50OiBldmVudCB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4gdGhpcy51cGxvYWRJblByb2dyZXNzU3ViamVjdC5uZXh0KGZhbHNlKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlKCk6IHZvaWQge1xuICAgIHRoaXMuc3Vicy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucmVtb3ZlRXZlbnQuZW1pdCh0aGlzKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3Vicy51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iXX0=