{"version":3,"file":"angular-extensions-controls-file-control.mjs","sources":["../../../projects/angular-extensions/controls/file-control/src/no-upload-file.service.ts","../../../projects/angular-extensions/controls/file-control/src/ngx-awesome-uploader.directive.ts","../../../projects/angular-extensions/controls/file-control/src/file-control.component.ts","../../../projects/angular-extensions/controls/file-control/src/file-control.component.html","../../../projects/angular-extensions/controls/file-control/src/ngx-file-control.module.ts","../../../projects/angular-extensions/controls/file-control/src/angular-extensions-controls-file-control.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\r\nimport { FilePickerAdapter, FilePreviewModel, UploadResponse } from \"ngx-awesome-uploader\";\r\nimport { Observable, of } from \"rxjs\";\r\n\r\n/**\r\n * Dummy file service that is not performing any file upload.\r\n * Used as default file upload service.\r\n */\r\n@Injectable()\r\nexport class NoUploadFileService extends FilePickerAdapter {\r\n\r\n  constructor() {\r\n    super();\r\n  }\r\n\r\n  public uploadFile(_: FilePreviewModel): Observable<UploadResponse> {\r\n    return of({} as UploadResponse);\r\n  }\r\n\r\n  public removeFile(_: FilePreviewModel): Observable<any> {\r\n    return of(true);\r\n  }\r\n}\r\n","import { Directive, AfterViewInit, ElementRef } from \"@angular/core\";\r\n\r\n@Directive({\r\n  selector: \"ngx-awesome-uploader\",\r\n  exportAs: \"filePicker\"\r\n})\r\nexport class FilePickerComponentDirective implements AfterViewInit {\r\n\r\n  constructor(\r\n    private elementRef: ElementRef<HTMLElement>,\r\n  ) {\r\n  }\r\n\r\n  public ngAfterViewInit(): void {\r\n    // prevents library built-in file dialog opening\r\n    this.elementRef.nativeElement.querySelector(\".file-drop-wrapper\").addEventListener(\r\n      \"click\",\r\n      event => {\r\n        let targetElement = event.target as HTMLElement;\r\n\r\n        if (targetElement.classList.contains(\"dropzoneTemplate\") || !targetElement.closest(\".dropzoneTemplate\")) {\r\n          event.preventDefault();\r\n          event.stopPropagation();\r\n        }\r\n      },\r\n      { capture: true });\r\n  }\r\n\r\n  public openFileDialog() {\r\n    this.elementRef.nativeElement.querySelector<HTMLInputElement>(\"#fileInput\").dispatchEvent(new Event(\"click\"));\r\n  }\r\n}\r\n","import { switchMap, takeUntil } from \"rxjs\";\r\nimport { isEmpty } from \"lodash-es\";\r\nimport {\r\n  Component, Input, ViewChild, ElementRef, OnInit, ChangeDetectorRef,\r\n  ChangeDetectionStrategy, ContentChild, TemplateRef, Output, EventEmitter,\r\n} from \"@angular/core\";\r\n\r\nimport { FilePickerAdapter, FilePickerComponent, FilePreviewModel, FileValidationTypes, ValidationError } from \"ngx-awesome-uploader\";\r\n\r\nimport { overrideFunction } from \"angular-extensions/core\";\r\nimport { ControlBase } from \"angular-extensions/controls/base-control\";\r\nimport { NoUploadFileService } from \"./no-upload-file.service\";\r\nimport { FilePickerComponentDirective } from \"./ngx-awesome-uploader.directive\";\r\n\r\nexport type ValidationErrorMessageTemplate = {\r\n  [key in FileValidationTypes]: (control: FileControlComponent) => string;\r\n};\r\n\r\noverrideFunction(\r\n  FilePickerComponent.prototype,\r\n  picker => picker.dropped,\r\n  async (_, picker, uploadEvent) => {\r\n    let filesToUpload: File[] = [];\r\n\r\n    for (let entry of uploadEvent.files) {\r\n      let fileEntry = entry.fileEntry as FileSystemFileEntry;\r\n\r\n      if (fileEntry.isFile) {\r\n        let fileToUpload = await new Promise<File>((resolve, reject) => {\r\n          fileEntry.file(file => resolve(file), error => reject(error));\r\n        });\r\n\r\n        filesToUpload.push(fileToUpload);\r\n      }\r\n    }\r\n\r\n    picker.handleFiles(filesToUpload).subscribe();\r\n  });\r\n\r\n@Component({\r\n  selector: \"file-control\",\r\n  templateUrl: \"./file-control.component.html\",\r\n  styleUrls: [\"./file-control.component.scss\"],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  providers: [NoUploadFileService]\r\n})\r\nexport class FileControlComponent extends ControlBase<File[]> implements OnInit {\r\n\r\n  /**\r\n   * Indicates whether you can upload single or multiple files\r\n   */\r\n  @Input()\r\n  public multiple: boolean;\r\n\r\n  /**\r\n   * Restricts which file extensions are allowed to upload.\r\n   * Default: any extension\r\n   *\r\n   * @example ['pdf', 'jpg', 'jpeg']\r\n   */\r\n  @Input()\r\n  public allowedFileExtensions: string[];\r\n\r\n  /**\r\n   * Specifies file extension filter that would be applied during file selection.\r\n   * Default: show all\r\n   *\r\n   * @example ['.pdf', '.jpg', '.jpeg']\r\n   */\r\n  @Input()\r\n  public accept: string[] = [];\r\n\r\n  /**\r\n   * Input max file size (in MB) of selected file. Default: no limit\r\n   */\r\n  @Input()\r\n  public maxFileSize: number;\r\n\r\n  /**\r\n   * Total max size (in MB) limit of all files. Default: no limit\r\n   */\r\n  @Input()\r\n  public totalFileSize: number;\r\n\r\n  /**\r\n   * Max count of files in multi-upload. Default: no limit\r\n   */\r\n  @Input()\r\n  public maxFilesCount: number;\r\n\r\n  /**\r\n   * Whether to auto upload file on file choose or not.\r\n   * Default: false\r\n   */\r\n  @Input()\r\n  public autoUpload = false;\r\n\r\n  /**\r\n   * Custom Adapter for uploading/removing files.\r\n   * Default: {@link NoUploadFileService}\r\n   */\r\n  @Input()\r\n  public adapter: FilePickerAdapter;\r\n\r\n  /**\r\n   * Whether to show default files preview container.\r\n   * Default: false\r\n   */\r\n  @Input()\r\n  public showPreview: boolean;\r\n\r\n  @Input()\r\n  public customErrorMessages: Partial<ValidationErrorMessageTemplate>;\r\n\r\n  @Output()\r\n  public fileValidationError = new EventEmitter<ValidationError>();\r\n\r\n  @ContentChild(TemplateRef)\r\n  public contentTemplate: TemplateRef<HTMLElement>;\r\n\r\n  @ViewChild(FilePickerComponent)\r\n  public filePicker: FilePickerComponent;\r\n\r\n  private suppressControlEvents = false;\r\n\r\n  private validationErrorMessages: ValidationErrorMessageTemplate;\r\n\r\n  constructor(\r\n    private elementRef: ElementRef<HTMLFieldSetElement>,\r\n    private changeDetectorRef: ChangeDetectorRef,\r\n    public defaultAdapter: NoUploadFileService,\r\n  ) {\r\n    super();\r\n\r\n    this.adapter = this.adapter || defaultAdapter;\r\n\r\n    this.validationErrorMessages = {\r\n      UPLOAD_TYPE: control => control.multiple ? \"Select multiple files\" : \"Select only one file\",\r\n      EXTENSIONS: control => `Selected file should have ${control.allowedFileExtensions} extension`,\r\n      FILE_MAX_SIZE: control => `The size of selected file is larger than ${control.maxFileSize} MB`,\r\n      TOTAL_MAX_SIZE: control => `The total size of selected files is larger than ${control.totalFileSize} MB`,\r\n      FILE_MAX_COUNT: control => `Max count of files to upload should be not more than ${control.maxFilesCount}`,\r\n      CUSTOM_VALIDATOR: _ => `There was an error while adding your file`,\r\n    };\r\n  }\r\n\r\n  public ngOnInit() {\r\n    this.singleSelectModePatch();\r\n\r\n    if (this.customErrorMessages) {\r\n      Object.entries(this.customErrorMessages)\r\n        .forEach(([error, messageProvider]) => {\r\n          this.validationErrorMessages[error as FileValidationTypes] = messageProvider;\r\n        });\r\n    }\r\n\r\n    // sync files back with control value\r\n    this.field$\r\n      .pipe(\r\n        switchMap(field => field.control.valueChanges),\r\n        takeUntil(this.destroy$))\r\n      .subscribe(files => {\r\n        if (this.suppressControlEvents) {\r\n          return;\r\n        }\r\n\r\n        this.filePicker.files = (files || []).map(file => ({ file, fileName: file.name }));\r\n\r\n        ((this.filePicker as any).changeRef as ChangeDetectorRef).markForCheck();\r\n      });\r\n  }\r\n\r\n  public getOpenFileDialogHandler(fileUploader: FilePickerComponentDirective): () => void {\r\n    return () => {\r\n      fileUploader.openFileDialog();\r\n\r\n      this.elementRef.nativeElement.addEventListener(\r\n        \"focus\",\r\n        () => {\r\n          if (this.field.control.errors) {\r\n            Object.keys(this.field.control.errors)\r\n              .filter(error => error.startsWith(\"file_\"))\r\n              .forEach(error => delete this.field.control.errors[error]);\r\n\r\n            this.field.control.setErrors(isEmpty(this.field.control.errors) ? null : this.field.control.errors);\r\n          }\r\n\r\n          this.field.control.markAsTouched({ onlySelf: true });\r\n\r\n          this.changeDetectorRef.markForCheck();\r\n        },\r\n        { capture: true, once: true });\r\n    };\r\n  }\r\n\r\n  public onValidationError(error: ValidationError) {\r\n    error.error = this.validationErrorMessages[error.error as FileValidationTypes](this);\r\n\r\n    this.field.control.setErrors(Object.assign(\r\n      {},\r\n      this.field.control.errors || {},\r\n      { [`file_${error.file.name}`]: error.error }));\r\n\r\n    this.fileValidationError.emit(error);\r\n\r\n    this.changeDetectorRef.markForCheck();\r\n  }\r\n\r\n  public onFileAdded(file: FilePreviewModel) {\r\n    this.suppressControlEventsScope(() =>\r\n      this.field.control.setValue([...(this.field.value || []), file.file as File]));\r\n\r\n    this.changeDetectorRef.markForCheck();\r\n  }\r\n\r\n  public onFileRemoved(removedFile: FilePreviewModel) {\r\n    this.suppressControlEventsScope(() =>\r\n      this.field.control.setValue(this.field.value.filter(file => file.name != removedFile.fileName)));\r\n\r\n    this.changeDetectorRef.markForCheck();\r\n  }\r\n\r\n  private suppressControlEventsScope(action: () => void) {\r\n    this.suppressControlEvents = true;\r\n\r\n    action();\r\n\r\n    this.suppressControlEvents = false;\r\n  }\r\n\r\n  /**\r\n   * Patches single select mode by replacing already selected file.\r\n   */\r\n  private singleSelectModePatch() {\r\n    if (!this.multiple) {\r\n      this.elementRef.nativeElement.addEventListener(\r\n        \"change\",\r\n        () => {\r\n          this.field.control.setValue([], { emitEvent: false, emitModelToViewChange: false });\r\n\r\n          this.filePicker.files = [];\r\n\r\n          this.changeDetectorRef.markForCheck();\r\n        },\r\n        { capture: true });\r\n    }\r\n  }\r\n}\r\n","<base-control #baseControl\r\n              [control]=\"this\">\r\n  <div class=\"field-label\">\r\n    <ngx-awesome-uploader #uploader\r\n                          #filePicker=\"filePicker\"\r\n                          [adapter]=\"adapter\"\r\n                          [showeDragDropZone]=\"true\"\r\n                          [ngClass]=\"fieldClass\"\r\n                          [showPreviewContainer]=\"showPreview\"\r\n                          [uploadType]=\"multiple ? 'multi' : 'single'\"\r\n                          [fileMaxSize]=\"maxFileSize\"\r\n                          [totalMaxSize]=\"totalFileSize\"\r\n                          [accept]=\"accept.toString()\"\r\n                          [itemTemplate]=\"fileItemTemplate\"\r\n                          [enableAutoUpload]=\"autoUpload\"\r\n                          [fileExtensions]=\"allowedFileExtensions\"\r\n                          [fileMaxCount]=\"maxFilesCount\"\r\n                          (validationError)=\"onValidationError($event)\"\r\n                          (fileAdded)=\"onFileAdded($event)\">\r\n\r\n      <div class=\"dropzoneTemplate\"\r\n           *ngIf=\"getOpenFileDialogHandler(filePicker) as openFileDialog\">\r\n        <ng-container *ngIf=\"contentTemplate\">\r\n          <ng-container *ngTemplateOutlet=\"contentTemplate; context: { $implicit: openFileDialog }\"></ng-container>\r\n        </ng-container>\r\n\r\n        <ng-container *ngIf=\"!contentTemplate\">\r\n          <button type=\"button\"\r\n                  mat-raised-button\r\n                  (click)=\"openFileDialog()\">{{ field.label }}</button>\r\n        </ng-container>\r\n      </div>\r\n    </ngx-awesome-uploader>\r\n  </div>\r\n\r\n  <mat-error *ngIf=\"baseControl.initialized && field.control.touched\">\r\n    <ng-container *ngTemplateOutlet=\"baseControl.errorsTemplate\"></ng-container>\r\n  </mat-error>\r\n</base-control>\r\n\r\n<ng-content></ng-content>\r\n\r\n<ng-template #fileItemTemplate\r\n             let-fileItem=\"fileItem\"\r\n             let-uploadProgress=\"uploadProgress\">\r\n  <div class=\"toolbar\">\r\n    <span class=\"text-left\">\r\n      {{ fileItem.fileName }}\r\n    </span>\r\n\r\n    <div *ngIf=\"fileItem\">\r\n      <a mat-icon-button\r\n         (click)=\"uploader.removeFile(fileItem); onFileRemoved(fileItem)\">\r\n        <mat-icon>clear</mat-icon>\r\n      </a>\r\n    </div>\r\n  </div>\r\n</ng-template>\r\n","import { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { FilePickerModule } from  \"ngx-awesome-uploader\";\r\n\r\nimport { NgxBaseControlModule } from \"angular-extensions/controls/base-control\";\r\nimport { FileControlComponent } from \"./file-control.component\";\r\nimport { FilePickerComponentDirective } from \"./ngx-awesome-uploader.directive\";\r\n\r\n@NgModule({\r\n  imports: [\r\n    CommonModule,\r\n    NgxBaseControlModule,\r\n    MatButtonModule,\r\n    FilePickerModule,\r\n  ],\r\n  exports: [\r\n    NgxBaseControlModule,\r\n    MatButtonModule,\r\n    FilePickerModule,\r\n\r\n    FileControlComponent,\r\n  ],\r\n  declarations: [\r\n    FileControlComponent,\r\n    FilePickerComponentDirective,\r\n  ]\r\n})\r\nexport class NgxFileControlModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.NoUploadFileService","i8.FilePickerComponentDirective"],"mappings":"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"}