projects/angular-material-fileupload/src/lib/mat-file-upload-queue/mat-file-upload-queue.component.ts
| changeDetection | ChangeDetectionStrategy.OnPush | 
| providers | MatFileUploadQueueService | 
| selector | mat-file-upload-queue | 
| styleUrls | ./mat-file-upload-queue.component.scss | 
| templateUrl | ./mat-file-upload-queue.component.html | 
| Properties | 
| 
 | 
| Methods | 
| 
 | 
| Inputs | 
| Accessors | 
| constructor(matFileUploadQueueService: MatFileUploadQueueService, changeDetectorRef: ChangeDetectorRef) | |||||||||
| 
                                    Parameters :
                                     
 | 
| fileAlias | |
| Type : string | |
| Default value : "file" | |
| httpRequestHeaders | |
| Type : HttpHeaders | literal type | |
| Default value : new HttpHeaders() | |
| httpRequestParams | |
| Type : HttpParams | literal type | |
| Default value : new HttpParams() | |
| httpUrl | |
| Type : string | |
| removeAllColor | |
| Default value : "primary" | |
| removeAllLabel | |
| Default value : "Remove All" | |
| uploadAllColor | |
| Default value : "primary" | |
| uploadAllLabel | |
| Default value : "Upload All" | |
| Private _listenTofileRemoved | 
| _listenTofileRemoved() | 
| 
                        Returns :          void | 
| add | ||||||
| add(file: any) | ||||||
| 
                        Parameters :
                         
 
                        Returns :          void | 
| ngAfterViewInit | 
| ngAfterViewInit() | 
| 
                        Returns :          void | 
| ngOnChanges | ||||||
| ngOnChanges(changes: SimpleChanges) | ||||||
| 
                        Parameters :
                         
 
                        Returns :          void | 
| ngOnDestroy | 
| ngOnDestroy() | 
| 
                        Returns :          void | 
| Public removeAll | 
| removeAll() | 
| 
                        Returns :          void | 
| Public uploadAll | 
| uploadAll() | 
| 
                        Returns :          void | 
| Private _changeSubscription | 
| Type : Subscription | 
| Subscription to changes in the files. | 
| Private _fileRemoveSubscription | 
| Type : Subscription | null | 
| Subscription to remove changes in files. | 
| Public files | 
| Type : Array<any> | 
| Default value : [] | 
| fileUploads | 
| Type : QueryList<MatFileUploadComponent> | 
| Decorators : 
                                @ContentChildren(undefined) | 
| fileUploadRemoveEvents | 
| get fileUploadRemoveEvents() | 
| Combined stream of all of the file upload remove change events. 
                                    Returns :          Observable<MatFileUploadComponent> | 
import {
  Component,
  ChangeDetectionStrategy,
  ContentChildren,
  forwardRef,
  OnDestroy,
  OnChanges,
  QueryList,
  SimpleChanges,
  Input,
  ChangeDetectorRef,
} from "@angular/core";
import { Subscription, Observable, 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";
@Component({
  selector: "mat-file-upload-queue",
  templateUrl: "./mat-file-upload-queue.component.html",
  styleUrls: ["./mat-file-upload-queue.component.scss"],
  changeDetection: ChangeDetectionStrategy.OnPush,
  providers: [MatFileUploadQueueService],
})
export class MatFileUploadQueueComponent implements OnChanges, OnDestroy {
  @ContentChildren(forwardRef(() => MatFileUploadComponent))
  fileUploads: QueryList<MatFileUploadComponent>;
  /** Subscription to remove changes in files. */
  private _fileRemoveSubscription: Subscription | null;
  /** Subscription to changes in the files. */
  private _changeSubscription: Subscription;
  /** Combined stream of all of the file upload remove change events. */
  get fileUploadRemoveEvents(): Observable<MatFileUploadComponent> {
    return merge(
      ...this.fileUploads.map((fileUpload) => fileUpload.removeEvent)
    );
  }
  public files: Array<any> = [];
  ngOnChanges(changes: SimpleChanges): void {
    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,
    });
  }
  constructor(
    private matFileUploadQueueService: MatFileUploadQueueService,
    private changeDetectorRef: ChangeDetectorRef
  ) {}
  /* Http request input bindings */
  @Input()
  httpUrl: string;
  @Input()
  httpRequestHeaders:
    | HttpHeaders
    | {
        [header: string]: string | string[];
      } = new HttpHeaders();
  @Input()
  httpRequestParams:
    | HttpParams
    | {
        [param: string]: string | string[];
      } = new HttpParams();
  @Input()
  fileAlias: string = "file";
  @Input()
  uploadAllColor = "primary";
  @Input()
  uploadAllLabel = "Upload All";
  @Input()
  removeAllColor = "primary";
  @Input()
  removeAllLabel = "Remove All";
  ngAfterViewInit() {
    // When the list changes, re-subscribe
    this._changeSubscription = this.fileUploads.changes
      .pipe(startWith(null))
      .subscribe(() => {
        if (this._fileRemoveSubscription) {
          this._fileRemoveSubscription.unsubscribe();
        }
        this._listenTofileRemoved();
      });
  }
  private _listenTofileRemoved(): void {
    this._fileRemoveSubscription = this.fileUploadRemoveEvents.subscribe(
      (event: MatFileUploadComponent) => {
        this.files.splice(event.id, 1);
        this.changeDetectorRef.markForCheck();
      }
    );
  }
  add(file: any) {
    this.files.push(file);
    this.changeDetectorRef.markForCheck();
  }
  public uploadAll() {
    this.fileUploads.forEach((fileUpload) => {
      fileUpload.upload();
    });
  }
  public removeAll() {
    this.files.splice(0, this.files.length);
    this.changeDetectorRef.markForCheck();
  }
  ngOnDestroy() {
    if (this._changeSubscription) this._changeSubscription.unsubscribe();
    if (this._fileRemoveSubscription)
      this._fileRemoveSubscription.unsubscribe();
    if (this.files) {
      this.removeAll();
    }
  }
}
<ng-content></ng-content>
<br />
<button
  mat-raised-button
  [color]="uploadAllColor"
  *ngIf="files.length > 0"
  (click)="uploadAll()"
>
  {{ uploadAllLabel }}
</button>
<button
  mat-raised-button
  [color]="removeAllColor"
  *ngIf="files.length > 0"
  (click)="removeAll()"
>
  {{ removeAllLabel }}
</button>
                    ./mat-file-upload-queue.component.scss