UNPKG

ngx-uploadx

Version:
82 lines 9.48 kB
import { ContentChild, Directive, HostBinding, HostListener } from '@angular/core'; import { UploadxDirective } from './uploadx.directive'; import * as i0 from "@angular/core"; import * as i1 from "./uploadx.service"; export class UploadxDropDirective { uploadService; active = false; fileInput; constructor(uploadService) { this.uploadService = uploadService; } dropHandler(event) { this._stopEvents(event); this.active = false; const files = this.getFiles(event); if (files.length) { this.fileInput ? this.fileInput.fileListener(files) : this.uploadService.handleFiles(files); } } onDragOver(event) { this._stopEvents(event); if (event.dataTransfer?.items[0]?.kind === 'file') { if (this.fileInput?.options.multiple === false && event.dataTransfer.items.length > 1) { event.dataTransfer.dropEffect = 'none'; } else { event.dataTransfer.dropEffect = 'copy'; this.active = true; } } } onDragLeave(event) { this._stopEvents(event); this.active = false; } /** * Extracts the files from a `DragEvent` object */ getFiles(event) { const dataTransfer = new DataTransfer(); const items = event.dataTransfer?.items; if (items?.length) { for (let i = 0; i < items.length; i++) { const item = items[i]; if (item.kind === 'file' && !item.webkitGetAsEntry()?.isDirectory) { const file = item.getAsFile(); file && dataTransfer.items.add(file); } } } return dataTransfer.files; } _stopEvents(event) { event.stopPropagation(); event.preventDefault(); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UploadxDropDirective, deps: [{ token: i1.UploadxService }], target: i0.ɵɵFactoryTarget.Directive }); static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: UploadxDropDirective, isStandalone: true, selector: "[uploadxDrop]", host: { listeners: { "drop": "dropHandler($event)", "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)" }, properties: { "class.uploadx-drop-active": "this.active" } }, queries: [{ propertyName: "fileInput", first: true, predicate: UploadxDirective, descendants: true }], ngImport: i0 }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UploadxDropDirective, decorators: [{ type: Directive, args: [{ selector: '[uploadxDrop]', standalone: true }] }], ctorParameters: () => [{ type: i1.UploadxService }], propDecorators: { active: [{ type: HostBinding, args: ['class.uploadx-drop-active'] }], fileInput: [{ type: ContentChild, args: [UploadxDirective, { static: false }] }], dropHandler: [{ type: HostListener, args: ['drop', ['$event']] }], onDragOver: [{ type: HostListener, args: ['dragover', ['$event']] }], onDragLeave: [{ type: HostListener, args: ['dragleave', ['$event']] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkeC1kcm9wLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91cGxvYWR4L2xpYi91cGxvYWR4LWRyb3AuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQU92RCxNQUFNLE9BQU8sb0JBQW9CO0lBT1g7SUFMcEIsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUdmLFNBQVMsQ0FBb0I7SUFFN0IsWUFBb0IsYUFBNkI7UUFBN0Isa0JBQWEsR0FBYixhQUFhLENBQWdCO0lBQUcsQ0FBQztJQUdyRCxXQUFXLENBQUMsS0FBZ0I7UUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5RixDQUFDO0lBQ0gsQ0FBQztJQUdELFVBQVUsQ0FBQyxLQUFnQjtRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ2xELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsUUFBUSxLQUFLLEtBQUssSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RGLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztZQUN6QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNyQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFHRCxXQUFXLENBQUMsS0FBZ0I7UUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRLENBQUMsS0FBZ0I7UUFDdkIsTUFBTSxZQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN4QyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQztRQUN4QyxJQUFJLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN0QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQztvQkFDbEUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUM5QixJQUFJLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBRVMsV0FBVyxDQUFDLEtBQWdCO1FBQ3BDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDekIsQ0FBQzt3R0EzRFUsb0JBQW9COzRGQUFwQixvQkFBb0IsMFNBSWpCLGdCQUFnQjs7NEZBSm5CLG9CQUFvQjtrQkFKaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCO21GQUdDLE1BQU07c0JBREwsV0FBVzt1QkFBQywyQkFBMkI7Z0JBSXhDLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBTWpELFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBV2hDLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBY3BDLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb250ZW50Q2hpbGQsIERpcmVjdGl2ZSwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVXBsb2FkeERpcmVjdGl2ZSB9IGZyb20gJy4vdXBsb2FkeC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVXBsb2FkeFNlcnZpY2UgfSBmcm9tICcuL3VwbG9hZHguc2VydmljZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t1cGxvYWR4RHJvcF0nLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFVwbG9hZHhEcm9wRGlyZWN0aXZlIHtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy51cGxvYWR4LWRyb3AtYWN0aXZlJylcbiAgYWN0aXZlID0gZmFsc2U7XG5cbiAgQENvbnRlbnRDaGlsZChVcGxvYWR4RGlyZWN0aXZlLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgZmlsZUlucHV0PzogVXBsb2FkeERpcmVjdGl2ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHVwbG9hZFNlcnZpY2U6IFVwbG9hZHhTZXJ2aWNlKSB7fVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2Ryb3AnLCBbJyRldmVudCddKVxuICBkcm9wSGFuZGxlcihldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5fc3RvcEV2ZW50cyhldmVudCk7XG4gICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICBjb25zdCBmaWxlcyA9IHRoaXMuZ2V0RmlsZXMoZXZlbnQpO1xuICAgIGlmIChmaWxlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZmlsZUlucHV0ID8gdGhpcy5maWxlSW5wdXQuZmlsZUxpc3RlbmVyKGZpbGVzKSA6IHRoaXMudXBsb2FkU2VydmljZS5oYW5kbGVGaWxlcyhmaWxlcyk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZHJhZ292ZXInLCBbJyRldmVudCddKVxuICBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9zdG9wRXZlbnRzKGV2ZW50KTtcbiAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyPy5pdGVtc1swXT8ua2luZCA9PT0gJ2ZpbGUnKSB7XG4gICAgICBpZiAodGhpcy5maWxlSW5wdXQ/Lm9wdGlvbnMubXVsdGlwbGUgPT09IGZhbHNlICYmIGV2ZW50LmRhdGFUcmFuc2Zlci5pdGVtcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ25vbmUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnY29weSc7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkcmFnbGVhdmUnLCBbJyRldmVudCddKVxuICBvbkRyYWdMZWF2ZShldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5fc3RvcEV2ZW50cyhldmVudCk7XG4gICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyB0aGUgZmlsZXMgZnJvbSBhIGBEcmFnRXZlbnRgIG9iamVjdFxuICAgKi9cbiAgZ2V0RmlsZXMoZXZlbnQ6IERyYWdFdmVudCk6IEZpbGVMaXN0IHwgRmlsZVtdIHtcbiAgICBjb25zdCBkYXRhVHJhbnNmZXIgPSBuZXcgRGF0YVRyYW5zZmVyKCk7XG4gICAgY29uc3QgaXRlbXMgPSBldmVudC5kYXRhVHJhbnNmZXI/Lml0ZW1zO1xuICAgIGlmIChpdGVtcz8ubGVuZ3RoKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgaWYgKGl0ZW0ua2luZCA9PT0gJ2ZpbGUnICYmICFpdGVtLndlYmtpdEdldEFzRW50cnkoKT8uaXNEaXJlY3RvcnkpIHtcbiAgICAgICAgICBjb25zdCBmaWxlID0gaXRlbS5nZXRBc0ZpbGUoKTtcbiAgICAgICAgICBmaWxlICYmIGRhdGFUcmFuc2Zlci5pdGVtcy5hZGQoZmlsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFUcmFuc2Zlci5maWxlcztcbiAgfVxuXG4gIHByb3RlY3RlZCBfc3RvcEV2ZW50cyhldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxufVxuIl19