UNPKG

27.6 kBSource Map (JSON)View Raw
1{"version":3,"file":"bmat-angular-forms-uploaders.js","sources":["ng://@bmat/angular/forms/uploaders/lib/upload-events-service/upload-events-service.ts","ng://@bmat/angular/forms/uploaders/lib/file-upload/file-upload.directive.ts","ng://@bmat/angular/forms/uploaders/lib/file-upload-draggable/file-upload-draggable.directive.ts","ng://@bmat/angular/forms/uploaders/lib/bm-file-uploader/bm-file.uploader.component.ts","ng://@bmat/angular/forms/uploaders/lib/bm-click-file-upload/bm-click-file-upload.component.ts","ng://@bmat/angular/forms/uploaders/lib/uploaders.module.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { combineLatest, Observable, of, Subject } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\n\nimport {\n FileStatus,\n FileUploaderFile,\n FileUploaderUploadEvent,\n UploadEvent,\n ValidDataTypes,\n} from '../uploaders.interfaces';\n\n@Injectable()\n/**\n * Service to share the upload events between draggable zones\n * and inputs\n */\nexport class UploadEventsService {\n public events$: Observable<FileUploaderUploadEvent>;\n\n private _uploads$: Subject<Observable<UploadEvent>[]>;\n\n constructor() {\n this._uploads$ = new Subject();\n\n this.events$ = this._uploads$.pipe(\n switchMap(obs => this.mergeIndividualUploads(obs)),\n );\n }\n\n // tslint:disable-next-line:max-func-body-length\n public readFiles(\n fileList: FileList | null,\n dataType: ValidDataTypes = ValidDataTypes.None,\n ) {\n const fileObservables: Observable<UploadEvent>[] = [];\n if (fileList) {\n // tslint:disable-next-line:prefer-for-of\n for (let i = 0; i < fileList.length; i += 1) {\n fileObservables.push(this.fileReaderObsFactory(fileList[i], dataType));\n }\n }\n this._uploads$.next(fileObservables);\n }\n\n private mergeIndividualUploads(obs: Observable<UploadEvent>[]) {\n return new Observable<FileUploaderUploadEvent>(observer => {\n const subs = combineLatest(obs).subscribe({\n next: events => {\n let aborted = false;\n let completedCount = 0;\n\n const next: FileUploaderUploadEvent = {\n files: events,\n status: FileStatus.EMPTY,\n error: null,\n };\n\n eventLoop: for (const event of events) {\n switch (event.status) {\n case FileStatus.ABORT:\n next.status = FileStatus.ABORT;\n aborted = true;\n break eventLoop;\n case FileStatus.LOADING:\n next.status = FileStatus.LOADING;\n break;\n case FileStatus.DONE:\n completedCount += 1;\n break;\n default:\n }\n }\n\n if (aborted) {\n for (const event of events) {\n if (event.reader) {\n event.reader.abort();\n }\n }\n } else if (completedCount === events.length) {\n next.status = FileStatus.DONE;\n }\n\n observer.next(next);\n },\n complete: () => observer.complete(),\n error: (err: UploadEvent) => observer.error(err),\n });\n\n return () => {\n subs.unsubscribe();\n };\n });\n }\n\n // tslint:disable-next-line:max-func-body-length\n private fileReaderObsFactory(file: File, dataType: ValidDataTypes) {\n const fileData: FileUploaderFile = {\n name: file.name,\n size: file.size,\n type: file.type,\n data: null,\n lastModified: file.lastModified,\n total: file.size,\n loaded: 0,\n };\n\n if (dataType === ValidDataTypes.None) {\n fileData.data = file;\n\n return of(this.eventFactory(fileData, FileStatus.DONE, null));\n }\n\n // tslint:disable-next-line:max-func-body-length\n return new Observable<UploadEvent>(observer => {\n let completed = false;\n\n const reader = new FileReader();\n\n reader.addEventListener(\n 'error',\n () => {\n observer.error(this.eventFactory(fileData, FileStatus.ERROR, reader));\n completed = true;\n observer.complete();\n },\n { once: true },\n );\n\n reader.addEventListener(\n 'abort',\n () => {\n observer.next(this.eventFactory(fileData, FileStatus.ABORT, reader));\n completed = true;\n observer.complete();\n },\n { once: true },\n );\n\n const onprogress = (e: ProgressEvent) => {\n if (e.lengthComputable) {\n fileData.total = e.total;\n fileData.loaded = e.loaded;\n }\n observer.next(this.eventFactory(fileData, FileStatus.LOADING, reader));\n };\n\n reader.addEventListener(\n 'loadstart',\n () => {\n observer.next(\n this.eventFactory(fileData, FileStatus.LOADING, reader),\n );\n },\n { once: true },\n );\n\n reader.addEventListener('load', () => {\n fileData.loaded = fileData.size as number;\n fileData.data = reader.result;\n observer.next(this.eventFactory(fileData, FileStatus.DONE, reader));\n\n completed = true;\n observer.complete();\n });\n\n switch (dataType) {\n case ValidDataTypes.ArrayBuffer:\n reader.readAsArrayBuffer(file);\n break;\n case ValidDataTypes.DataURL:\n reader.readAsDataURL(file);\n break;\n case ValidDataTypes.Text:\n reader.readAsText(file);\n break;\n default:\n observer.error(\n new TypeError(\n 'Invalid output type: Select ArrayBuffer, DataURL or Text',\n ),\n );\n completed = true;\n observer.complete();\n return;\n }\n\n return () => {\n if (reader) {\n if (!completed) {\n reader.abort();\n }\n\n if (onprogress) {\n reader.removeEventListener('progress', onprogress);\n }\n }\n };\n });\n }\n\n private eventFactory(\n file: FileUploaderFile,\n status: FileStatus,\n reader: FileReader | null = null,\n ) {\n return {\n status,\n reader,\n file: { ...file },\n };\n }\n}\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\n\nimport { UploadEventsService } from '../upload-events-service/upload-events-service';\nimport { ValidDataTypes } from '../uploaders.interfaces';\n\n@Directive({\n selector: 'input[bmFileUpload]',\n})\n/**\n * Implements the required callback and methods of file uploading\n */\nexport class FileUploadDirective {\n @Input() public dataType!: ValidDataTypes;\n\n constructor(\n private _elementRef: ElementRef<HTMLInputElement>,\n private _uploadEventsService: UploadEventsService,\n ) {}\n\n @HostListener('change', ['$event'])\n public onInputChange(e: Event) {\n e.preventDefault();\n const next =\n this._elementRef.nativeElement.files &&\n this._elementRef.nativeElement.files.length\n ? this._elementRef.nativeElement.files\n : null;\n\n this._uploadEventsService.readFiles(next, this.dataType);\n }\n}\n","import { Directive, HostBinding, HostListener, Input } from '@angular/core';\n\nimport { UploadEventsService } from '../upload-events-service/upload-events-service';\nimport { ValidDataTypes } from '../uploaders.interfaces';\n\n@Directive({ selector: '[bmFileUploadDraggable]' })\n/**\n * Make an element a draggable target\n */\nexport class FileUploadDraggableDirective {\n @Input() public disabled!: boolean;\n @Input() public dataType!: ValidDataTypes;\n\n @HostBinding('class.drag-hover')\n public dragHover!: boolean;\n\n constructor(private _uploadEventsService: UploadEventsService) {}\n\n @HostListener('dragover', ['$event'])\n public ondragover(event: DragEvent) {\n if (!this.disabled) {\n event.preventDefault();\n this.dragHover = true;\n }\n }\n\n @HostListener('dragleave')\n public ondragleave() {\n this.dragHover = false;\n }\n\n @HostListener('drop', ['$event'])\n public ondrop(event: DragEvent) {\n const { dataTransfer } = event;\n if (!this.disabled && dataTransfer) {\n dataTransfer.dropEffect = 'copy';\n this._uploadEventsService.readFiles(dataTransfer.files, this.dataType);\n\n event.preventDefault();\n }\n }\n}\n","/**\n * Angular Component BMFileUploader\n * Drag & Drop File uploader\n */\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n forwardRef,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\nimport { UploadEventsService } from '../upload-events-service/upload-events-service';\nimport {\n FileStatus,\n FileUploaderFile,\n FileUploaderUploadEvent,\n ValidDataTypes,\n} from '../uploaders.interfaces';\n\n@Component({\n selector: 'bm-file-upload',\n templateUrl: 'bm-file.uploader.component.html',\n styleUrls: ['bm-file.uploader.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n // tslint:disable-next-line:no-forward-ref\n useExisting: forwardRef(() => BMFileUploaderComponent),\n multi: true,\n },\n UploadEventsService,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n // tslint:disable-next-line:use-component-view-encapsulation\n encapsulation: ViewEncapsulation.None,\n})\nexport class BMFileUploaderComponent\n implements OnInit, OnDestroy, ControlValueAccessor {\n @Input() public accept!: string;\n @Input() public dataType!: ValidDataTypes;\n @Input() public disabled!: boolean;\n @Input() public set multiple(v: boolean) {\n this.multipleInt = v ? 1 : 0;\n }\n public get multiple() {\n return this.multipleInt === 1;\n }\n\n @Output() public abort = new EventEmitter<FileUploaderUploadEvent>();\n @Output() public done = new EventEmitter<FileUploaderUploadEvent>();\n @Output() public empty = new EventEmitter<FileUploaderUploadEvent>();\n @Output() public error = new EventEmitter<FileUploaderUploadEvent>();\n @Output() public loading = new EventEmitter<FileUploaderUploadEvent>();\n\n public multipleInt = 0;\n\n private _subs: Subscription = Subscription.EMPTY;\n\n private _onChangeCb!: (_: FileUploaderFile[]) => void;\n private _onTouchedCb!: () => void;\n\n constructor(private _uploadEventsService: UploadEventsService) {}\n\n public ngOnInit() {\n this._uploadEventsService.events$.subscribe({\n // tslint:disable-next-line:cyclomatic-complexity\n next: event => {\n switch (event.status) {\n case FileStatus.ABORT:\n this.abort.emit(event);\n\n if (this._onChangeCb) {\n this._onChangeCb([]);\n }\n\n break;\n case FileStatus.DONE:\n this.done.emit(event);\n\n if (this._onChangeCb) {\n this._onChangeCb(event.files.map(e => e.file));\n }\n\n break;\n case FileStatus.EMPTY:\n this.empty.emit(event);\n\n if (this._onChangeCb) {\n this._onChangeCb([]);\n }\n\n break;\n case FileStatus.ERROR:\n this.error.emit(event);\n\n if (this._onChangeCb) {\n this._onChangeCb([]);\n }\n\n break;\n case FileStatus.LOADING:\n this.loading.emit(event);\n\n if (this._onTouchedCb) {\n this._onTouchedCb();\n }\n break;\n default:\n }\n },\n });\n }\n\n public ngOnDestroy() {\n this._subs.unsubscribe();\n }\n\n public onFocusin() {\n if (this._onTouchedCb) {\n this._onTouchedCb();\n }\n }\n\n public writeValue(val: FileList | unknown) {\n if (val instanceof FileList) {\n this._uploadEventsService.readFiles(val, this.dataType);\n } else {\n this._uploadEventsService.readFiles(null, this.dataType);\n }\n }\n\n public registerOnChange(fn: (_: FileUploaderFile[]) => void) {\n this._onChangeCb = fn;\n }\n\n public registerOnTouched(fn: () => void) {\n this._onTouchedCb = fn;\n }\n\n public setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n }\n}\n","/**\n * Angular Component BMFileUploader\n * Drag & Drop File uploader\n */\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\nimport {\n FileStatus,\n FileUploaderFile,\n FileUploaderUploadEvent,\n ValidDataTypes,\n} from '../uploaders.interfaces';\n\nimport { UploadEventsService } from '../upload-events-service/upload-events-service';\n\n@Component({\n selector: 'bm-click-file-upload',\n templateUrl: 'bm-click-file-upload.component.html',\n styleUrls: ['bm-click-file-upload.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n // tslint:disable-next-line:no-forward-ref\n useExisting: forwardRef(() => BMClickFileUploaderComponent),\n multi: true,\n },\n UploadEventsService,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n // tslint:disable-next-line:use-component-view-encapsulation\n encapsulation: ViewEncapsulation.None,\n})\nexport class BMClickFileUploaderComponent\n implements OnInit, OnDestroy, ControlValueAccessor {\n @Input() public accept!: string;\n @Input() public dataType!: ValidDataTypes;\n @Input() public disabled!: boolean;\n @Input() public multiple!: boolean;\n\n @Output() public abort = new EventEmitter<FileUploaderUploadEvent>();\n @Output() public done = new EventEmitter<FileUploaderUploadEvent>();\n @Output() public empty = new EventEmitter<FileUploaderUploadEvent>();\n @Output() public error = new EventEmitter<FileUploaderUploadEvent>();\n @Output() public loading = new EventEmitter<FileUploaderUploadEvent>();\n\n @ViewChild('inputFile', { read: ElementRef, static: true })\n private _inputElement!: ElementRef<HTMLInputElement>;\n\n private _subs: Subscription = Subscription.EMPTY;\n\n private _onChangeCb!: (_: FileUploaderFile[]) => void;\n private _onTouchedCb!: () => void;\n\n constructor(private _uploadEventsService: UploadEventsService) {}\n\n public ngOnInit() {\n this._uploadEventsService.events$.subscribe({\n // tslint:disable-next-line:cyclomatic-complexity\n next: event => {\n switch (event.status) {\n case FileStatus.ABORT:\n this.abort.emit(event);\n\n if (this._onChangeCb) {\n this._onChangeCb([]);\n }\n\n break;\n case FileStatus.DONE:\n this.done.emit(event);\n\n if (this._onChangeCb) {\n this._onChangeCb(event.files.map(e => e.file));\n }\n\n break;\n case FileStatus.EMPTY:\n this.empty.emit(event);\n\n if (this._onChangeCb) {\n this._onChangeCb([]);\n }\n\n break;\n case FileStatus.ERROR:\n this.error.emit(event);\n\n if (this._onChangeCb) {\n this._onChangeCb([]);\n }\n\n break;\n case FileStatus.LOADING:\n this.loading.emit(event);\n\n if (this._onTouchedCb) {\n this._onTouchedCb();\n }\n break;\n default:\n }\n },\n });\n }\n\n public ngOnDestroy() {\n this._subs.unsubscribe();\n }\n\n public onFocusin() {\n if (this._onTouchedCb) {\n this._onTouchedCb();\n }\n }\n\n public writeValue(val: FileList | unknown) {\n if (val instanceof FileList) {\n this._uploadEventsService.readFiles(val, this.dataType);\n } else {\n this._inputElement.nativeElement.value = '';\n this._uploadEventsService.readFiles(null, this.dataType);\n }\n }\n\n public registerOnChange(fn: (_: FileUploaderFile[]) => void) {\n this._onChangeCb = fn;\n }\n\n public registerOnTouched(fn: () => void) {\n this._onTouchedCb = fn;\n }\n\n public setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { BMClickFileUploaderComponent } from './bm-click-file-upload/bm-click-file-upload.component';\nimport { BMFileUploaderComponent } from './bm-file-uploader/bm-file.uploader.component';\nimport { FileUploadDraggableDirective } from './file-upload-draggable/file-upload-draggable.directive';\nimport { FileUploadDirective } from './file-upload/file-upload.directive';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [\n BMClickFileUploaderComponent,\n BMFileUploaderComponent,\n FileUploadDirective,\n FileUploadDraggableDirective,\n ],\n exports: [\n BMClickFileUploaderComponent,\n BMFileUploaderComponent,\n FileUploadDirective,\n FileUploadDraggableDirective,\n ],\n})\nexport class UploadersModule {}\n"],"names":[],"mappings":"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"}
\No newline at end of file