]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
Cleaner activation with Angular directives
authorMichael Shamoon <4887959+shamoon@users.noreply.github.com>
Fri, 11 Mar 2022 22:21:18 +0000 (14:21 -0800)
committerMichael Shamoon <4887959+shamoon@users.noreply.github.com>
Tue, 5 Apr 2022 20:16:13 +0000 (13:16 -0700)
src-ui/src/app/app.component.html
src-ui/src/app/app.component.ts
src-ui/src/theme.scss

index 68c1692b3db7a43ea7c7b7450d276ad53e1eb41b..b02d80c40eea65e66221363ebc69d11ce831930d 100644 (file)
@@ -3,9 +3,11 @@
 <ngx-file-drop dropZoneClassName="main-dropzone" contentClassName="main-content" [disabled]="!dragDropEnabled"
 (onFileDrop)="dropped($event)" (onFileOver)="fileOver()" (onFileLeave)="fileLeave()">
     <ng-template ngx-file-drop-content-tmp>
-        <div class="global-dropzone-overlay">
-            <h1 class="display-6">Drop files to begin upload</h1>
+        <div class="global-dropzone-overlay fade" [class.show]="fileIsOver" [class.hide]="hidden">
+            <h2>Drop files to begin upload</h2>
+        </div>
+        <div [class.inert]="fileIsOver">
+            <router-outlet></router-outlet>
         </div>
-        <router-outlet></router-outlet>
     </ng-template>
-</ngx-file-drop>
\ No newline at end of file
+</ngx-file-drop>
index 3c1be207217483a8d3f87e7a73d42909d81a2d9b..f8c98fbc773edfa8d640401177697836071e7b30 100644 (file)
@@ -1,11 +1,5 @@
 import { SettingsService, SETTINGS_KEYS } from './services/settings.service'
-import {
-  Component,
-  OnDestroy,
-  OnInit,
-  Renderer2,
-  RendererFactory2,
-} from '@angular/core'
+import { Component, OnDestroy, OnInit } from '@angular/core'
 import { Router } from '@angular/router'
 import { Subscription } from 'rxjs'
 import { ConsumerStatusService } from './services/consumer-status.service'
@@ -23,22 +17,20 @@ export class AppComponent implements OnInit, OnDestroy {
   successSubscription: Subscription
   failedSubscription: Subscription
 
-  private renderer: Renderer2
   private fileLeaveTimeoutID: any
+  fileIsOver: boolean = false
+  hidden: boolean = true
 
   constructor(
     private settings: SettingsService,
     private consumerStatusService: ConsumerStatusService,
     private toastService: ToastService,
     private router: Router,
-    private uploadDocumentsService: UploadDocumentsService,
-    rendererFactory: RendererFactory2
+    private uploadDocumentsService: UploadDocumentsService
   ) {
     let anyWindow = window as any
     anyWindow.pdfWorkerSrc = 'assets/js/pdf.worker.min.js'
     this.settings.updateAppearanceSettings()
-
-    this.renderer = rendererFactory.createRenderer(null, null)
   }
 
   ngOnDestroy(): void {
@@ -121,27 +113,29 @@ export class AppComponent implements OnInit, OnDestroy {
   }
 
   public fileOver() {
-    this.renderer.addClass(
-      document.getElementsByClassName('main-content').item(0),
-      'inert'
-    )
+    // allows transition
+    setTimeout(() => {
+      this.fileIsOver = true
+    }, 1)
+    this.hidden = false
+    // stop fileLeave timeout
     clearTimeout(this.fileLeaveTimeoutID)
   }
 
-  public fileLeave() {
+  public fileLeave(immediate: boolean = false) {
+    const ms = immediate ? 0 : 500
+
     this.fileLeaveTimeoutID = setTimeout(() => {
-      this.renderer.removeClass(
-        document.getElementsByClassName('main-content').item(0),
-        'inert'
-      )
-    }, 1000)
+      this.fileIsOver = false
+      // await transition completed
+      setTimeout(() => {
+        this.hidden = true
+      }, 150)
+    }, ms)
   }
 
   public dropped(files: NgxFileDropEntry[]) {
-    this.renderer.removeClass(
-      document.getElementsByClassName('main-content').item(0),
-      'inert'
-    )
+    this.fileLeave(true)
     this.uploadDocumentsService.uploadFiles(files)
     this.toastService.showInfo($localize`Initiating upload...`, 3000)
   }
index 9e43ad6628884edc654fcecadf7cb5f7686723d9..e76b31b2b34a4e0c7f1ef2d7bc62fb53a8159a87 100644 (file)
@@ -255,24 +255,27 @@ table.table {
   right: 0;
   bottom: 0;
   left: 0;
-  background-color: rgba(23, 84, 31, .7);
-  // z-index: $zindex-modal; // 1055
-  z-index: 1055;
-  opacity: 0;
+  background-color: rgba(23, 84, 31, .8);
+  z-index: 1055; // $zindex-modal
   pointer-events: none !important;
   user-select: none !important;
   text-align: center;
   padding-top: 25%;
-  transition: opacity 0.2s ease;
-}
 
-.main-dropzone.ngx-file-drop__drop-zone--over {
-  .global-dropzone-overlay {
-    opacity: 1;
+  &.show {
+    opacity: 1 !important;
+  }
+
+  &.hide {
+    display: none;
   }
 }
 
-.main-content.inert {
+.ngx-file-drop__drop-zone--over .global-dropzone-overlay {
+  opacity: 0;
+}
+
+.inert {
   pointer-events: none !important;
   user-select: none !important;
 }