UNPKG

angular-material-fileupload

Version:
221 lines 18.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"; export class MatFileUploadComponent { /** * @param {?} HttpClient * @param {?} matFileUploadQueueService */ constructor(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 {?} */ const 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; } } /** * @return {?} */ get file() { return this._file; } /** * @param {?} file * @return {?} */ set file(file) { this._file = file; } /** * @param {?} id * @return {?} */ set id(id) { this._id = id; } /** * @return {?} */ get id() { return this._id; } /** * @return {?} */ ngOnInit() { this.uploadProgressSubject.next({ progressPercentage: 0, loaded: 0, total: this._file.size, }); } /** * @return {?} */ upload() { this.uploadInProgressSubject.next(true); // How to set the alias? /** @type {?} */ let 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 {?} */ (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 {?} */ (error) => { if (this.fileUploadSubscription) { this.fileUploadSubscription.unsubscribe(); } this.uploadInProgressSubject.next(false); this.onUpload.emit({ file: this._file, event: event }); }), (/** * @return {?} */ () => this.uploadInProgressSubject.next(false)))); } /** * @return {?} */ remove() { this.subs.unsubscribe(); this.removeEvent.emit(this); } /** * @return {?} */ ngOnDestroy() { 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 = () => [ { 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 }] }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LWZpbGUtdXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItbWF0ZXJpYWwtZmlsZXVwbG9hZC8iLCJzb3VyY2VzIjpbImxpYi9tYXQtZmlsZS11cGxvYWQvbWF0LWZpbGUtdXBsb2FkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsdUJBQXVCLEVBRXZCLEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRSxPQUFPLEVBR0wsVUFBVSxFQUNWLGFBQWEsR0FDZCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBU25HLE1BQU0sT0FBTyxzQkFBc0I7Ozs7O0lBNkRqQyxZQUNVLFVBQXNCLEVBQ3RCLHlCQUFvRDtRQURwRCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMkI7UUE5RHRELDBCQUFxQixHQUFHLElBQUksYUFBYSxFQUFtQixDQUFDO1FBQ3JFLG9CQUFlLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXBELDRCQUF1QixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3RFLHNCQUFpQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV6RCxTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQTJDakMsd0JBQW1CLEdBQUcsYUFBYSxDQUFDO1FBR3BDLG9CQUFlLEdBQUcsb0JBQW9CLENBQUM7Ozs7UUFHN0IsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBMEIsQ0FBQztRQUN6RCxhQUFRLEdBQUcsSUFB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Qyw0Q0FBOEI7Ozs7O0lBQzlCLDJEQUE0RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgT25EZXN0cm95LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBSZXBsYXlTdWJqZWN0LCBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge1xuICBIdHRwSGVhZGVycyxcbiAgSHR0cFBhcmFtcyxcbiAgSHR0cENsaWVudCxcbiAgSHR0cEV2ZW50VHlwZSxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQgeyBNYXRGaWxlVXBsb2FkUXVldWVTZXJ2aWNlIH0gZnJvbSBcIi4uL21hdC1maWxlLXVwbG9hZC1xdWV1ZS9tYXQtZmlsZS11cGxvYWQtcXVldWUuc2VydmljZVwiO1xuaW1wb3J0IHsgSVVwbG9hZFByb2dyZXNzIH0gZnJvbSBcIi4uL21hdC1maWxlLXVwbG9hZC50eXBlXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJtYXQtZmlsZS11cGxvYWRcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9tYXQtZmlsZS11cGxvYWQuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL21hdC1maWxlLXVwbG9hZC5jb21wb25lbnQuc2Nzc1wiXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE1hdEZpbGVVcGxvYWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgdXBsb2FkUHJvZ3Jlc3NTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8SVVwbG9hZFByb2dyZXNzPigpO1xuICB1cGxvYWRQcm9ncmVzcyQgPSB0aGlzLnVwbG9hZFByb2dyZXNzU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIHVwbG9hZEluUHJvZ3Jlc3NTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHVwbG9hZEluUHJvZ3Jlc3MkID0gdGhpcy51cGxvYWRJblByb2dyZXNzU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwdWJsaWMgc3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAvKiBIdHRwIHJlcXVlc3QgaW5wdXQgYmluZGluZ3MgKi9cbiAgQElucHV0KClcbiAgaHR0cFVybDogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIGh0dHBSZXF1ZXN0SGVhZGVyczpcbiAgICB8IEh0dHBIZWFkZXJzXG4gICAgfCB7XG4gICAgICAgIFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgICAgfTtcblxuICBASW5wdXQoKVxuICBodHRwUmVxdWVzdFBhcmFtczpcbiAgICB8IEh0dHBQYXJhbXNcbiAgICB8IHtcbiAgICAgICAgW3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICAgIH07XG5cbiAgQElucHV0KClcbiAgZmlsZUFsaWFzOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBfZmlsZTogYW55O1xuICBwcml2YXRlIF9pZDogbnVtYmVyO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBmaWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGU7XG4gIH1cbiAgc2V0IGZpbGUoZmlsZTogYW55KSB7XG4gICAgdGhpcy5fZmlsZSA9IGZpbGU7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgaWQoaWQ6IG51bWJlcikge1xuICAgIHRoaXMuX2lkID0gaWQ7XG4gIH1cbiAgZ2V0IGlkKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2lkO1xuICB9XG5cbiAgQElucHV0KClcbiAgZmlsZVVwbG9hZEFyaWFMYWJlbCA9IFwiRmlsZSBVcGxvYWRcIjtcblxuICBASW5wdXQoKVxuICBjYW5jZWxBcmlhTGFiZWwgPSBcIkNhbmNlbCBGaWxlIFVwbG9hZFwiO1xuXG4gIC8qKiBPdXRwdXQgICovXG4gIEBPdXRwdXQoKSByZW1vdmVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8TWF0RmlsZVVwbG9hZENvbXBvbmVudD4oKTtcbiAgQE91dHB1dCgpIG9uVXBsb2FkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHByaXZhdGUgZmlsZVVwbG9hZFN1YnNjcmlwdGlvbjogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgSHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIG1hdEZpbGVVcGxvYWRRdWV1ZVNlcnZpY2U6IE1hdEZpbGVVcGxvYWRRdWV1ZVNlcnZpY2VcbiAgKSB7XG4gICAgY29uc3QgcXVldWVJbnB1dCA9IHRoaXMubWF0RmlsZVVwbG9hZFF1ZXVlU2VydmljZS5nZXRJbnB1dFZhbHVlKCk7XG4gICAgaWYgKHF1ZXVlSW5wdXQpIHtcbiAgICAgIHRoaXMuaHR0cFVybCA9IHRoaXMuaHR0cFVybCB8fCBxdWV1ZUlucHV0Lmh0dHBVcmw7XG4gICAgICB0aGlzLmh0dHBSZXF1ZXN0SGVhZGVycyA9XG4gICAgICAgIHRoaXMuaHR0cFJlcXVlc3RIZWFkZXJzIHx8IHF1ZXVlSW5wdXQuaHR0cFJlcXVlc3RIZWFkZXJzO1xuICAgICAgdGhpcy5odHRwUmVxdWVzdFBhcmFtcyA9XG4gICAgICAgIHRoaXMuaHR0cFJlcXVlc3RQYXJhbXMgfHwgcXVldWVJbnB1dC5odHRwUmVxdWVzdFBhcmFtcztcbiAgICAgIHRoaXMuZmlsZUFsaWFzID0gdGhpcy5maWxlQWxpYXMgfHwgcXVldWVJbnB1dC5maWxlQWxpYXM7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy51cGxvYWRQcm9ncmVzc1N1YmplY3QubmV4dCh7XG4gICAgICBwcm9ncmVzc1BlcmNlbnRhZ2U6IDAsXG4gICAgICBsb2FkZWQ6IDAsXG4gICAgICB0b3RhbDogdGhpcy5fZmlsZS5zaXplLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHVwbG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwbG9hZEluUHJvZ3Jlc3NTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgLy8gSG93IHRvIHNldCB0aGUgYWxpYXM/XG4gICAgbGV0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgZm9ybURhdGEuc2V0KHRoaXMuZmlsZUFsaWFzLCB0aGlzLl9maWxlLCB0aGlzLl9maWxlLm5hbWUpO1xuICAgIHRoaXMuc3Vicy5hZGQoXG4gICAgICB0aGlzLkh0dHBDbGllbnQucG9zdCh0aGlzLmh0dHBVcmwsIGZvcm1EYXRhLCB7XG4gICAgICAgIGhlYWRlcnM6IHRoaXMuaHR0cFJlcXVlc3RIZWFkZXJzLFxuICAgICAgICBvYnNlcnZlOiBcImV2ZW50c1wiLFxuICAgICAgICBwYXJhbXM6IHRoaXMuaHR0cFJlcXVlc3RQYXJhbXMsXG4gICAgICAgIHJlcG9ydFByb2dyZXNzOiB0cnVlLFxuICAgICAgICByZXNwb25zZVR5cGU6IFwianNvblwiLFxuICAgICAgfSkuc3Vic2NyaWJlKFxuICAgICAgICAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChldmVudC50eXBlID09PSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzKSB7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZFByb2dyZXNzU3ViamVjdC5uZXh0KHtcbiAgICAgICAgICAgICAgcHJvZ3Jlc3NQZXJjZW50YWdlOiBNYXRoLmZsb29yKFxuICAgICAgICAgICAgICAgIChldmVudC5sb2FkZWQgKiAxMDApIC8gZXZlbnQudG90YWxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgbG9hZGVkOiBldmVudC5sb2FkZWQsXG4gICAgICAgICAgICAgIHRvdGFsOiBldmVudC50b3RhbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm9uVXBsb2FkLmVtaXQoeyBmaWxlOiB0aGlzLl9maWxlLCBldmVudDogZXZlbnQgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuZmlsZVVwbG9hZFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5maWxlVXBsb2FkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudXBsb2FkSW5Qcm9ncmVzc1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5vblVwbG9hZC5lbWl0KHsgZmlsZTogdGhpcy5fZmlsZSwgZXZlbnQ6IGV2ZW50IH0pO1xuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB0aGlzLnVwbG9hZEluUHJvZ3Jlc3NTdWJqZWN0Lm5leHQoZmFsc2UpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmUoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5yZW1vdmVFdmVudC5lbWl0KHRoaXMpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdWJzLnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiJdfQ==