Direct signal-backed file drop

This commit is contained in:
shamoon
2026-07-08 11:31:25 -07:00
parent 3c3d7b3b82
commit 8b11fcc02d
2 changed files with 9 additions and 9 deletions
@@ -1,7 +1,7 @@
<div [class.pe-none]="fileIsOver">
<div [class.pe-none]="fileIsOver()">
<ng-content select="[content]"></ng-content>
</div>
<div class="global-dropzone-overlay position-fixed top-0 start-0 bottom-0 end-0 text-center pe-none" [class.active]="fileIsOver && !hidden">
<div class="global-dropzone-overlay position-fixed top-0 start-0 bottom-0 end-0 text-center pe-none" [class.active]="fileIsOver() && !hidden()">
<h2 class="pe-none position-absolute top-50 start-50 translate-middle" i18n>Drop files to begin upload</h2>
</div>
@@ -1,4 +1,4 @@
import { Component, HostListener, inject } from '@angular/core'
import { Component, HostListener, inject, signal } from '@angular/core'
import {
PermissionAction,
PermissionsService,
@@ -21,8 +21,8 @@ export class FileDropComponent {
private permissionsService = inject(PermissionsService)
private fileLeaveTimeoutID: any
fileIsOver: boolean = false
hidden: boolean = true
fileIsOver = signal<boolean>(false)
hidden = signal<boolean>(true)
public get dragDropEnabled(): boolean {
return (
@@ -42,9 +42,9 @@ export class FileDropComponent {
this.settings.globalDropzoneActive = true
// allows transition
setTimeout(() => {
this.fileIsOver = true
this.fileIsOver.set(true)
}, 1)
this.hidden = false
this.hidden.set(false)
// stop fileLeave timeout
clearTimeout(this.fileLeaveTimeoutID)
}
@@ -61,10 +61,10 @@ export class FileDropComponent {
const ms = immediate ? 0 : 500
this.fileLeaveTimeoutID = setTimeout(() => {
this.fileIsOver = false
this.fileIsOver.set(false)
// await transition completed
setTimeout(() => {
this.hidden = true
this.hidden.set(true)
}, 150)
}, ms)
}