{"version":3,"file":"acknow-srl-ack6-lib-media.mjs","sources":["../../../projects/ack6-lib/media/injection/file-downloader.ts","../../../projects/ack6-lib/media/containers/media-manager/media-manager.component.ts","../../../projects/ack6-lib/media/containers/media-manager/media-manager.component.html","../../../projects/ack6-lib/media/injection/file-uploader.ts","../../../projects/ack6-lib/media/directives/file-upload.directive.ts","../../../projects/ack6-lib/media/containers/file-upload/file-upload.component.ts","../../../projects/ack6-lib/media/containers/file-upload/file-upload.component.html","../../../projects/ack6-lib/media/media.module.ts","../../../projects/ack6-lib/media/acknow-srl-ack6-lib-media.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport declare type FileDownloadResult = {blob: Blob, contentDisposition: string};\n\nexport declare type FileDownloader = (uri: string) => Promise<FileDownloadResult>;\n\nexport const FILE_DOWNLOADER = new InjectionToken<FileDownloader>('FileDownloader');\n","import { Component, Inject, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { saveAs } from 'file-saver';\nimport { FileDownloader, FILE_DOWNLOADER } from '../../injection/file-downloader';\nimport { Media, MediaItem } from '../../models/media.model';\n\n@Component({\n  selector: 'ack6-media-manager',\n  templateUrl: './media-manager.component.html',\n  styleUrls: ['./media-manager.component.scss']\n})\nexport class MediaManagerComponent implements OnInit, OnChanges {\n\n  @Input() public model!: Media[] | null;\n\n  constructor(\n    @Inject(FILE_DOWNLOADER) public fileDownloader: FileDownloader,\n    private sanitizer: DomSanitizer\n  ) { }\n\n  ngOnInit(): void {\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n\n    if (changes.model.currentValue) {\n\n      for (const media of changes.model.currentValue) {\n        this.downloadPreviews(media);\n      }\n\n    }\n\n  }\n\n  thirdLevelCols(item: Media): Array<{type: 'header' | 'value'} & any> {\n\n    if (!item.metadata || !item.metadata.length) {\n      return [];\n    }\n\n    const result = item.metadata.filter((value) => value.type === 'header');\n\n\n    return result;\n\n  }\n\n  downloadFile(media: MediaItem): void {\n    this.fileDownloader(media.uri).then(result => {\n\n      if (media.mimeType.startsWith('image') || media.mimeType === 'application/pdf') {\n\n        const href = URL.createObjectURL(result.blob);\n\n        const newTab = window.open(href, '_blank');\n\n\n      } else {\n\n        saveAs(result.blob, media.filename);\n\n      }\n\n    });\n  }\n\n  fileIcons(mimeType: string): string {\n    /*\n      <!-- <ng-container *ngSwitchCase=\"media.mimeType === 'application/pdf'\" [ngTemplateOutlet]=\"pdf\" [ngTemplateOutletContext]=\"{media: media}\"></ng-container>\n      <ng-container *ngSwitchCase=\"media.mimeType.startsWith('image/')\" [ngTemplateOutlet]=\"img\" [ngTemplateOutletContext]=\"{media: media}\"></ng-container>\n      <ng-container *ngSwitchCase=\"media.mimeType === 'application/vnd.ms-excel' || media.mimeType === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\" [ngTemplateOutlet]=\"excell\" [ngTemplateOutletContext]=\"{media: media}\"></ng-container>\n      <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"generic\" [ngTemplateOutletContext]=\"{media: media}\"></ng-container> -->\n    */\n\n    if (mimeType === 'application/pdf') {\n      return 'far fa-file-pdf pdf';\n    }\n\n    if (mimeType.startsWith('image/')) {\n      return 'far fa-file-image';\n    }\n\n    if ([\n      'application/vnd.ms-excel',\n      'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n    ].includes(mimeType)) {\n      return 'far fa-file-excel excel';\n    }\n\n    if ([\n      'application/msword',\n      'application/vnd.openxmlformats-officedocument.wordprocessingml.documen'\n    ].includes(mimeType)) {\n      return 'far fa-file-word doc';\n    }\n\n    return 'far fa-file';\n\n  }\n\n  private downloadPreviews(item: Media): void {\n\n    if (!item.media) {\n      item.media = [];\n    }\n\n    for (const media of item.media) {\n      if (media.mimeType && media.mimeType.startsWith('image/')) {\n        this.fileDownloader(media.uri).then((result) => {\n\n          const preview = URL.createObjectURL(result.blob);\n\n          media.preview = this.sanitizer.bypassSecurityTrustResourceUrl(preview);\n\n        });\n      }\n    }\n\n    if (item.children) {\n      for (const child of item.children) {\n        this.downloadPreviews(child);\n      }\n    }\n\n  }\n\n}\n","\n<div class=\"media-container\" *ngIf=\"model\">\n\n  <!-- First level -->\n  <p-panel [header]=\"item.header\" *ngFor=\"let item of model\">\n\n    <!-- Second level -->\n    <div class=\"level-2\" *ngFor=\"let sItem of item.children\">\n      <p-divider>\n        <ng-container *ngIf=\"sItem.children && sItem.children.length; then childrenTemplate; else noChildrenTemplate\"></ng-container>\n        <ng-template #childrenTemplate>{{sItem.header}} ({{sItem.children?.length}})</ng-template>\n        <ng-template #noChildrenTemplate>{{sItem.header}}</ng-template>\n      </p-divider>\n\n      <!-- Third level -->\n      <div class=\"level-3\" *ngFor=\"let tItem of sItem.children\">\n        <div class=\"ack6-header\">\n          <div class=\"fixed\">\n            <span>{{tItem.header}}</span>\n          </div>\n          <div class=\"metadata\">\n            <span *ngFor=\"let col of thirdLevelCols(tItem)\">{{col.label}}</span>\n          </div>\n        </div>\n        <p-divider></p-divider>\n\n        <!-- Fourth level -->\n        <ng-container *ngFor=\"let fItem of tItem.children\">\n          <div class=\"level-4\">\n            <div>\n              <span>{{fItem.header}}</span>\n              <span>{{fItem.subheader}}</span>\n            </div>\n            <div class=\"metadata\">\n              <span *ngFor=\"let col of fItem.metadata\">{{col.value}}</span>\n            </div>\n          </div>\n          <div class=\"files\" *ngIf=\"fItem.media?.length\">\n\n            <ng-container [ngTemplateOutlet]=\"file\" [ngTemplateOutletContext]=\"{item: fItem}\"></ng-container>\n\n          </div>\n          <p-divider></p-divider>\n        </ng-container>\n        <!-- End Fourth level -->\n\n      </div>\n      <!-- End Third level -->\n\n      <div class=\"files\" *ngIf=\"sItem.media?.length\">\n\n        <ng-container [ngTemplateOutlet]=\"file\" [ngTemplateOutletContext]=\"{item: sItem}\"></ng-container>\n\n      </div>\n\n    </div>\n    <!-- End Second Level -->\n\n  </p-panel>\n  <!-- End First level -->\n\n</div>\n\n<ng-template #file let-item=\"item\">\n\n  <div *ngFor=\"let media of item.media\" (click)=\"downloadFile(media)\">\n\n    <div class=\"file\" [title]=\"media.filename\">\n\n      <ng-container *ngTemplateOutlet=\"media.preview ? img : preview; context: {media: media}\"></ng-container>\n\n    </div>\n\n  </div>\n\n  <ng-template #preview let-media=\"media\">\n    <i [ngClass]=\"fileIcons(media.mimeType)\"></i>\n    <span>{{media.filename}}</span>\n  </ng-template>\n\n  <ng-template #img let-media=\"media\">\n    <img [src]=\"media.preview\" *ngIf=\"media.preview\">\n  </ng-template>\n\n</ng-template>\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport declare type FileUploadResult = {success: boolean, progress: number};\n\nexport declare type FileUploader = (file: File, ...args: any[]) => Observable<FileUploadResult>;\n\nexport const FILE_UPLOADER = new InjectionToken<FileUploader>('FileUploader');\n","import {\n  Directive,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnInit,\n  Output,\n  Renderer2\n} from '@angular/core';\nimport { FileUploadSettings } from '../models/file-upload.model';\n\n@Directive({\n  selector: '[ack6FileUpload]'\n})\nexport class FileUploadDirective implements OnInit {\n\n  @Input('ack6FileUpload') settings!: FileUploadSettings;\n\n  @Output() fileUpload = new EventEmitter<FileList>();\n\n  constructor(\n    private el: ElementRef,\n    private renderer: Renderer2,\n  ) {\n    this.fileUpload = new EventEmitter();\n  }\n\n  private inputEl!: HTMLInputElement;\n\n  ngOnInit(): void {\n\n    const input = this.renderer.createElement('input');\n    input.style.display = 'none';\n    input.type = 'file';\n    input.setAttribute('multiple', 'true');\n\n    this.renderer.appendChild(this.el.nativeElement, input);\n\n    this.inputEl = this.el.nativeElement.querySelector('input');\n\n    this.inputEl.onchange = () => {\n\n      if (this.inputEl.files) {\n        this.fileUpload.emit(this.inputEl.files);\n      }\n\n    };\n\n  }\n\n  @HostListener('click')\n  public onClick(): void {\n    this.inputEl.click();\n  }\n\n  @HostListener('dragover', ['$event'])\n  public dragOver(evt: any): void {\n\n    evt.stopPropagation();\n    evt.preventDefault();\n\n    if (!this.settings.allowDrop) { return; }\n\n    if (this.settings.dragOverClass) {\n      this.renderer.addClass(this.el.nativeElement, this.settings.dragOverClass);\n    }\n\n  }\n\n  @HostListener('dragleave', ['$event'])\n  public dragLeave(evt: DragEvent): void {\n\n    evt.stopPropagation();\n    evt.preventDefault();\n\n    if (!this.settings.allowDrop) { return; }\n\n    if (this.settings.dragOverClass) {\n      this.renderer.removeClass(this.el.nativeElement, this.settings.dragOverClass);\n    }\n\n  }\n\n  @HostListener('drop', ['$event'])\n  public drop(evt: DragEvent): void {\n\n    evt.preventDefault();\n\n    this.dragLeave(evt);\n\n    if (evt.dataTransfer && evt.dataTransfer.files) {\n      this.fileUpload.emit(evt.dataTransfer.files);\n    }\n\n  }\n\n}\n","import { Component, EventEmitter, Inject, Input, OnInit, Output } from '@angular/core';\nimport { finalize, tap } from 'rxjs/operators';\nimport { FileUploader, FILE_UPLOADER } from '../../injection/file-uploader';\nimport { FileUploadSettings } from '../../models/file-upload.model';\n\ndeclare type UploadItem = {file: File, progress: number, inProgress: boolean};\n\n@Component({\n  selector: 'ack6-file-upload',\n  templateUrl: './file-upload.component.html',\n  styleUrls: ['./file-upload.component.css']\n})\nexport class FileUploadComponent implements OnInit {\n\n  @Input() params!: any[];\n  @Input() disabled!: boolean;\n\n  @Output() uploadStart: EventEmitter<void>;\n  @Output() uploadComplete: EventEmitter<void>;\n\n  public fileUploadSettings: FileUploadSettings;\n  public uploadList: Array<UploadItem>;\n\n  constructor(\n    @Inject(FILE_UPLOADER) private fileUploader: FileUploader\n  ) {\n\n    this.fileUploadSettings = {\n      allowDrop: true,\n      dragOverClass: 'drag-over'\n    };\n\n    this.uploadList = [];\n\n    this.uploadStart = new EventEmitter();\n    this.uploadComplete = new EventEmitter();\n\n  }\n\n  ngOnInit(): void {\n  }\n\n  onFilesUpload(files: FileList): void {\n\n    if (this.disabled) {\n      return;\n    }\n\n    for (let i = 0; i < files.length; i++) {\n\n      const file = files.item(i);\n\n      if (!file) {\n        return;\n      }\n\n      const upload: UploadItem = {\n        file,\n        progress: 0,\n        inProgress: true\n      };\n\n      this.uploadList.push(upload);\n\n      this.upload(upload);\n\n    }\n\n    this.uploadList = this.uploadList;\n\n  }\n\n\n  upload(upload: UploadItem): void {\n\n    this.uploadStart.emit();\n\n    // start uploading and notify the progress\n    this.fileUploader(upload.file, this.params).pipe(\n      tap(res => upload.progress = res.progress),\n      finalize(() => {\n        upload.inProgress = false;\n        this.uploadComplete.emit();\n      })\n    ).subscribe();\n  }\n\n}\n","<div class=\"upload-area\" [ack6FileUpload]=\"fileUploadSettings\" (fileUpload)=\"onFilesUpload($event)\">\n\n  <i class=\"pi pi-paperclip\"></i>\n  <p>Clicca qui per selezionare i file oppure trascinali nell'area tratteggiata</p>\n\n</div>\n\n<div class=\"upload-item\" *ngFor=\"let file of uploadList\">\n\n  <div>\n\n    <p-progressSpinner *ngIf=\"file.inProgress\" [style]=\"{width: '20px', height: '20px'}\"></p-progressSpinner>\n\n    <i *ngIf=\"!file.inProgress && file.progress === 100\" style=\"color: #008000\" class=\"status pi pi-check-circle\"></i>\n\n    <i *ngIf=\"!file.inProgress && file.progress < 100\" style=\"color: #f00\" class=\"status pi pi-times-circle\"></i>\n\n    <div class=\"flex flex-row justify-content-between\">\n\n      <span class=\"ml-3\">{{file.file.name}}</span>\n\n      <span *ngIf=\"file.inProgress || file.progress === 100; else retry\">{{file.progress}} %</span>\n\n      <ng-template #retry>\n        <i class=\"status pi pi-replay\" style=\"cursor: pointer\" (click)=\"upload(file)\"></i>\n      </ng-template>\n\n    </div>\n\n\n  </div>\n\n  <p-progressBar [value]=\"file.progress\" [showValue]=\"false\"></p-progressBar>\n\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n// prime\nimport { PanelModule } from 'primeng/panel';\nimport { DividerModule } from 'primeng/divider';\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\nimport { ProgressBarModule } from 'primeng/progressbar';\n\nimport { MediaManagerComponent } from './containers/media-manager/media-manager.component';\nimport { FileUploadDirective } from './directives/file-upload.directive';\nimport { FileUploadComponent } from './containers/file-upload/file-upload.component';\n\n\n\n@NgModule({\n  declarations: [MediaManagerComponent, FileUploadDirective, FileUploadComponent],\n  imports: [\n    CommonModule,\n    PanelModule,\n    DividerModule,\n    ProgressSpinnerModule,\n    ProgressBarModule\n  ],\n  exports: [\n    MediaManagerComponent,\n    FileUploadDirective,\n    FileUploadComponent\n  ]\n})\nexport class MediaModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3.FileUploadDirective"],"mappings":"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"}