src/app/directives/file-drop.directive.ts

Metadata

Relationships

Depends on

No results matching.

Index

Properties
Methods
Inputs
Outputs
HostListeners

Constructor

constructor(element: ElementRef)
Parameters :
Name Type Optional
element ElementRef No

Inputs

uploader
Type : FileUploader

Outputs

fileDrop
Type : EventEmitter<File[]>
fileOver
Type : EventEmitter<any>

HostListeners

dragleave
Arguments : '$event'
dragover
Arguments : '$event'

Dragging element drag over event

drop
Arguments : '$event'

Dragging element drop event

Methods

Protected _preventAndStop
_preventAndStop(event: MouseEvent)

Prevent propagation trough elements and stop default behavior For particular event

Parameters :
Name Type Optional
event MouseEvent No
Returns : void
onDragLeave
onDragLeave(event: DragEvent)
Decorators :
@HostListener('dragleave', ['$event'])
Parameters :
Name Type Optional
event DragEvent No
Returns : void
onDragOver
onDragOver(event: DragEvent)
Decorators :
@HostListener('dragover', ['$event'])

Dragging element drag over event

Parameters :
Name Type Optional
event DragEvent No
Returns : void
onDrop
onDrop(event: DragEvent)
Decorators :
@HostListener('drop', ['$event'])

Dragging element drop event

Parameters :
Name Type Optional
event DragEvent No
Returns : void

Properties

Protected element
Type : ElementRef
import {
  Directive,
  EventEmitter,
  ElementRef,
  HostListener,
  Input,
  Output
} from '@angular/core'
import { FileUploader } from '../models/FileUploader.class'

@Directive({
  selector: '[appFileDrop]',
  standalone: false
})
export class FileDropDirective {
  @Input() uploader?: FileUploader
  @Output() fileOver: EventEmitter<any> = new EventEmitter()
  @Output() fileDrop: EventEmitter<File[]> = new EventEmitter<File[]>()

  protected element: ElementRef

  constructor(element: ElementRef) {
    this.element = element
  }

  /**
   * Dragging element drop event
   */
  @HostListener('drop', ['$event'])
  onDrop(event: DragEvent): void {
    this._preventAndStop(event)
    const files = event.dataTransfer?.files
    const fileList: File[] = []

    if (files) {
      for (let i = 0; i < files.length; i++) {
        fileList.push(files[i])
      }
    }

    this.uploader?.addToQueue(fileList)
    this.fileOver.emit(false)
    this.fileDrop.emit(fileList)
  }

  /**
   * Dragging element drag over event
   */
  @HostListener('dragover', ['$event'])
  onDragOver(event: DragEvent): void {
    this._preventAndStop(event)

    const transfer = event.dataTransfer
    if (transfer) {
      if (transfer.types.indexOf('Files') === -1) return

      transfer.dropEffect = 'copy'
    }

    this.fileOver.emit(true)
  }

  @HostListener('dragleave', ['$event'])
  onDragLeave(event: DragEvent): void {
    this._preventAndStop(event)
    this.fileOver.emit(false)
  }

  /**
   * Prevent propagation trough elements and stop default behavior
   * For particular event
   */
  protected _preventAndStop(event: MouseEvent): void {
    event.preventDefault()
    event.stopPropagation()
  }
}

results matching ""

    No results matching ""