angular-material-fileupload
Version:
A fileupload component based on angular-material design
201 lines • 16.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/mat-file-upload-queue/mat-file-upload-queue.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, ChangeDetectionStrategy, ContentChildren, forwardRef, QueryList, Input, ChangeDetectorRef, } from "@angular/core";
import { merge } from "rxjs";
import { HttpHeaders, HttpParams } from "@angular/common/http";
import { startWith } from "rxjs/operators";
import { MatFileUploadQueueService } from "./mat-file-upload-queue.service";
import { MatFileUploadComponent } from "../mat-file-upload/mat-file-upload.component";
export class MatFileUploadQueueComponent {
/**
* @param {?} matFileUploadQueueService
* @param {?} changeDetectorRef
*/
constructor(matFileUploadQueueService, changeDetectorRef) {
this.matFileUploadQueueService = matFileUploadQueueService;
this.changeDetectorRef = changeDetectorRef;
this.files = [];
this.httpRequestHeaders = new HttpHeaders();
this.httpRequestParams = new HttpParams();
this.fileAlias = "file";
this.uploadAllColor = "primary";
this.uploadAllLabel = "Upload All";
this.removeAllColor = "primary";
this.removeAllLabel = "Remove All";
}
/**
* Combined stream of all of the file upload remove change events.
* @return {?}
*/
get fileUploadRemoveEvents() {
return merge(...this.fileUploads.map((/**
* @param {?} fileUpload
* @return {?}
*/
(fileUpload) => fileUpload.removeEvent)));
}
/**
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
this.matFileUploadQueueService.initialize({
httpUrl: changes["httpUrl"] ? changes["httpUrl"].currentValue : undefined,
httpRequestHeaders: changes["httpRequestHeaders"]
? changes["httpRequestHeaders"].currentValue
: undefined,
httpRequestParams: changes["httpRequestParams"]
? changes["httpRequestParams"].currentValue
: undefined,
fileAlias: changes["fileAlias"]
? changes["fileAlias"].currentValue
: undefined,
});
}
/**
* @return {?}
*/
ngAfterViewInit() {
// When the list changes, re-subscribe
this._changeSubscription = this.fileUploads.changes
.pipe(startWith(null))
.subscribe((/**
* @return {?}
*/
() => {
if (this._fileRemoveSubscription) {
this._fileRemoveSubscription.unsubscribe();
}
this._listenTofileRemoved();
}));
}
/**
* @private
* @return {?}
*/
_listenTofileRemoved() {
this._fileRemoveSubscription = this.fileUploadRemoveEvents.subscribe((/**
* @param {?} event
* @return {?}
*/
(event) => {
this.files.splice(event.id, 1);
this.changeDetectorRef.markForCheck();
}));
}
/**
* @param {?} file
* @return {?}
*/
add(file) {
this.files.push(file);
this.changeDetectorRef.markForCheck();
}
/**
* @return {?}
*/
uploadAll() {
this.fileUploads.forEach((/**
* @param {?} fileUpload
* @return {?}
*/
(fileUpload) => {
fileUpload.upload();
}));
}
/**
* @return {?}
*/
removeAll() {
this.files.splice(0, this.files.length);
this.changeDetectorRef.markForCheck();
}
/**
* @return {?}
*/
ngOnDestroy() {
if (this._changeSubscription)
this._changeSubscription.unsubscribe();
if (this._fileRemoveSubscription)
this._fileRemoveSubscription.unsubscribe();
if (this.files) {
this.removeAll();
}
}
}
MatFileUploadQueueComponent.decorators = [
{ type: Component, args: [{
selector: "mat-file-upload-queue",
template: "<ng-content></ng-content>\n<br />\n<button\n mat-raised-button\n [color]=\"uploadAllColor\"\n *ngIf=\"files.length > 0\"\n (click)=\"uploadAll()\"\n>\n {{ uploadAllLabel }}\n</button>\n<button\n mat-raised-button\n [color]=\"removeAllColor\"\n *ngIf=\"files.length > 0\"\n (click)=\"removeAll()\"\n>\n {{ removeAllLabel }}\n</button>\n",
changeDetection: ChangeDetectionStrategy.OnPush,
providers: [MatFileUploadQueueService],
styles: [""]
}] }
];
/** @nocollapse */
MatFileUploadQueueComponent.ctorParameters = () => [
{ type: MatFileUploadQueueService },
{ type: ChangeDetectorRef }
];
MatFileUploadQueueComponent.propDecorators = {
fileUploads: [{ type: ContentChildren, args: [forwardRef((/**
* @return {?}
*/
() => MatFileUploadComponent)),] }],
httpUrl: [{ type: Input }],
httpRequestHeaders: [{ type: Input }],
httpRequestParams: [{ type: Input }],
fileAlias: [{ type: Input }],
uploadAllColor: [{ type: Input }],
uploadAllLabel: [{ type: Input }],
removeAllColor: [{ type: Input }],
removeAllLabel: [{ type: Input }]
};
if (false) {
/** @type {?} */
MatFileUploadQueueComponent.prototype.fileUploads;
/**
* Subscription to remove changes in files.
* @type {?}
* @private
*/
MatFileUploadQueueComponent.prototype._fileRemoveSubscription;
/**
* Subscription to changes in the files.
* @type {?}
* @private
*/
MatFileUploadQueueComponent.prototype._changeSubscription;
/** @type {?} */
MatFileUploadQueueComponent.prototype.files;
/** @type {?} */
MatFileUploadQueueComponent.prototype.httpUrl;
/** @type {?} */
MatFileUploadQueueComponent.prototype.httpRequestHeaders;
/** @type {?} */
MatFileUploadQueueComponent.prototype.httpRequestParams;
/** @type {?} */
MatFileUploadQueueComponent.prototype.fileAlias;
/** @type {?} */
MatFileUploadQueueComponent.prototype.uploadAllColor;
/** @type {?} */
MatFileUploadQueueComponent.prototype.uploadAllLabel;
/** @type {?} */
MatFileUploadQueueComponent.prototype.removeAllColor;
/** @type {?} */
MatFileUploadQueueComponent.prototype.removeAllLabel;
/**
* @type {?}
* @private
*/
MatFileUploadQueueComponent.prototype.matFileUploadQueueService;
/**
* @type {?}
* @private
*/
MatFileUploadQueueComponent.prototype.changeDetectorRef;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LWZpbGUtdXBsb2FkLXF1ZXVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItbWF0ZXJpYWwtZmlsZXVwbG9hZC8iLCJzb3VyY2VzIjpbImxpYi9tYXQtZmlsZS11cGxvYWQtcXVldWUvbWF0LWZpbGUtdXBsb2FkLXF1ZXVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsdUJBQXVCLEVBQ3ZCLGVBQWUsRUFDZixVQUFVLEVBR1YsU0FBUyxFQUVULEtBQUssRUFDTCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUE0QixLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFTdEYsTUFBTSxPQUFPLDJCQUEyQjs7Ozs7SUFrQ3RDLFlBQ1UseUJBQW9ELEVBQ3BELGlCQUFvQztRQURwQyw4QkFBeUIsR0FBekIseUJBQXlCLENBQTJCO1FBQ3BELHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFuQnZDLFVBQUssR0FBZSxFQUFFLENBQUM7UUEyQjlCLHVCQUFrQixHQUlWLElBQUksV0FBVyxFQUFFLENBQUM7UUFHMUIsc0JBQWlCLEdBSVQsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUd6QixjQUFTLEdBQVcsTUFBTSxDQUFDO1FBRzNCLG1CQUFjLEdBQUcsU0FBUyxDQUFDO1FBRzNCLG1CQUFjLEdBQUcsWUFBWSxDQUFDO1FBRzlCLG1CQUFjLEdBQUcsU0FBUyxDQUFDO1FBRzNCLG1CQUFjLEdBQUcsWUFBWSxD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QUssRUFBRTtZQUNkLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNsQjtJQUNILENBQUM7OztZQTVIRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtnQkFDakMscVdBQXFEO2dCQUVyRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtnQkFDL0MsU0FBUyxFQUFFLENBQUMseUJBQXlCLENBQUM7O2FBQ3ZDOzs7O1lBVFEseUJBQXlCO1lBTGhDLGlCQUFpQjs7OzBCQWdCaEIsZUFBZSxTQUFDLFVBQVU7OztnQkFBQyxHQUFHLEVBQUUsQ0FBQyxzQkFBc0IsRUFBQztzQkF1Q3hELEtBQUs7aUNBR0wsS0FBSztnQ0FPTCxLQUFLO3dCQU9MLEtBQUs7NkJBR0wsS0FBSzs2QkFHTCxLQUFLOzZCQUdMLEtBQUs7NkJBR0wsS0FBSzs7OztJQXBFTixrREFDK0M7Ozs7OztJQUcvQyw4REFBcUQ7Ozs7OztJQUdyRCwwREFBMEM7O0lBUzFDLDRDQUE4Qjs7SUF1QjlCLDhDQUNnQjs7SUFFaEIseURBSzBCOztJQUUxQix3REFLeUI7O0lBRXpCLGdEQUMyQjs7SUFFM0IscURBQzJCOztJQUUzQixxREFDOEI7O0lBRTlCLHFEQUMyQjs7SUFFM0IscURBQzhCOzs7OztJQW5DNUIsZ0VBQTREOzs7OztJQUM1RCx3REFBNEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIGZvcndhcmRSZWYsXG4gIE9uRGVzdHJveSxcbiAgT25DaGFuZ2VzLFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIElucHV0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgT2JzZXJ2YWJsZSwgbWVyZ2UgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7IHN0YXJ0V2l0aCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgTWF0RmlsZVVwbG9hZFF1ZXVlU2VydmljZSB9IGZyb20gXCIuL21hdC1maWxlLXVwbG9hZC1xdWV1ZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBNYXRGaWxlVXBsb2FkQ29tcG9uZW50IH0gZnJvbSBcIi4uL21hdC1maWxlLXVwbG9hZC9tYXQtZmlsZS11cGxvYWQuY29tcG9uZW50XCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJtYXQtZmlsZS11cGxvYWQtcXVldWVcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9tYXQtZmlsZS11cGxvYWQtcXVldWUuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL21hdC1maWxlLXVwbG9hZC1xdWV1ZS5jb21wb25lbnQuc2Nzc1wiXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW01hdEZpbGVVcGxvYWRRdWV1ZVNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBNYXRGaWxlVXBsb2FkUXVldWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBNYXRGaWxlVXBsb2FkQ29tcG9uZW50KSlcbiAgZmlsZVVwbG9hZHM6IFF1ZXJ5TGlzdDxNYXRGaWxlVXBsb2FkQ29tcG9uZW50PjtcblxuICAvKiogU3Vic2NyaXB0aW9uIHRvIHJlbW92ZSBjaGFuZ2VzIGluIGZpbGVzLiAqL1xuICBwcml2YXRlIF9maWxlUmVtb3ZlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsO1xuXG4gIC8qKiBTdWJzY3JpcHRpb24gdG8gY2hhbmdlcyBpbiB0aGUgZmlsZXMuICovXG4gIHByaXZhdGUgX2NoYW5nZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIC8qKiBDb21iaW5lZCBzdHJlYW0gb2YgYWxsIG9mIHRoZSBmaWxlIHVwbG9hZCByZW1vdmUgY2hhbmdlIGV2ZW50cy4gKi9cbiAgZ2V0IGZpbGVVcGxvYWRSZW1vdmVFdmVudHMoKTogT2JzZXJ2YWJsZTxNYXRGaWxlVXBsb2FkQ29tcG9uZW50PiB7XG4gICAgcmV0dXJuIG1lcmdlKFxuICAgICAgLi4udGhpcy5maWxlVXBsb2Fkcy5tYXAoKGZpbGVVcGxvYWQpID0+IGZpbGVVcGxvYWQucmVtb3ZlRXZlbnQpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBmaWxlczogQXJyYXk8YW55PiA9IFtdO1xuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICB0aGlzLm1hdEZpbGVVcGxvYWRRdWV1ZVNlcnZpY2UuaW5pdGlhbGl6ZSh7XG4gICAgICBodHRwVXJsOiBjaGFuZ2VzW1wiaHR0cFVybFwiXSA/IGNoYW5nZXNbXCJodHRwVXJsXCJdLmN1cnJlbnRWYWx1ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGh0dHBSZXF1ZXN0SGVhZGVyczogY2hhbmdlc1tcImh0dHBSZXF1ZXN0SGVhZGVyc1wiXVxuICAgICAgICA/IGNoYW5nZXNbXCJodHRwUmVxdWVzdEhlYWRlcnNcIl0uY3VycmVudFZhbHVlXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgaHR0cFJlcXVlc3RQYXJhbXM6IGNoYW5nZXNbXCJodHRwUmVxdWVzdFBhcmFtc1wiXVxuICAgICAgICA/IGNoYW5nZXNbXCJodHRwUmVxdWVzdFBhcmFtc1wiXS5jdXJyZW50VmFsdWVcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBmaWxlQWxpYXM6IGNoYW5nZXNbXCJmaWxlQWxpYXNcIl1cbiAgICAgICAgPyBjaGFuZ2VzW1wiZmlsZUFsaWFzXCJdLmN1cnJlbnRWYWx1ZVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbWF0RmlsZVVwbG9hZFF1ZXVlU2VydmljZTogTWF0RmlsZVVwbG9hZFF1ZXVlU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgLyogSHR0cCByZXF1ZXN0IGlucHV0IGJpbmRpbmdzICovXG4gIEBJbnB1dCgpXG4gIGh0dHBVcmw6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBodHRwUmVxdWVzdEhlYWRlcnM6XG4gICAgfCBIdHRwSGVhZGVyc1xuICAgIHwge1xuICAgICAgICBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICAgIH0gPSBuZXcgSHR0cEhlYWRlcnMoKTtcblxuICBASW5wdXQoKVxuICBodHRwUmVxdWVzdFBhcmFtczpcbiAgICB8IEh0dHBQYXJhbXNcbiAgICB8IHtcbiAgICAgICAgW3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICAgIH0gPSBuZXcgSHR0cFBhcmFtcygpO1xuXG4gIEBJbnB1dCgpXG4gIGZpbGVBbGlhczogc3RyaW5nID0gXCJmaWxlXCI7XG5cbiAgQElucHV0KClcbiAgdXBsb2FkQWxsQ29sb3IgPSBcInByaW1hcnlcIjtcblxuICBASW5wdXQoKVxuICB1cGxvYWRBbGxMYWJlbCA9IFwiVXBsb2FkIEFsbFwiO1xuXG4gIEBJbnB1dCgpXG4gIHJlbW92ZUFsbENvbG9yID0gXCJwcmltYXJ5XCI7XG5cbiAgQElucHV0KClcbiAgcmVtb3ZlQWxsTGFiZWwgPSBcIlJlbW92ZSBBbGxcIjtcblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgLy8gV2hlbiB0aGUgbGlzdCBjaGFuZ2VzLCByZS1zdWJzY3JpYmVcbiAgICB0aGlzLl9jaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLmZpbGVVcGxvYWRzLmNoYW5nZXNcbiAgICAgIC5waXBlKHN0YXJ0V2l0aChudWxsKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fZmlsZVJlbW92ZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgIHRoaXMuX2ZpbGVSZW1vdmVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9saXN0ZW5Ub2ZpbGVSZW1vdmVkKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2xpc3RlblRvZmlsZVJlbW92ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5fZmlsZVJlbW92ZVN1YnNjcmlwdGlvbiA9IHRoaXMuZmlsZVVwbG9hZFJlbW92ZUV2ZW50cy5zdWJzY3JpYmUoXG4gICAgICAoZXZlbnQ6IE1hdEZpbGVVcGxvYWRDb21wb25lbnQpID0+IHtcbiAgICAgICAgdGhpcy5maWxlcy5zcGxpY2UoZXZlbnQuaWQsIDEpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBhZGQoZmlsZTogYW55KSB7XG4gICAgdGhpcy5maWxlcy5wdXNoKGZpbGUpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgdXBsb2FkQWxsKCkge1xuICAgIHRoaXMuZmlsZVVwbG9hZHMuZm9yRWFjaCgoZmlsZVVwbG9hZCkgPT4ge1xuICAgICAgZmlsZVVwbG9hZC51cGxvYWQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVBbGwoKSB7XG4gICAgdGhpcy5maWxlcy5zcGxpY2UoMCwgdGhpcy5maWxlcy5sZW5ndGgpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5fY2hhbmdlU3Vic2NyaXB0aW9uKSB0aGlzLl9jaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICBpZiAodGhpcy5fZmlsZVJlbW92ZVN1YnNjcmlwdGlvbilcbiAgICAgIHRoaXMuX2ZpbGVSZW1vdmVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcblxuICAgIGlmICh0aGlzLmZpbGVzKSB7XG4gICAgICB0aGlzLnJlbW92ZUFsbCgpO1xuICAgIH1cbiAgfVxufVxuIl19